上一頁展示了技能如何將可重複使用的領域專業知識——說明、參考資料和腳本——打包成自成一體的單元,讓任何客服人員都能隨時載入。 但當你將代理部署到生產環境時,會出現一類新的問題:這些問題貫穿 每一次 互動,無論代理做什麼。
你需要記錄每一個請求和回應。 你需要在模型看到有害內容前設置護欄,阻擋它。 你需要執行速率限制、優雅地捕捉例外,並注入遙測數據——而這一切都不能觸及代理的核心邏輯。 把這些問題複製貼上到每個代理(或每個工具、每個技能)上,不具有擴展性,反而會造成維護上的麻煩。
中介軟體解決了這個問題。 中介軟體讓你能用可重複使用的行為包裝代理的 執行管線 ,這些行為能攔截、檢查並修改明確定義的請求與回應。 可以把中介軟體想像成一系列環繞代理人的同心層——每一層都有機會在輸入到達代理之前對輸入採取行動,並在輸出到達呼叫者之前採取行動。
何時使用
在以下情況下,將中介軟體加入您的代理程式:
- 你需要 設下護欄 ,在模型處理前或之後阻擋有害、離題或違反政策的內容。
- 你希望所有客服人員的互動都能集中 記錄或遙測 ,而不需逐個調整。
- 你需要 修改請求或回應 ——豐富提示、轉換輸出,或完全替換結果——但不改變代理邏輯。
- 你要執行像是速率限制、內容過濾或驗證檢查等 政策 ,這些都適用於每次執行。
- 你需要持續 處理異常 ——重試暫時性失敗、回傳優雅的備用回應,或是記錄錯誤以進行診斷。
- 你希望在整個流程 中共享狀態 ——例如追蹤請求時序或累積多個中介軟體元件所需的指標。
小提示
代理框架內建用於追蹤和度量的工具。 詳情請參見 可觀察 性。
中介軟體流程的運作方式
當你呼叫代理的執行方法時,請求不會直接送到模型。 相反地,它會經過一條由中介軟體層組成的流程,每個中介軟體層都能檢查或修改請求,委派給下一層,然後在返回時檢查或修改回應。
┌─────────────────────────────────────────────────────────┐
│ 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.) │
└─────────────────────────────────────────────────────────┘
關鍵點:
- 每個中介軟體自行決定是否繼續。 中介軟體可以呼叫鏈中的下一層來讓流程正常進行,或者它可以直接回傳回應來中斷管線運行,例如當護欄阻擋請求時。
- 中介軟體能雙向看待。 中介軟體會在委派之前(檢查或修改輸入)及回應回傳之後(檢查或修改輸出)執行程式碼。 這就是經典的「洋蔥」圖案。
- 多個中介軟體串連在一起。 當你註冊多個中介軟體元件時,它們會巢狀:第一個註冊的中介軟體是最外層,最後一個註冊的中介軟體是離代理最近的最內層。
小提示
欲詳細了解中介軟體如何融入完整的代理執行流程——包括上下文提供者與聊天客戶端層——請參閱 代理流程架構。
中介軟體能做什麼
Agent Framework 支援管線三層的中介軟體——代理執行、函式呼叫與聊天客戶端——讓你能細緻控制執行截取位置。 常見的模式包括:
| 樣式 | 範例 | Reference |
|---|---|---|
| 護欄與終端 | 封鎖有害內容,限制對話長度 | 終端與護欄 |
| 例外狀況處理 | 在暫態故障時重試,回傳備援回應 | 例外狀況處理 |
| 結果覆寫 | 刪除敏感資料、豐富或替換代理輸出 | 結果覆寫 |
| 共用狀態 | 在中介軟體間傳遞請求 ID 或時序資料 | 共享狀態 |
| 執行時上下文 | 根據會話、使用者或執行設定變更行為 | 執行環境背景 |
| 範圍 | 將中介軟體套用到所有執行或只執行一次執行 | 代理人與執行範圍 |
關於定義與註冊中介軟體的完整流程,請參見 「定義中介軟體」。 完整架構概述請參閱 中介軟體概述。
考慮事項
| 考量事項 | 詳細資料 |
|---|---|
| 關注點分離 | 中介軟體會讓你的代理程式碼、工具和技能中排除交叉邏輯。 每個中介軟體元件都有一項責任——日誌記錄、護欄、錯誤處理——你可以獨立新增、移除或重新排序。 |
| 順序依賴性 | 中介軟體形成一條鏈。 你註冊中介軟體的順序很重要:第一個執行的日誌中介軟體會看到原始輸入,而最後執行的則會看到已經被先前中介軟體修改過的輸入。 謹慎地規劃你的管線安排。 |
| 除錯複雜度 | 當中介軟體修改輸入或輸出時,除錯需要了解完整的管線。 回應看起來不對,不是因為代理本身,而是因為中介軟體轉換了它。 好的日誌中介軟體(放在鏈條的早期)有助於診斷這些情況。 |
| 效能開銷 | 每個中介軟體層都會為每個請求增加處理時間。 對於像伐木這類輕量級作業,這點可以忽略不計。 對於像呼叫外部內容審核 API 這類昂貴操作,延遲會累積起來——尤其是當多個此類中介軟體串連在一起時。 |
下一步
現在你的客服已經擁有工具、技能和中介軟體,下一步是 情境提供者 ——在每次執行前,將記憶體、使用者設定檔和動態知識注入客服的情境視窗的元件。
深入探討: