测试与评测
单元/集成测试、RAGAS、DeepEval、Human-in-the-loop。
30 分钟
测试与评测
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 请求
人工成本高,适合 ;自动化适合 。