FDE 面試準備指南(十一):RKK 實戰——AI Agent 線上除錯與故障排除

Agent debugging 和傳統程式 debug 的本質差異:
傳統程式出錯,你找 stack trace。
Agent 出錯,LLM 的「決策過程」是不透明的——你找不到 stack trace。
所以你必須在設計時就把觀測能力建進去,而不是出問題後再想怎麼查。


一、核心問題:為什麼 Agent 難 debug

傳統程式:
  Input → [確定性邏輯] → Output
                ↑
           出錯有 stack trace

Agent:
  Input → [LLM 決策] → [Tool Call] → [LLM 決策] → ... → Output
                ↑                           ↑
        決策過程不透明              中間狀態沒有自動記錄

三個讓 Agent debugging 特別難的原因:

  1. 非確定性:同樣的 input 可能產生不同的執行路徑
  2. 多步驟:一個錯誤可能在步驟 1 發生,但直到步驟 8 才顯現
  3. 工具依賴:問題可能在 LLM 層、工具層、還是 data 層——不好定位

二、系統全貌:觀測性架構

解決思路:在 Agent 的每個關鍵節點插入觀測點。

用戶請求
    │
    ▼
┌──────────────────────────────────────────┐
│            Agent Execution               │
│                                          │
│   ┌─────────┐    ┌──────────────────┐    │
│   │  LLM    │    │   Tool Gateway   │    │
│   │         │ ←→ │  (instrumented)  │    │
│   └─────────┘    └──────────────────┘    │
│        │                  │              │
│        ▼                  ▼              │
│   ┌──────────────────────────────────┐   │
│   │         Trace Collector          │   │
│   │  每一步的 thought/action/result  │   │
│   └──────────────────────────────────┘   │
└──────────────────────────────────────────┘
         │
         ▼
┌─────────────────────────────────────────────┐
│              Observability Stack            │
│                                             │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  │
│  │ Metrics  │  │  Traces  │  │   Logs   │  │
│  │ (Grafana)│  │(Langfuse)│  │(Cloud    │  │
│  │          │  │          │  │ Logging) │  │
│  └──────────┘  └──────────┘  └──────────┘  │
│       │              │             │        │
│       ▼              ▼             ▼        │
│  系統健康狀態    單次請求路徑    詳細事件記錄  │
└─────────────────────────────────────────────┘
         │
         ▼
┌─────────────────────────────────────────────┐
│              Alerting Layer                  │
│  threshold breach → PagerDuty / Slack alert  │
└─────────────────────────────────────────────┘

三、觀測性三層:各層收集什麼

Layer 1:Metrics(系統健康)

關鍵指標 Dashboard:

延遲                    成本                   品質
─────────────          ──────────────         ──────────────
TTFT p50: 450ms        input tokens/req: 2500  loop_rate: 0.2%
TTFT p95: 1200ms       output tokens/req: 400  fallback_rate: 3.1%
E2E p50:  3.5s         cost/req: $0.0085       tool_fail_rate: 1.4%
E2E p95:  8.0s         monthly: ~$450

← 趨勢異常時第一個看這裡

Layer 2:Traces(請求路徑)

Request ID: req_abc123
User: "Q4 銷售數字是多少?"

Step 1  [50ms]  LLM Think    → "需要查資料庫"
Step 2  [230ms] Tool Call    → query_database(q="Q4 sales")
Step 3  [850ms] Tool Result  → {revenue: 4200000}  ← 這步慢
Step 4  [45ms]  LLM Think    → "可以回答了"
Step 5  [380ms] LLM Generate → "Q4 銷售額為 $4.2M"

Total: 1555ms  |  Tokens: 2340  |  Outcome: success

Layer 3:Logs(詳細事件)

[WARN] 2026-06-03 14:23:01 req=req_abc123
  Tool: query_database
  Latency: 850ms (threshold: 500ms)
  Query: SELECT SUM(revenue) FROM sales WHERE quarter='Q4'
  Rows returned: 1
  Suggestion: query missing index on `quarter` column

[INFO] 2026-06-03 14:23:01 req=req_abc123
  Faithfulness check: 0.94 (threshold: 0.8) ✓
  Answer grounded in retrieved data

四、五大故障模式:如何識別與根除

故障模式總覽

Agent 故障樹
│
├── 幻覺(Hallucination)
│       症狀:答案超出知識庫範圍
│       根源:Retrieval 精度差 / Prompt 沒限制 / Context 超限
│
├── 工具呼叫失敗(Tool Failure)
│       症狀:應該用工具卻沒用,或呼叫格式錯誤
│       根源:Tool description 不清楚 / Schema 錯誤
│
├── 無限迴圈(Infinite Loop)
│       症狀:Agent 重複執行相同動作
│       根源:缺乏終止條件 / 工具持續回傳錯誤
│
├── 任務偏移(Task Drift)
│       症狀:Agent 偏離原始目標
│       根源:Multi-turn 後 goal 被稀釋
│
└── Context 錯亂(Context Confusion)
        症狀:Agent 混用不同用戶的資訊
        根源:Session isolation 問題

故障一:幻覺的診斷路徑

症狀:回答包含知識庫以外的資訊
    │
    ▼
