Lab 24 學習導引與技術解析#
本 Lab 深入解析了企業級 LLM 系統中,如何實現「推理軌跡可觀測性(Observability)」以及「基於大模型的自動化評估與診斷(LLM-as-a-Judge)」。
💡 核心學習重點#
1. 什麼是推理軌跡(Trajectory)?#
- 概念:Agent 在接收 Prompt 後,到最終生成回覆之前,所經歷的 Thought、Tool Call、Tool Result 序列,稱為推理軌跡。
- 觀測價值:在生產環境中,Agent 是在背景非同步執行的。當任務失敗、或者花費了過高 Token 時,開發人員不能只看最終回覆,必須回溯這段軌跡來診斷「它在哪個決策點走偏了(Drifting)」或「是否陷入無限重試(Looping)」。
2. 軌跡序列化匯出 (Trajectory Serialization)#
- 實實技術:
透過 SDK 的
response.resolve()方法,將非同步的串流與決策扁平化(Flatten)為一個list[StreamChunk | ToolCall | ToolResult]。 我們藉由類型比對將其轉為結構化的 JSON 檔案:這份 JSON 會自動保存到 logs_task_trajectory.json 中。chunks = await response.resolve() for chunk in chunks: if isinstance(chunk, types.Thought): # 記錄思考鏈 elif isinstance(chunk, types.ToolCall): # 記錄工具呼叫與參數 elif isinstance(chunk, types.ToolResult): # 記錄工具回傳與錯誤訊息
3. 自動化評估與裁判官 (LLM-as-a-Judge)#
- 概念:手動閱讀成千上萬的背景 Agent 軌跡是不現實的。我們實例化另一個專職的
Evaluator Agent,給予其「系統診斷與優化建議」的 Instructs,讓它自動去讀取上述導出的軌跡 JSON,生成評估報告。 - 評估要點:
- 死迴圈判定:Task Agent 在寫入資料庫時,遇到了鎖定錯誤(Locked),總共重試了 4 次工具。
- 規劃偏離度(Drifting):評估為零偏離。Agent 自始至終圍繞著「排課寫入」,失敗後主動回退。
- 優化建議:評估者 Agent 敏銳指出「兩次重試之間沒有 thought 或等待,屬於緊密重試」,會加劇資料庫死鎖與效能雪崩。建議引入「指數退避(Exponential Backoff)與時間等待工具(Sleep)」。
🛠️ 架構優化:如何防範 LLM Looping?#
根據評估報告,為防止 LLM 因異常或幻覺陷入死迴圈,我們在架構上應採用:
- Tool 層級限制:在 Python 函式或 SDK 底層控制重試次數上限。
- Exponential Backoff:重試等待時間隨次數呈指數增長(如 $1\text{s}, 2\text{s}, 4\text{s}, \dots$),並加隨機抖動(Jitter)。
- 電路熔斷器 (Circuit Breaker):當錯誤達到閾值,直接將該資料區間寫入離線佇列並觸發管理員告警。