评估与测试 (Evaluation)
AI Agent 最大的问题是不可预测性。昨天能跑通的代码,今天可能就报错。 为了将 Agent 推向生产环境,我们必须建立一套评估体系(Evals)。
[PROMPT_LAB_BANNER]
1. 为什么 Unit Test 不够用了?
传统的单元测试是确定性的:assert add(1, 1) == 2。
但在 Agent 中,ask("你好") 每次返回的文本都不一样。我们无法用字符串匹配来测试。
我们需要从 Syntax Match (语法匹配) 转向 Semantic Match (语义匹配)。
2. LLM-as-a-Judge (用魔法打败魔法)
既然只有 LLM 能理解 LLM 的输出,那就用一个更强的 LLM 来充当裁判。
示例:评估客服回答的准确性
输入:
- Question: "如何重置密码?"
- Ground Truth (标准答案): "点击登录页的'忘记密码'链接。"
- Agent Answer: "亲,您可以在登录页面找到忘记密码的按钮哦。"
裁判 Prompt:
"请对比 Agent Answer 和 Ground Truth。虽然措辞不同,但核心语义是否一致?如果是,输出 1,否则输出 0。"
3. RAGAS:RAG 系统的评分标准
RAGAS (Retrieval Augmented Generation Assessment) 是目前最流行的 RAG 评估框架。它定义了几个核心指标:
- Faithfulness (忠实度): 回答是否完全基于检索到的 Context?(检测幻觉)
- Answer Relevance (回答相关性): 回答是否解决了用户的问题?
- Context Precision (上下文精确度): 检索到的文档中有多少是有用的?
使用 RAGAS (Python)
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy
from datasets import Dataset
data = {
'question': ['How to reset password?'],
'answer': ['Go to login page and click forgot password.'],
'contexts': [['Reset password guide: 1. Go to login...']],
'ground_truth': ['Click forgot password on login screen.']
}
dataset = Dataset.from_dict(data)
results = evaluate(
dataset = dataset,
metrics = [faithfulness, answer_relevancy]
)
print(results)
# {'faithfulness': 0.99, 'answer_relevancy': 0.95}
4. 建立回归测试集 (Golden Dataset)
不要指望每次都人工看日志。你需要维护一个包含 50-100 个典型问题的黄金数据集。
每次修改 Agent 的 Prompt 或逻辑后,自动跑一遍这个数据集,观察 RAGAS 分数的变化。
- 分数涨了 -> 可以发布。
- 分数跌了 -> 回滚。
小结
- 没有 Evals 就没有生产力。盲目优化 Prompt 只是在“炼丹”。
- LLM-as-a-Judge 是目前评估非结构化输出的最佳实践。
- RAGAS 提供了量化的指标,让你能像优化代码性能一样优化 Agent 智能。