资讯详情

「AI Agent 全栈开发 50 讲」——从本地模型部署到多智能体系统,一年省 87 万 第 44 课 | 评估框架:量化 Agent 的真实能力

📅 2026/9/15 8:01:40 | 华诺云谱 👁 阅读
「AI Agent 全栈开发 50 讲」——从本地模型部署到多智能体系统,一年省 87 万 第 44 课 | 评估框架:量化 Agent 的真实能力
第 44 课 | 评估框架量化 Agent 的真实能力没有评估就没有优化。构建科学的评估体系——成功率、步数、Token、耗时、准确率让 Agent 能力可量化、可追踪、可优化。一、业务痛点Agent 的「黑盒」困境在之前的课程中我们已经构建了多个 Agent 系统——从简单的 RAG 问答到复杂的多智能体决策。但一个根本问题始终存在你怎么知道你的 Agent 变好了还是变差了考虑这个真实场景你花了 3 天优化了 Prompt调整了 Tool 的描述换了新的嵌入模型。上线后老板问你「效果提升了多少」你只能回答「感觉快了。」感觉不能作为决策依据。你需要数据。问题场景 - 版本 v1.0 上线用户反馈有时候回答不对 - 你优化了 RAG 检索策略发布 v1.1 - 一周后用户反馈准确率提升了但速度变慢了 - 你无法量化「提升」和「变慢」的具体数值 - 你无法判断这次优化是否值得这就是没有评估体系的代价你无法知道每一次改动是在前进还是倒退。本课目标构建一套 Agent 评估框架让每一次优化都有数据支撑。二、五大核心指标2.1 指标全景 测试用例集 评估引擎✅ 成功率Success Rate 平均步数Avg Steps Token 消耗Token Usage⏱️ 响应时间Latency 准确率Accuracy 评估报告2.2 指标详解指标说明计算方法目标值成功率任务是否成功完成成功次数 / 总次数90%平均步数完成任务需要的步骤数总步数 / 成功次数5 步Token 消耗每次调用消耗的 Token总 Token / 调用次数3000响应时间端到端完成耗时总耗时 / 成功次数30 秒准确率输出结果质量正确项 / 总项85%2.3 为什么是这五个指标成功率最根本的指标。Agent 连任务都完不成其他指标再好也没用。平均步数反映 Agent 的「思考效率」。步数越多说明 Agent 在反复尝试、走弯路。Token 消耗直接对应成本。每 1000 Token 约 0.001-0.03 元取决于模型积少成多。响应时间用户体验的核心。用户等 3 秒和等 30 秒是完全不同的体验。准确率结果的正确性。成功率只关心「是否完成」准确率关心「是否正确」。三、评估框架实现3.1 测试用例设计# 测试用例结构classTestCase:def__init__(self,question,expected_tools,expected_answer_keywords):self.questionquestion self.expected_toolsexpected_tools# 期望调用的工具self.expected_answer_keywordsexpected_answer_keywords# 答案关键词# 示例测试用例集test_cases[TestCase(question华东区上个月销售额是多少,expected_tools[query_database],expected_answer_keywords[华东,销售额,元]),TestCase(question对比华东和华南的销售趋势,expected_tools[query_database,query_database],expected_answer_keywords[华东,华南,对比,增长]),TestCase(question分析销售下降的原因,expected_tools[query_database,analyze_trend,generate_report],expected_answer_keywords[原因,下降,建议]),]3.2 评估引擎importtimeimportjsonfromdataclassesimportdataclass,fieldfromtypingimportOptionaldataclassclassEvalResult:单次评估结果question:strsuccess:boolsteps:inttokens_used:intlatency_ms:floataccuracy:float# 0.0 - 1.0tools_called:list[str]field(default_factorylist)error_message:Optional[str]Nonedefto_dict(self):return{question:self.question,success:self.success,steps:self.steps,tokens_used:self.tokens_used,latency_ms:self.latency_ms,accuracy:self.accuracy,tools_called:self.tools_called,error:self.error_message,}classAgentEvaluator:Agent 评估器def__init__(self,agent,test_cases):self.agentagent self.test_casestest_cases self.results:list[EvalResult][]defevaluate_single(self,test_case:TestCase)-EvalResult:评估单个测试用例start_timetime.time()steps0tokens_used0tools_called[]try:# 执行 Agentresponseself.agent.run(test_case.question)stepsresponse.get(steps,0)tokens_usedresponse.get(tokens_used,0)tools_calledresponse.get(tools_called,[])# 计算准确率检查关键词是否出现在答案中answerresponse.get(answer,)matchedsum(1forkwintest_case.expected_answer_keywordsifkwinanswer)accuracymatched/len(test_case.expected_answer_keywords)iftest_case.expected_answer_keywordselse1.0successaccuracy0.6# 60% 关键词匹配算成功exceptExceptionase:successFalseaccuracy0.0steps0latency_ms(time.time()-start_time)*1000returnEvalResult(questiontest_case.question,successsuccess,stepssteps,tokens_usedtokens_used,latency_mslatency_ms,accuracyaccuracy,tools_calledtools_called,error_messageNoneifsuccesselsestr(e)ifeindir()else未知错误,)defevaluate_all(self)-dict:评估所有测试用例生成汇总报告self.results[self.evaluate_single(tc)fortcinself.test_cases]success_countsum(1forrinself.resultsifr.success)totallen(self.results)return{summary:{total_cases:total,success_count:success_count,success_rate:f{success_count/total*100:.1f}%,avg_steps:f{sum(r.stepsforrinself.results)/max(success_count,1):.1f},avg_tokens:f{sum(r.tokens_usedforrinself.results)/max(success_count,1):.0f},avg_latency_ms:f{sum(r.latency_msforrinself.results)/max(success_count,1):.0f},avg_accuracy:f{sum(r.accuracyforrinself.results)/total*100:.1f}%,},details:[r.to_dict()forrinself.results],}defcompare_versions(self,old_results:dict,new_results:dict)-dict:对比两个版本的结果old_sold_results[summary]new_snew_results[summary]return{success_rate_change:f{old_s[success_rate]}→{new_s[success_rate]},avg_steps_change:f{old_s[avg_steps]}→{new_s[avg_steps]},avg_tokens_change:f{old_s[avg_tokens]}→{new_s[avg_tokens]},avg_latency_change:f{old_s[avg_latency_ms]}→{new_s[avg_latency_ms]},avg_accuracy_change:f{old_s[avg_accuracy]}→{new_s[avg_accuracy]},}3.3 版本对比报告defgenerate_eval_report(version_a:str,version_b:str,results_a:dict,results_b:dict):生成版本对比报告print(f\n{*60})print(f Agent 版本对比报告)print(f{version_a}vs{version_b})print(f{*60}\n)print(f{指标:20}{版本A:15}{版本B:15}{变化:15})print(-*65)s_aresults_a[summary]s_bresults_b[summary]metrics[(成功率,success_rate),(平均步数,avg_steps),(平均Token,avg_tokens),(平均延迟(ms),avg_latency_ms),(平均准确率,avg_accuracy),]forname,keyinmetrics:print(f{name:20}{s_a[key]:15}{s_b[key]:15})print(f\n{*60}\n)四、持续评估流程是否 编写测试用例 运行评估 生成报告通过?✅ 发布上线 定位问题️ 修复优化最佳实践每次修改前先跑基准测试记录当前版本的指标修改后跑对比测试确认指标没有退化定期更新测试用例从真实用户反馈中提取新用例设置质量门禁成功率低于 85% 不允许上线五、运行cdcode/lesson-44-evaluation uvsyncuv run evaluation.py六、本课小结评估框架 量化 追踪 优化没有评估就无法进步五大核心指标成功率、步数、Token、延迟、准确率每次修改都要跑基准测试和对比测试设置质量门禁防止退化上线配套代码code/lesson-44-evaluation/evaluation.py
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。