DEV Community

Cover image for Agenvoy - Pub/Sub 事件攔截與分發
邱敬幃 Pardn Chiu
邱敬幃 Pardn Chiu

Posted on

Agenvoy - Pub/Sub 事件攔截與分發

Agenvoy - Make AI actually work for you — your personal AI assistant.


同一個 session 可能同時被多個目標觀察,Web 界面(尚未釋出)、TUI 介面、Telegram / Discord,又或是被其他 agent 視窗呼叫

都需要看到同一個 session 的即時狀態,包括 agent 執行過程
第一版是讓各視窗啟動時輪詢狀態,搭配全局日誌檔讓外部工具 tail。但這兩種方式在長期使用下會遇到輪詢有延遲,啟動太多監聽器

v0.25.6 起設計了讓所有事件統一的 Pub/Sub,並且用的方式是截取發送的方式,最低影響原先的執行流程
讓視窗只需訂閱自己感興趣的 channel,就能即時接收最新動態,不只是 agent 回應,而是完整的 session 生命週期狀態


Agent 執行

agent 執行時產生的每一個事件,包含用戶輸入、工具呼叫結果、思考片段、最終回應都會透過攔截器截取並廣播,agent 不需要負責處理訂閱者的動作

agent 事件 → channel
        ↓
Pub(sessionID, event)   ← 廣播
        ↓
原始 events channel     ← 原有 handler
Enter fullscreen mode Exit fullscreen mode

Daemon 日誌

新增 daemonSlogHandler 攔截所有 slog 呼叫,在寫入 stderr 的同時,向全部 channel 廣播(但不包含 Telegram / Discord 訊息),所有系統事件,包含連線建立、工具超時、記憶體壓縮、錯誤警告,只要有開啟 TUI 都能即時追蹤

slog.Info("xxx")
        
daemonSlogHandler.Handle()
        ├── 寫入 stderr
        └── Pub("daemon", EventDaemonLog{...})    廣播
Enter fullscreen mode Exit fullscreen mode

Top comments (0)