
適合前后端/測試等有編程基礎的同學手把手教你給AI Agent“打分”前言通過前面18節課的學習你已經能構建一個功能完整的AI Agent了——它能調用工具、能自主決策、能團隊協作、能記住用戶偏好、還能防御安全攻擊。但有一個問題是所有Agent從“Demo”走向“生產”必須面對的你怎么知道你的Agent“夠好”傳統的軟件測試有明確的輸入輸出和預期結果——單元測試、集成測試、端到端測試一套組合拳打下來質量基本有保障。但Agent不一樣。同樣的輸入兩次運行可能給出完全不同的回答同樣的任務Agent可能走不同的路徑同樣的工具調用參數可能略有差異。Agent的輸出是非確定性的——這讓評估變得極其困難。一句話定義Agent評估是通過多層級、多維度的測試方法對Agent的最終輸出、執行軌跡、工具調用和對話能力進行系統性度量以量化其性能、發現回歸、并持續優化的過程。Agent評估不僅是“測一下能不能跑”更是從開發到上線的質量保障體系。一、為什么Agent評估這么難——非確定性輸出的挑戰1.1 傳統測試 vs Agent測試維度傳統軟件測試Agent測試輸入輸出確定性相同輸入→相同輸出非確定性相同輸入→不同輸出預期結果明確可驗證模糊、需要語義判斷執行路徑固定代碼走哪條分支是確定的動態Agent自主決定調用哪些工具評判標準精確匹配/布爾值需要LLM-as-Judge或語義相似度回歸測試簡單對比前后輸出困難語義等價需要推理1.2 Agent評估的四個層級LangChain團隊在評估Deep Agents的實踐中總結出有效的Agent評估需要在多個層級進行。┌─────────────────────────────────────────────────────────────────┐ │ Agent評估四層金字塔 │ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 第四層多輪對話Multi-turn Conversations │ │ │ │ 模擬真實用戶交互測試上下文理解和長期記憶 │ │ │ └─────────────────────────────────────────────────────────┘ │ │ ↑ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 第三層完整軌跡Full Trajectory │ │ │ │ 測試Agent的完整執行路徑工具調用順序最終答案 │ │ │ └─────────────────────────────────────────────────────────┘ │ │ ↑ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 第二層單步決策Single Step │ │ │ │ 測試Agent在某個特定狀態下的下一步決策是否正確 │ │ │ └─────────────────────────────────────────────────────────┘ │ │ ↑ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 第一層單元測試Unit Test │ │ │ │ 測試單個工具/函數的正確性 │ │ │ └─────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘層級測試內容運行方式適用場景單元測試單個工具/函數離線開發階段驗證基礎組件單步決策Agent某一步的選擇是否正確離線驗證特定場景下的決策邏輯完整軌跡工具調用順序最終答案離線回歸測試版本對比多輪對話完整用戶交互在線/離線模擬真實使用場景二、Agent評估的核心指標體系2.1 最終輸出質量指標指標說明評估方式任務完成率Agent成功完成任務的次數占比人工/LLM判斷答案正確性最終答案是否與標準答案語義一致精確匹配/LLM-as-Judge答案有用性回答是否真正幫助了用戶LLM-as-Judge幻覺率回答中是否存在編造的事實事實核查2.2 軌跡與過程指標指標說明評估方式工具調用準確率工具選擇和參數是否正確軌跡匹配工具錯誤率工具調用失敗的比例規則檢查平均步數完成任務所需的平均行動步數統計重復動作率重復無效動作的比例規則檢查路徑效率是否走了最優路徑軌跡對比2.3 對話與行為指標指標說明評估方式目標達成度Agent是否成功實現了用戶目標LLM判斷主題遵循度是否在預定領域內回答問題規則/LLM上下文連貫性多輪對話中是否保持邏輯一致LLM判斷2.4 成本與效率指標指標說明Token消耗每次對話的Token使用量API調用次數調用了多少次LLM API響應延遲從輸入到輸出的時間成本/任務完成一個任務的平均成本三、Agent評估的三大主流框架3.1 LangSmith —— 最全面的評估平臺LangSmith是LangChain團隊開發的評估和監控平臺提供從開發到生產的完整評估能力。核心能力能力說明離線評估在開發階段對數據集運行評估比較版本、發現回歸在線監控在生產環境實時評估真實用戶交互30評估模板覆蓋安全、響應質量、軌跡、用戶行為、多模態可復用評估器一次構建跨項目復用評估工作流1. 創建數據集手動標注/歷史 traces/合成數據 2. 定義評估器規則/LLM-as-Judge/自定義 3. 運行實驗在數據集上執行Agent 4. 分析結果對比版本、發現回歸LangSmith Engine當評估發現失敗時LangSmith Engine可以自動診斷根因并幫助解決問題。3.2 Ragas —— 專注Agent指標的開源庫Ragas是一個開源庫專門用于評估LLM應用包括RAG系統和Agent。Agent專用指標指標說明ToolCallAccuracy評估LLM在識別和調用所需工具方面的性能AgentGoalAccuracy評估Agent是否成功實現了用戶目標TopicAdherence評估Agent是否在預定領域內回答問題Ragas的評估方式通過結構化軌跡structured traces而非僅看最終輸出來評估Agent行為。3.3 agentevals —— LangChain官方軌跡評估包agentevals是LangChain官方開源的軌跡評估包。核心功能評估Agent的完整執行軌跡消息序列工具調用。四種匹配模式模式說明適用場景strict精確匹配消息和工具調用的順序測試特定序列如“先查策略再授權”unordered工具調用順序不限驗證信息檢索順序不重要subsetAgent只調用參考工具中的工具不能多確保Agent不超出預期范圍supersetAgent至少調用參考工具可以多驗證最小必需操作3.4 三大框架對比維度LangSmithRagasagentevals類型云平臺SDK開源庫開源包核心能力全鏈路評估監控Agent/RAG指標軌跡匹配學習曲線中低低離線評估???在線監控???可視化? 完整儀表板??四、實戰用LangSmith評估Agent4.1 環境配置importosfromlangsmithimportClientfromlangsmith.evaluationimportevaluatefromlangchain_openaiimportChatOpenAIfromlangchain.agentsimportcreate_agentfromlangchain.toolsimporttool# 設置LangSmith環境變量os.environ[LANGCHAIN_API_KEY]YOUR_LANGSMITH_API_KEYos.environ[LANGCHAIN_ENDPOINT]https://api.smith.langchain.comos.environ[OPENAI_API_KEY]YOUR_OPENAI_API_KEY# 初始化LangSmith客戶端clientClient()4.2 定義待評估的Agenttooldefget_weather(city:str)-str:獲取指定城市的天氣信息weather_db{北京:晴25°C,上海:多云28°C,深圳:小雨30°C}returnweather_db.get(city,f未找到{city}的天氣信息)tooldefsearch_web(query:str)-str:搜索網絡信息returnf關于{query}的搜索結果找到3條相關信息...# 創建AgentllmChatOpenAI(modelgpt-4o-mini,temperature0)agentcreate_agent(modelllm,tools[get_weather,search_web],system_prompt你是一個樂于助人的助手可以使用工具回答問題。)4.3 創建評估數據集# 在LangSmith中創建數據集dataset_nameweather_agent_test# 檢查數據集是否存在不存在則創建try:datasetclient.read_dataset(dataset_namedataset_name)except:datasetclient.create_dataset(dataset_namedataset_name,description天氣查詢Agent的測試數據集)# 添加測試用例examples[{inputs:{question:北京今天天氣怎么樣},outputs:{expected_answer:北京天氣晴朗氣溫25°C,expected_tools:[get_weather]}},{inputs:{question:上海的天氣如何},outputs:{expected_answer:上海多云氣溫28°C,expected_tools:[get_weather]}},{inputs:{question:幫我查一下深圳天氣再搜一下深圳的旅游景點},outputs:{expected_answer:深圳小雨30°C深圳旅游景點包括世界之窗、歡樂谷等,expected_tools:[get_weather,search_web]}}]# 批量添加示例client.create_examples(inputs[{question:ex[inputs][question]}forexinexamples],outputs[{reference:ex[outputs][expected_answer],expected_tools:ex[outputs][expected_tools]}forexinexamples],dataset_iddataset.id)4.4 定義評估器fromlangsmith.evaluationimportRunEvaluatorfromlangsmith.schemasimportExample,Run# 1. 答案正確性評估器使用LLM-as-Judgedefanswer_correctness_evaluator(run:Run,example:Example)-dict:評估Agent的最終答案是否正確# 獲取Agent的輸出和標準答案predictionrun.outputs.get(output,)referenceexample.outputs.get(reference,)# 使用LLM判斷語義等價性judge_llmChatOpenAI(modelgpt-4o-mini,temperature0)judge_promptf 判斷以下兩個回答是否在語義上等價表達相同的意思。 標準答案{reference}Agent回答{prediction}只輸出是或否。 resultjudge_llm.invoke(judge_prompt)is_correct是inresult.contentreturn{key:answer_correctness,score:1.0ifis_correctelse0.0}# 2. 軌跡評估器檢查工具調用是否正確deftrajectory_evaluator(run:Run,example:Example)-dict:評估Agent的工具調用軌跡是否正確expected_toolsexample.outputs.get(expected_tools,[])# 從運行中提取工具調用actual_tools[]ifhasattr(run,trace)andrun.trace:forchildinrun.trace.get(children,[]):ifchild.get(name)inexpected_tools:actual_tools.append(child.get(name))# 檢查是否調用了所有預期工具all_calledall(toolinactual_toolsfortoolinexpected_tools)# 檢查是否調用了不該調用的工具可選no_extralen(actual_tools)len(expected_tools)return{key:trajectory_correctness,score:1.0if(all_calledandno_extra)else0.0,comment:f預期工具:{expected_tools}, 實際調用:{actual_tools}}4.5 運行評估fromlangsmith.evaluationimportRunEvalConfig# 定義評估配置eval_configRunEvalConfig(evaluators[answer_correctness_evaluator,trajectory_evaluator],max_concurrency1# 并行執行數量)# 運行評估deftarget_agent(inputs:dict)-dict:待評估的Agent函數resultagent.invoke({messages:[{role:user,content:inputs[question]}]})return{output:result[messages][-1].content}resultsevaluate(target_agent,datadataset_name,evaluatorseval_config,experiment_prefixweather_agent_v1)print(f評估完成查看結果{results.url})4.6 分析結果評估完成后可以在LangSmith儀表板中按answer_correctness分數篩選找到回答錯誤的案例按trajectory_correctness分數篩選找到工具調用錯誤的案例對比不同版本的Agent性能發現回歸五、實戰用agentevals做軌跡匹配評估fromagentevals.trajectory.matchimportcreate_trajectory_match_evaluatorfromlangchain_core.messagesimportHumanMessage,AIMessage,ToolMessage# 創建軌跡匹配評估器trajectory_evaluatorcreate_trajectory_match_evaluator(trajectory_match_modestrict,# 嚴格匹配模式)# 定義參考軌跡期望的執行路徑reference_trajectory[HumanMessage(content北京天氣怎么樣),AIMessage(content,tool_calls[{id:call_1,name:get_weather,args:{city:北京}}]),ToolMessage(content北京晴25°C,tool_call_idcall_1),AIMessage(content北京今天天氣晴朗氣溫25°C。)]# 實際執行Agent獲取軌跡resultagent.invoke({messages:[HumanMessage(content北京天氣怎么樣)]})actual_trajectoryresult[messages]# 評估evaluationtrajectory_evaluator(outputsactual_trajectory,reference_outputsreference_trajectory)print(f軌跡匹配結果:{evaluation})# {key: trajectory_strict_match, score: True, comment: None}四種匹配模式的應用場景模式代碼適用場景stricttrajectory_match_modestrict測試嚴格的執行順序如“先身份驗證再操作”unorderedtrajectory_match_modeunordered驗證信息檢索工具調用順序不重要subsettrajectory_match_modesubset確保Agent不調用超出范圍的工具supersettrajectory_match_modesuperset驗證Agent至少完成了最低要求的操作六、Deep Agents的評估經驗LangChain團隊在構建Deep Agents復雜、有狀態的長期運行Agent時總結了四條關鍵經驗經驗1每個測試用例需要獨立的成功標準傳統LLM評估中所有數據點使用相同的評估邏輯。但Deep Agent不同——每個測試用例的“成功標準”可能完全不同。例如一個日歷調度Agent需要驗證Agent是否調用了edit_file修改memories.mdAgent是否在最終消息中告知了用戶memories.md文件是否確實包含了正確的記憶內容經驗2單步運行驗證決策單步運行Single Step可以快速驗證Agent在特定場景下的決策是否正確而且節省Token。經驗3完整軌跡測試最終狀態完整軌跡Full Turn用于測試Agent的最終狀態——不僅看最終答案還要檢查工具調用序列和狀態變化。經驗4多輪對話模擬真實交互多輪對話Multiple Turns模擬真實的用戶交互但需要“保持在軌道上”——不能讓對話無限發散。七、Agent評估最佳實踐7.1 評估策略組合階段評估方式頻率開發階段單元測試 單步決策評估每次代碼變更集成階段完整軌跡評估每次PR預發布數據集批量評估版本發布前生產環境在線評估 實時監控持續7.2 離線評估 vs 在線評估維度離線評估在線評估時機上線前生產環境實時數據固定數據集真實用戶流量目的發現回歸、對比版本檢測實時問題、度量質量反饋慢批量運行快實時7.3 評估器類型選擇評估器類型適用場景優缺點規則匹配精確格式、工具名稱快速、確定性強、覆蓋面窄LLM-as-Judge語義正確性、有用性靈活、覆蓋面廣、成本高、不穩定軌跡匹配工具調用順序精確控制、需定義參考軌跡人工評估最終驗收最可靠、最慢、最貴7.4 常見陷阱陷阱1只測最終答案不測軌跡只看最終答案可能會掩蓋Agent走“彎路”的問題——答案對了但調了不該調的工具、浪費了Token。陷阱2測試數據泄露不要在訓練/開發數據上測試。用獨立的、未在Agent開發過程中見過的測試集。陷阱3忽略成本評估Agent不僅要“做對”還要“做得便宜”。跟蹤Token消耗和API調用次數。八、實戰小練習作業練習構建客服Agent的完整評估體系需求構建一個簡單的客服Agent支持查詢訂單狀態、退款、產品咨詢在LangSmith中創建包含10個測試用例的數據集實現三種評估器答案正確性評估器LLM-as-Judge軌跡評估器檢查工具調用是否正確成本評估器檢查Token消耗是否在預算內運行評估并分析結果提示代碼框架fromlangsmithimportClientfromlangsmith.evaluationimportevaluate# 1. 定義Agenttooldefcheck_order(order_id:str)-str:查詢訂單狀態returnf訂單{order_id}狀態已發貨tooldefprocess_refund(order_id:str)-str:處理退款returnf訂單{order_id}退款處理中# 2. 創建數據集clientClient()datasetclient.create_dataset(dataset_namecustomer_service_test)test_cases[{question:我的訂單12345到哪了,expected_tools:[check_order]},{question:我要退款訂單號67890,expected_tools:[process_refund]},# ... 添加更多測試用例]# 3. 定義評估器defanswer_correctness(run,example):# LLM-as-Judge評估passdeftrajectory_correctness(run,example):# 檢查工具調用passdefcost_evaluator(run,example):# 檢查Token消耗pass# 4. 運行評估resultsevaluate(target_agent,datadataset_name,evaluators[answer_correctness,trajectory_correctness,cost_evaluator])結語今天這節課我們全面學習了Agent的評估與測試知識點核心內容為什么評估很難Agent輸出非確定性需要多層級測試四個評估層級單元測試→單步決策→完整軌跡→多輪對話核心指標體系任務完成率、工具調用準確率、目標達成度、成本LangSmith全鏈路評估平臺30模板離線在線Ragas開源Agent指標庫ToolCallAccuracy等agentevals官方軌跡匹配包四種匹配模式Deep Agents經驗每個測試用例獨立標準、多輪對話模擬真實交互最佳實踐離線在線組合、多類型評估器、成本監控至此模塊五工程篇的第19節已完成課時內容狀態第19節Agent的評估與測試?第20節Agent的部署與上線待生成第21節Agent的可觀測性與監控待生成第22節Agent的性能優化待生成下節課第20節我們將學習Agent的部署與上線——如何將Agent封裝為RESTful API、服務化架構設計、異步處理與任務隊列讓你的Agent真正走向生產環境如果覺得有幫助歡迎點贊、收藏、評論三連我們下節課見 本文是《AI Agent開發實戰》課程第19節的完整內容系列文章持續更新中關注我不迷路