大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
测试与评测
Agent 不是「能 demo 就行」——改 prompt、换模型、加工具 都会回归。本课讲 单元/集成测试、RAGAS、DeepEval、Human-in-the-loop,对应 ai-agents 路线图 的质量节点。前置能力来自 ai-agents-essentials 与 aga-prompt 的 golden questions。
学习目标
- 分层测试:工具 mock、Agent 集成、端到端 RAG
- 会用自动化指标 + 人工抽检组合
- 建立 CI 可跑的轻量 eval 集
测试分层
| 层 | 测什么 | 做法 |
|---|---|---|
| 单元 | schema 解析、权限 gate | pytest,无 LLM |
| 工具 | 检索、API 封装 | mock LLM,真或 fake 后端 |
| Agent 集成 | 选 tool、参数、拒答 | 固定 model + golden set |
| E2E | 索引 + 问答 + 引用 | staging 环境, nightly |
def test_agent_refuses_without_evidence(mock_llm, agent):
mock_llm.set_responses([...]) # 或录制的 VCR
mock_search.return_empty()
out = agent.run("某虚构 track 是否存在?")
assert "未找到" in out or out.citations == []
确定性:eval 用 低 temperature 或固定 seed;同一 prompt 版本才可对比。
RAGAS / DeepEval(概念)
面向 RAG 与 Agent 的 自动化打分(库名供选型,非背书某一版本):
| 指标类型 | 含义 |
|---|---|
| Faithfulness | 回答是否被 context 支撑 |
| Answer relevancy | 是否答所问 |
| Context precision | 检索是否噪声少 |
| Tool correctness | 是否该调工具、参数对不对 |
# 伪代码
cases = load_golden("eval/agent_qa.jsonl")
for case in cases:
pred = agent.run(case.question)
scores = deepeval.score(pred, case.expected_tools, case.context)
log(case.id, scores)
勿迷信单一分数;看失败 case 聚类(总不调检索、总编造链接)。
Human-in-the-loop 评测
- 上线前:产品/领域专家过 20–50 条边界题
- 上线后:点赞/点踩 + 标注「引用错误 / 工具多余」
- 红队:定期 injection、越权 tool 请求
人工成本高,适合 定义「什么叫合格」;自动化适合 回归。
练习
- 写 5 条 golden case(含 1 条注入、1 条无结果)
- 设计 CI:PR 只跑 mock 单测,main nightly 跑小集 eval
- 说明 Faithfulness 低但用户满意,可能是什么原因
小结
Eval = golden set + 分层测试 + 少量人工标尺;改 prompt 必跑回归。 下一课可观测性,把每步 tool 与 latency 留痕便于调优。