Q1:Retrieval 有沒有回傳相關文件?
    ├── 沒有(score < 0.7)
    │       → 問題在 Retrieval 層
    │         解法:調整 embedding model、降低 score threshold、
    │               或補充知識庫內容
    │
    └── 有(score ≥ 0.7)
            │
            ▼
        Q2:LLM 收到的 prompt 裡有沒有 context?
            ├── 沒有 → 問題在 Prompt Assembly
            │         解法:Debug context injection 邏輯
            │
            └── 有
                    │
                    ▼
                Q3:LLM 有沒有「超出 context 範圍回答」?
                    → 跑 Faithfulness 評分
                    → < 0.8 → 加強 system prompt 限制:
                               "只根據提供的文件回答,
                                如果文件中沒有答案,
                                回覆:我沒有相關資訊"

故障二:工具呼叫失敗

Tool 描述品質 vs 呼叫成功率:

模糊描述:
┌────────────────────────────────┐
│ name: "search"                 │
│ description: "搜尋東西"        │  ← LLM 不知道何時用
└────────────────────────────────┘
  結果:工具被忽略或被濫用

清晰描述:
┌────────────────────────────────────────────────┐
│ name: "search_knowledge_base"                   │
│ description:                                    │
│   "搜尋公司產品知識庫。                          │
│    使用時機:用戶詢問產品規格、故障排除時。       │
│    不適用:一般常識、計算問題。                  │
│ parameters:                                     │
│   query (string): 搜尋關鍵字,建議繁體中文       │
│   top_k (int, default=5): 回傳數量,最大 20"    │
└────────────────────────────────────────────────┘
  結果:工具呼叫率和成功率顯著提升

故障三:無限迴圈偵測

迴圈偵測邏輯:

Action History Buffer (sliding window = 5)
│
├── [tool_A, tool_A, tool_A, tool_A, tool_A] → 全部一樣 ⚠️
│       └→ 觸發迴圈警告
│
├── [tool_A, tool_B, tool_A, tool_B, tool_A] → 交替重複 ⚠️
│       └→ 也是迴圈
│
└── [tool_A, tool_B, tool_C, tool_D, tool_E] → 正常進展 ✓

介入策略:
step <= 10  → 繼續執行
step 11~15  → 注入提示:"請評估你是否已經獲得足夠資訊可以回答"
step > 15   → 強制輸出當前最佳答案
step > 20   → 硬性終止,回傳 fallback 訊息

五、Debug Session 的工作流

生產環境 Agent 出問題,你的排查順序:

Step 1:看 Metrics Dashboard
    │  p95 延遲有沒有異常?tool_fail_rate 有沒有升高?
    │  → 定位問題層(LLM 層 / Tool 層 / Infrastructure 層)
    │
    ▼
Step 2:找出問題請求(Trace 查詢)
    │  按 outcome = "error" 或 latency > p99 過濾
    │  找出 2~3 個具代表性的 trace
    │
    ▼
Step 3:重現問題
    │  拿問題請求的 exact input → 在 staging 重跑
    │  看能不能穩定重現
    │
    ▼
Step 4:逐步縮小範圍
    │  把 Agent 的每個步驟拆開測試:
    │  - Retrieval 單獨測(query → chunks 結果對嗎?)
    │  - Tool 單獨測(直接呼叫,不經 LLM)
    │  - LLM 單獨測(給定 context,回答合理嗎?)
    │
    ▼
Step 5:確認根本原因 → 修復 → 寫 regression test

六、Google Doc 模擬情境應答框架:DARK

RKK 面試中,面試官可能在 Google Doc 貼一段 log,問你分析:

D → Diagnose   根據症狀,最可能是哪種故障模式?
A → Ask        你還需要什麼資訊才能確認?(要主動問)
R → Root Cause 推斷最可能的根本原因
K → Kill it    怎麼修,以及怎麼預防再次發生

範例情境:

面試官貼出:

Step 1: Action: query_database → Error: timeout
Step 2: Action: query_database → Error: timeout
Step 3: Action: query_database → Error: timeout
... (重複 20 次)
Step 22: [stopped: max_steps reached]

你的回答:

「這裡有兩個層面的問題。

D(診斷):Tool 層故障 + Agent 層缺乏錯誤處理邏輯。工具持續失敗,但 Agent 只知道重試,不知道換策略。

A(我還需要什麼):資料庫的 slow query log、這段時間的資料庫監控(CPU/connection 數)、這個 query 有沒有 index。

R(根本原因):最可能是資料庫側的問題(高負載或 query 太慢),加上 Agent 的 error handling 缺乏退避和降級邏輯。

K(修法):工具層加 retry with exponential backoff,3 次失敗後回傳結構化錯誤訊息給 Agent。Agent 層收到 tool_unavailable 後,能選擇降級(查快取、回覆用戶資料庫暫時無法存取)。同時在 tool wrapper 加監控,連續 3 次失敗就觸發告警。」


七、快速複習卡

觀測性三層:
  Metrics(系統健康)→ Traces(請求路徑)→ Logs(事件細節)

五大故障模式:
  幻覺 → Retrieval 診斷 + Faithfulness 評分
  工具失敗 → Tool description 品質 + Instrumented wrapper
  無限迴圈 → Action history 偵測 + max_steps 硬上限
  任務偏移 → 每步對齊 original goal
  Context 錯亂 → Session isolation 驗證

Debug 順序:Metrics → Trace → 重現 → 縮小範圍 → 根因 → 修復 → Regression test

DARK 框架:Diagnose → Ask → Root Cause → Kill it

系列導覽:
(十)RKK 實戰:AI Agent 的 Context Management
(十二)RKK 實戰:Agent 統計評估與品質量化

Yen

Yen

Yen