新增中間件

上一頁展示了技能如何將可重複使用的領域專業知識——說明、參考資料和腳本——打包成自成一體的單元,讓任何客服人員都能隨時載入。 但當你將代理部署到生產環境時,會出現一類新的問題:這些問題貫穿 每一次 互動,無論代理做什麼。

你需要記錄每一個請求和回應。 你需要在模型看到有害內容前設置護欄,阻擋它。 你需要執行速率限制、優雅地捕捉例外,並注入遙測數據——而這一切都不能觸及代理的核心邏輯。 把這些問題複製貼上到每個代理(或每個工具、每個技能)上,不具有擴展性,反而會造成維護上的麻煩。

中介軟體解決了這個問題。 中介軟體讓你能用可重複使用的行為包裝代理的 執行管線 ,這些行為能攔截、檢查並修改明確定義的請求與回應。 可以把中介軟體想像成一系列環繞代理人的同心層——每一層都有機會在輸入到達代理之前對輸入採取行動,並在輸出到達呼叫者之前採取行動。

何時使用

在以下情況下,將中介軟體加入您的代理程式:

  • 你需要 設下護欄 ,在模型處理前或之後阻擋有害、離題或違反政策的內容。
  • 你希望所有客服人員的互動都能集中 記錄或遙測 ,而不需逐個調整。
  • 你需要 修改請求或回應 ——豐富提示、轉換輸出,或完全替換結果——但不改變代理邏輯。
  • 你要執行像是速率限制、內容過濾或驗證檢查等 政策 ,這些都適用於每次執行。
  • 你需要持續 處理異常 ——重試暫時性失敗、回傳優雅的備用回應,或是記錄錯誤以進行診斷。
  • 你希望在整個流程 中共享狀態 ——例如追蹤請求時序或累積多個中介軟體元件所需的指標。

小提示

代理框架內建用於追蹤和度量的工具。 詳情請參見 可觀察 性。

中介軟體流程的運作方式

當你呼叫代理的執行方法時,請求不會直接送到模型。 相反地,它會經過一條由中介軟體層組成的流程,每個中介軟體層都能檢查或修改請求,委派給下一層,然後在返回時檢查或修改回應。

┌─────────────────────────────────────────────────────────┐
│  Caller: agent.run("What's the weather?")               │
└──────────────┬──────────────────────────────────────────┘
               ▼
┌─────────────────────────────────────────────────────────┐
│  Middleware 1 (Logging)                                  │
│  • Logs the incoming request                            │
│  • Calls next middleware                                │
│  • Logs the outgoing response                           │
└──────────────┬──────────────────────────────────────────┘
               ▼
┌─────────────────────────────────────────────────────────┐
│  Middleware 2 (Guardrails)                               │
│  • Checks input against content policy                  │
│  • If blocked → returns early with rejection message    │
│  • If allowed → calls next middleware                   │
│  • Checks output against content policy                 │
└──────────────┬──────────────────────────────────────────┘
               ▼
┌─────────────────────────────────────────────────────────┐
│  Agent core (model invocation, tool calls, etc.)        │
└─────────────────────────────────────────────────────────┘

關鍵點:

  1. 每個中介軟體自行決定是否繼續。 中介軟體可以呼叫鏈中的下一層來讓流程正常進行,或者它可以直接回傳回應來中斷管線運行,例如當護欄阻擋請求時。
  2. 中介軟體能雙向看待。 中介軟體會在委派之前(檢查或修改輸入)及回應回傳之後(檢查或修改輸出)執行程式碼。 這就是經典的「洋蔥」圖案。
  3. 多個中介軟體串連在一起。 當你註冊多個中介軟體元件時,它們會巢狀:第一個註冊的中介軟體是最外層,最後一個註冊的中介軟體是離代理最近的最內層。

小提示

欲詳細了解中介軟體如何融入完整的代理執行流程——包括上下文提供者與聊天客戶端層——請參閱 代理流程架構

中介軟體能做什麼

Agent Framework 支援管線三層的中介軟體——代理執行、函式呼叫與聊天客戶端——讓你能細緻控制執行截取位置。 常見的模式包括:

樣式 範例 Reference
護欄與終端 封鎖有害內容,限制對話長度 終端與護欄
例外狀況處理 在暫態故障時重試,回傳備援回應 例外狀況處理
結果覆寫 刪除敏感資料、豐富或替換代理輸出 結果覆寫
共用狀態 在中介軟體間傳遞請求 ID 或時序資料 共享狀態
執行時上下文 根據會話、使用者或執行設定變更行為 執行環境背景
範圍 將中介軟體套用到所有執行或只執行一次執行 代理人與執行範圍

關於定義與註冊中介軟體的完整流程,請參見 「定義中介軟體」。 完整架構概述請參閱 中介軟體概述

考慮事項

考量事項 詳細資料
關注點分離 中介軟體會讓你的代理程式碼、工具和技能中排除交叉邏輯。 每個中介軟體元件都有一項責任——日誌記錄、護欄、錯誤處理——你可以獨立新增、移除或重新排序。
順序依賴性 中介軟體形成一條鏈。 你註冊中介軟體的順序很重要:第一個執行的日誌中介軟體會看到原始輸入,而最後執行的則會看到已經被先前中介軟體修改過的輸入。 謹慎地規劃你的管線安排。
除錯複雜度 當中介軟體修改輸入或輸出時,除錯需要了解完整的管線。 回應看起來不對,不是因為代理本身,而是因為中介軟體轉換了它。 好的日誌中介軟體(放在鏈條的早期)有助於診斷這些情況。
效能開銷 每個中介軟體層都會為每個請求增加處理時間。 對於像伐木這類輕量級作業,這點可以忽略不計。 對於像呼叫外部內容審核 API 這類昂貴操作,延遲會累積起來——尤其是當多個此類中介軟體串連在一起時。

下一步

現在你的客服已經擁有工具、技能和中介軟體,下一步是 情境提供者 ——在每次執行前,將記憶體、使用者設定檔和動態知識注入客服的情境視窗的元件。

深入探討: