這幾年 LLM 進步很快。早期我們多半拿它來回答問題,後來開始讓它呼叫工具、查資料、操作檔案,甚至執行程式。到了這一步,它就不只是 Chatbot,而是開始接近 AI Agent。
很多 Agent Demo 看起來都很厲害:丟一個任務進去,它會自己拆步驟、選工具,最後交出結果。
但真的用起來,很快就會遇到一個麻煩:
Agent 看起來有完成任務,但我們真的知道它中間做了什麼嗎?
如果只看最後答案,我們其實很難判斷:
所以這次鐵人賽,我想用 30 天做一個輕量級平台。主題是:
從黑盒到可驗證:30 天打造 AI Agent 的 Trace、Eval 與 Guardrails 系統
這個系列不是要做出「最強 Agent」。我更想處理另一件事:
怎麼讓 AI Agent 可以被觀察、被測試、被分析,然後一步一步改善。
Day 1 先不寫程式。今天先把問題講清楚,後面 29 天才有共同基準。
這篇會做三件事:
換句話說,今天不追功能,先把 Trace、Eval 和 Guardrails 這幾個詞放到同一個脈絡裡。
先從 Chatbot 說起。
一般 Chatbot 的流程通常很單純:
使用者輸入 -> LLM 產生回答 -> 回傳結果
例如:
使用者:請解釋什麼是 binary search
模型:Binary search 是一種在排序資料中搜尋目標值的演算法...
在這種情境下,我們主要檢查回答是否正確、清楚。
Agent 麻煩一點。它不是只產生一句回答,而是可能經過一串動作:
使用者任務
-> Agent 判斷要做什麼
-> 呼叫工具
-> 取得工具結果
-> 根據結果繼續推理
-> 可能再次呼叫工具
-> 最後產生答案
例如使用者要求:
請幫我計算 135 * 28,並用 JSON 格式回傳答案。
Agent 可能會走過這些步驟:
Step 1:理解任務需要計算
Step 2:呼叫 calculator tool
Step 3:取得計算結果 3780
Step 4:組成 JSON 回答
最後輸出:
{
"answer": 3780
}
如果最後答案正確,看起來當然沒事。
問題是,一旦答案錯了,我們需要知道錯在哪一層:
Agent 測試驗證平台要處理的,就是這類問題。
很多 AI 應用在展示時,只會呈現最後結果:
Input: 請完成某個任務
Output: Agent 的回答
Demo 這樣做很直覺,但工程上不太夠。
Agent 可能在中間做了錯誤的事,只是最後答案剛好看起來合理。
例如:
任務:請根據文件回答申請截止日
Agent 回答:申請截止日是 10 月 15 日
這個答案至少可能有三種情況:
如果只看 final answer,我們很難分辨這三者。
這對 Agent 系統是很大的風險。使用者看到答案時,通常不會知道 Agent 是「根據資料回答」,還是只是「回答得像有根據」。
所以我們需要留下執行紀錄,至少包含:
這些紀錄就是後面會提到的 Trace。
目前常見的 Agent 問題,我會先分成四類。
Agent 可能做了很多中間步驟,但系統沒有留下紀錄。
結果錯了,我們只能猜:
是 prompt 不好?
是工具設計不好?
是模型能力不足?
還是資料來源錯了?
沒有 trace,除錯會變得很靠運氣。
很多 Agent 仍然只靠手動測試。
例如今天測三個問題,覺得回答不錯,就先判斷 Agent 可用。
但這種方式很脆弱:
所以我們需要 eval dataset,也就是一組固定測試案例。
Agent 失敗不只是一句「答錯了」。
可能的失敗類型包括:
只統計 pass / fail 還不夠。真正有幫助的是知道主要失敗類型,才知道該改 prompt、改工具,還是改流程。
假設我們改了 prompt,或加入 retry 機制。
體感上可能會覺得 Agent 變好了,但到底好多少?
這時候需要用數據回答:
成功率是否提升?
格式錯誤是否下降?
平均延遲是否增加?
token 成本是否變高?
可靠性驗證要看的,就是這些變化。
接下來 30 天,我會實作一個簡化版的 Agent 測試驗證平台。
它不會是 production-grade 的完整 AgentOps 產品。這裡的目標比較務實:做出一個能理解核心概念、能跑實驗、也能看結果的 MVP。
整體流程會長這樣:
Test Case
-> Agent Runner
-> Trace Recorder
-> Evaluator
-> Failure Classifier
-> Reliability Dashboard
白話一點:
準備測試題目
-> 讓 Agent 執行
-> 記錄每一步
-> 自動判斷對錯
-> 分析錯誤類型
-> 比較不同改善方法
平台最後會包含幾個核心模組。
負責接收任務並呼叫 LLM。
一開始會先做最簡單的 Agent,之後再加入工具呼叫。
負責記錄 Agent 的執行過程。
例如:
{
"session_id": "run_001",
"steps": [
{
"type": "user_input",
"content": "請計算 135 * 28"
},
{
"type": "tool_call",
"tool_name": "calculator",
"input": "135 * 28",
"output": "3780"
},
{
"type": "final_answer",
"content": "{\"answer\": 3780}"
}
]
}
準備固定測試案例。
例如:
{
"id": "case_001",
"input": "請計算 135 * 28,並用 JSON 格式回傳答案",
"expected": {
"answer": 3780
},
"grading_method": "json_exact"
}
負責自動評分。
前期會先做簡單規則:
負責分析 Agent 失敗原因。
例如:
case_003 failed
failure_type: format_error
reason: output is not valid JSON
負責限制 Agent 的輸出與工具使用。
這個系列會先從簡單版本開始:
30 天要穩定完成,架構不能一開始就太重。
預計使用:
這樣選的原因很單純:降低前後端整合成本,把時間留給 Agent 測試驗證本身。
這個系列會分成四個階段。
先讓 Agent 從黑盒變透明。
會完成:
第一週結束時,希望可以看到 Agent 每一步做了什麼。
接著讓 Agent 可以被自動測試。
會完成:
第二週結束時,希望可以產出第一份 baseline 評測報告。
第三週不只看 Agent 有沒有錯,還要看它為什麼錯。
會完成:
第三週結束時,希望可以看出不同 prompt 對成功率與錯誤類型的影響。
最後加入簡單的可靠性改善策略,再用數據比較改善前後的差異。
會完成:
第四週結束時,希望整理出一套簡化但完整的 Agent 測試驗證流程。
Day 1 先把問題擺出來。
這個系列的核心不是:
我做了一個很厲害的 AI Agent。
而是:
我建立了一套方法,讓 AI Agent 的行為可以被追蹤、測試、分析與改善。
接下來 Day 2 會先從最小可用的 Agent Runner 開始,讓系統能接收任務、呼叫 LLM,並產生第一個可觀察的執行結果。