Skip to content

串流與 Hooks

源码版本v2026.7.20

職責

串流消費——agent 的 worker 執行緒同步地 stream_delta_callback(text),而平台發送是非同步的;GatewayStreamConsumer 把同步增量橋到非同步,漸進式編輯同一條平台訊息,讓使用者看到「打字機」效果。② Hooks——在訊息生命週期節點(收到、生成前、生成後、投遞)插入自訂邏輯,如安全過濾、計費、kanban 同步。③ Relay——跨實例/跨 profile 的訊息中繼。

關鍵檔案

資料流

  1. GatewayRunner 啟動 _start_stream_consumer:21218
  2. 建構 GatewayStreamConsumer,把 consumer.on_delta 作為 stream_delta_callback 傳給 AIAgent(run_agent.py:400)。
  3. agent 在 worker 執行緒同步呼叫 on_delta(text) → 消費器把增量塞進非同步佇列。
  4. 消費器協程從佇列取增量,按 StreamConsumerConfig:55 策略:
    • auto/draft:優先原生 draft 串流(send_draft:2650),回退到普通編輯
    • 最終編輯可能延遲(慢推理模型場景),避免高頻抖動
  5. 串流完成後 sentinel 信號觸發最終編輯,交給 delivery_ledger:155 記帳。
  6. 全程各節點觸發 hooks(收到/生成前/生成後/投遞),內建 hook(gateway/builtin_hooks/)執行安全、計費、kanban 等。

小結

串流消費器是「同步 agent 回調 ↔ 非同步平台投遞」的緩衝與節流層,解決兩個時鐘域不匹配。Hooks 是橫切關注點(安全/計費/同步)的插入點。兩者讓網關在不污染 agent 主幹的前提下,支援即時打字、安全過濾與跨實例 relay。

非官方社群學習站,內容以 MIT 授權的 NousResearch/hermes-agent 原始碼為依據。