评测与可观测
对抗测试、输出约束、监控指标。
30 分钟
评测与可观测
RAG 与 Agent 不会一次做对;需要 离线评测集 + 在线指标 + 追踪 才能迭代。本课讲对抗测试、输出约束与监控——对应 ai-engineer 的 eval / observability 节点。团队质量门禁见 ai-engineering-essentials。
学习目标
- 构建 golden Q&A 与 retrieval 评测
- 用 LLM-as-judge 与规则检查互补
- 接入 tracing、latency、cost、错误率监控
离线评测
cases = [
{"query": "RAG 分块 overlap 建议?", "expected_slugs": ["aen-rag"], "must_not_hallucinate": True},
{"query": "生产密钥能否进 prompt?", "expected_answer_contains": ["禁止", "环境变量"]},
]
def eval_rag(pipeline, cases):
results = []
for c in cases:
out = pipeline.answer(c["query"])
hit = slug_recall(out.citations, c.get("expected_slugs", []))
grounded = not contains_forbidden_links(out.text)
results.append({"query": c["query"], "recall": hit, "grounded": grounded})
return aggregate(results)
| 层级 | 测什么 |
|---|---|
| Retrieval | Recall@k、MRR、nDCG |
| Generation | grounded、citation 正确、拒答是否触发 |
| Agent | 工具调用序列、步数、任务成功率 |
| Safety | 注入用例、越权调用应失败 |
对抗集:故意问未索引 slug、矛盾文档、注入片段——与 aen-safety 联动。
LLM-as-Judge 与规则
- Judge 模型打 rubric 分(相关性、完整性、有害性)
- 规则兜底:JSON schema、正则 ban 未发布链接、cite 数量 ≥1
- Judge 有偏见与不稳定;关键发布门槛用规则 + 人工 spot check
可观测
with trace_span("rag.answer", attrs={"track": track, "top_k": top_k}):
hits = retriever.search(query)
span.set_attribute("retrieval.count", len(hits))
answer = llm.generate(...)
span.set_attribute("tokens.in", usage.prompt_tokens)
span.set_attribute("tokens.out", usage.completion_tokens)
监控看板建议:
- p50/p95 latency(检索 / LLM / 端到端)
- token 与美元 每请求、每用户
- 拒答率、空检索率、工具错误率
- 用户 👎 与 escalation 量
与 testing-essentials 一样:绿测/绿评是发布事实,不是 vibe。