从零开始构建AI Agent评估管线
“没有度量就没有改进”——这句话对AI Agent尤其成立。一个没有评估管线的Agent项目,就像在没有仪表盘的飞机上飞行。本文是一份从零开始构建Agent评估管线的实操指南。
评估管线的整体架构
一个完整的Agent评估管线包含五个核心模块:
- 指标体系:定义"什么算好"
- 数据集:定义"在什么上评估"
- 评估器:执行评估的逻辑
- 报告系统:可视化评估结果
- 持续集成:将评估嵌入开发流程
模块一:指标体系设计
指标分类框架
我们将Agent评估指标分为四层:
任务完成层(最基础):
- 成功率:任务是否完成
- 完成时间:从开始到完成的时间
- 步数效率:完成任务用的对话轮次/工具调用次数
质量层:
- 正确性:输出是否准确
- 完整性:是否覆盖了所有要求
- 相关性:输出是否切题
交互层:
- 理解准确度:是否正确理解了用户意图
- 澄清频率:需要多少次澄清才能理解
- 错误恢复率:出错后能否恢复
安全层:
- 安全通过率:安全测试集的通过率
- 过度拒绝率:安全请求被误拒的比例
- 越狱成功率:攻击测试的成功率
指标定义的SMART原则
每个指标必须满足:
- Specific:明确定义计算方法
- Measurable:可量化计算
- Actionable:指标变化能指导行动
- Relevant:和产品质量相关
- Trackable:可追踪趋势
反例:“用户满意度”——太模糊,无法计算。 正例:“用户在Agent完成任务后点击’满意’按钮的比例”——可计算、可追踪。
模块二:评估数据集构建
数据集类型
Golden Set:人工标注的标准问答对,有唯一正确答案。用于回归测试。
Evaluation Set:人工标注的开放性任务,可能有多种正确答案。用LLM-as-Judge评分。
Adversarial Set:红队设计的攻击性输入。用于安全测试。
Real-world Set:从真实用户对话中抽样(脱敏后)。用于反映实际使用场景。
数据集构建流程
- 需求分析:确定需要评估哪些能力和场景
- 种子设计:为每个场景设计3-5个种子案例
- 扩增:用LLM基于种子生成更多变体
- 人工审核:过滤质量不高的扩增案例
- 标注:为每个案例标注期望结果或评分标准
- 版本管理:数据集版本化,支持增量更新
数据集规模建议
| 类型 | 最小规模 | 推荐规模 | 更新频率 |
|---|---|---|---|
| Golden Set | 100 | 500+ | 季度 |
| Evaluation Set | 50 | 200+ | 月度 |
| Adversarial Set | 30 | 100+ | 月度 |
| Real-world Set | 200 | 1000+ | 周度 |
模块三:评估器实现
精确匹配评估器
适用于有唯一正确答案的任务:
def exact_match_eval(response, expected):
"""精确匹配评估"""
return {
"score": 1.0 if response.strip().lower() == expected.strip().lower() else 0.0,
"reason": "精确匹配" if response.strip().lower() == expected.strip().lower() else "不匹配"
}
语义匹配评估器
适用于答案有多个正确表述的任务:
def semantic_match_eval(response, expected, model="embedding-model"):
"""基于嵌入的语义匹配"""
response_emb = get_embedding(response, model)
expected_emb = get_embedding(expected, model)
similarity = cosine_similarity(response_emb, expected_emb)
return {
"score": similarity,
"reason": f"语义相似度: {similarity:.3f}"
}
LLM-as-Judge评估器
适用于开放性任务,使用更强的模型做评估:
def llm_judge_eval(response, task, criteria):
"""LLM-as-Judge评估"""
prompt = f"""
任务: {task}
回答: {response}
评估标准: {criteria}
请按1-10分评估回答质量,并说明理由。
输出JSON格式: {{"score": 8, "reason": "..."}}
"""
result = call_llm(prompt)
return parse_json(result)
组合评估器
实际评估通常需要多个维度:
def composite_eval(response, task, expected):
"""组合评估"""
results = {
"exact_match": exact_match_eval(response, expected),
"semantic_match": semantic_match_eval(response, expected),
"llm_judge": llm_judge_eval(response, task, EVAL_CRITERIA),
"safety": safety_check(response),
"latency_ms": measure_latency(response)
}
# 加权综合得分
weights = {"exact_match": 0.3, "semantic_match": 0.2,
"llm_judge": 0.3, "safety": 0.2}
total = sum(results[k]["score"] * weights[k] for k in weights)
results["total_score"] = total
return results
模块四:报告系统
报告维度
评估报告应包含:
总体评分:所有任务的加权平均分 分维度得分:各能力维度的得分分布 趋势图:评分随时间的变化 失败分析:失败案例的分类统计 对比分析:与上一版本或基线模型的对比
可视化设计
- 雷达图:展示各维度的能力分布
- 趋势线:展示评分随版本的变化
- 散点图:展示各任务的得分分布
- 热力图:展示能力维度×任务类型的得分矩阵
模块五:持续集成
CI集成
# GitHub Actions workflow
name: Agent Evaluation
on: [pull_request]
jobs:
evaluate:
steps:
- name: Run Golden Set
run: python eval.py --dataset golden --threshold 0.95
- name: Run Safety Set
run: python eval.py --dataset adversarial --threshold 0.99
- name: Check Regression
run: python eval.py --check-regression --max-drop 0.02
- name: Generate Report
run: python eval.py --report --format markdown > eval_report.md
- name: Comment on PR
uses: actions/github-script@v6
with:
script: |
const report = require('fs').readFileSync('eval_report.md', 'utf8');
github.rest.issues.createComment({
issue_number: context.issue.number,
body: report
});
质量门控
设置自动化的质量门控:
- Golden Set通过率<95% → 阻止合并
- 安全测试通过率<99% → 阻止合并
- 相比基线退化>2% → 需要人工审核
告警机制
评估结果异常时自动告警:
- 某维度得分突降>10% → 告警
- 新增失败模式出现 → 告警
- 安全测试出现新失败 → 紧急告警
高级实践
在线评估
除了离线评估,在线评估同样重要:
A/B测试框架:新版本和旧版本同时服务部分流量,对比关键指标 用户反馈收集:在Agent回复后收集用户反馈(点赞/点踩) 隐式信号:用户是否复制了Agent的回复、是否继续追问、是否中断对话
对抗性评估
定期进行对抗性评估:
- 红队测试:专业攻击者尝试突破Agent
- 自动化攻击:使用攻击生成工具批量生成攻击输入
- 长期对抗:持续运行Agent,监控行为漂移
多模态评估
如果Agent支持多模态,评估需要覆盖:
- 文本理解能力
- 图像理解能力
- 语音交互能力
- 多模态融合能力
常见陷阱
- 过度依赖LLM-as-Judge:LLM评估者自身有偏差,不能完全替代人工评估
- 数据集污染:评估数据泄露到训练数据中,评估结果虚高
- 指标过拟合:过度优化评估指标,忽略了真实用户体验
- 静态数据集:数据集不更新,无法覆盖新的使用模式
- 忽略长尾:只关注平均分,忽略少数极端失败案例
结语
构建评估管线是Agent工程化的基石。投入在评估上的时间回报率极高——一个好的评估管线可以让你在每次变更时知道"变好了还是变坏了",而不是靠"感觉"。在2026年,Agent评估管线已经从"奢侈品"变成了"必需品"。你的评估管线有多完善,你的Agent就有多可靠。
本文同步发布于 硅基AGI论坛
