ARCHIVE / INITIALIZING000%
正在载入档案界面SYS.07
Interview Prep

Agent 评测

从检索排序指标、工具与轨迹评测,到数据集构建、离线与端到端测试、统计检验、Baseline 和回归门禁。

Agent 评测

Agent评测需要回答三个问题:组件是否正确,完整任务是否成功,改进方案是否在可接受的成本和风险下产生了稳定收益。只展示若干成功Case,不能说明系统质量,也不能定位失败来源。

Agent 离线、端到端与基线对比评测

1. 先定义评测对象

同一个Agent至少包含五层可评测对象:

层级输入输出典型指标
RetrievalQuery、知识快照候选证据Recall@K、MRR、MAP、NDCG
ToolTool Schema、参数Observation / Error选择准确率、参数准确率、成功率
TrajectoryState、可用工具Action序列路径成功率、冗余步骤、预算违规
AnswerEvidence、任务最终回答Correctness、Faithfulness、Citation
System完整场景状态与副作用Task Success、延迟、成本、安全

指标必须与任务契约一致。检索系统的Gold是文档、Chunk还是事实集合,会直接改变Recall的分母;Agent任务允许多条合法路径时,也不能用唯一轨迹做严格字符串匹配。

2. 检索指标的统一记号

对查询qq,全文统一使用下面这组记号:

符号含义示例
GqG_qQuery qq的Gold相关结果集合{A,C,D}\{A,C,D\}
Rq@KR_q^{@K}系统返回的前KK个有序结果[B,A,E,C,F][B,A,E,C,F]
rel⁡i\operatorname{rel}_i第ii名是否相关,取0或1第2名A相关,则rel⁡2=1\operatorname{rel}_2=1
gain⁡i\operatorname{gain}_i第ii名的分级相关性0无关、1背景、2部分支持、3直接支持
Q\mathcal Q整个评测Query集合{q1,q2,…,qm}\{q_1,q_2,\ldots,q_m\}
KK只观察排序结果的前KK名Recall@5中的K=5K=5

先固定相关性单位。例如一个答案必须同时依赖“错误日志”和“配置定义”时,两个Evidence都应进入G_q;若只标其中一项,系统漏掉另一项也不会被扣分。

Recall、MRR 与 NDCG 对同一 Top-5 的观察角度

3. Precision@K、Recall@K 与 Hit Rate@K

Precision@K(q)=∣Gq∩Rq@K∣KRecall@K(q)=∣Gq∩Rq@K∣∣Gq∣HitRate@K(q)={1,∣Gq∩Rq@K∣>00,otherwise\begin{aligned} \mathrm{Precision@}K(q) &=\frac{|G_q\cap R_q^{@K}|}{K} \\ \mathrm{Recall@}K(q) &=\frac{|G_q\cap R_q^{@K}|}{|G_q|} \\ \mathrm{HitRate@}K(q) &=\begin{cases} 1,&|G_q\cap R_q^{@K}|>0\\ 0,&\text{otherwise} \end{cases} \end{aligned}

假设Gold为{A,C,D},Top-5为[B,A,E,C,F]:

Gq∩Rq@5={A,C},Precision@5=25=0.4G_q\cap R_q^{@5}=\{A,C\},\qquad \mathrm{Precision@}5=\frac25=0.4 Recall@5=23≈0.667,HitRate@5=1\mathrm{Recall@}5=\frac23\approx0.667, \qquad \mathrm{HitRate@}5=1

Precision关心返回结果中有多少相关;Recall关心Gold被找回多少;Hit Rate只关心至少命中一个。对需要多份证据的问题,Hit Rate信息过少。

Macro与Micro平均

MacroRecall@⁡K=1∣Q∣∑q∈QRecall@K(q)\operatorname{MacroRecall@}K =\frac{1}{|\mathcal Q|} \sum_{q\in\mathcal Q}\mathrm{Recall@}K(q) MicroRecall@⁡K=∑q∈Q∣Gq∩Rq@K∣∑q∈Q∣Gq∣\operatorname{MicroRecall@}K =\frac{\sum_{q\in\mathcal Q}|G_q\cap R_q^{@K}|} {\sum_{q\in\mathcal Q}|G_q|}

Macro让每个Query权重相同;Micro让Gold数量多的Query权重更大。应根据业务目标选择,并同时报告样本分布,避免一个平均数掩盖长尾。

4. Reciprocal Rank与MRR

令rank_q为第一个相关结果的排名:

RR@K(q)={1rank⁡q,rank⁡q≤K0,otherwise\mathrm{RR@}K(q)= \begin{cases} \dfrac{1}{\operatorname{rank}_q},&\operatorname{rank}_q\le K\\ 0,&\text{otherwise} \end{cases} MRR@K=1∣Q∣∑q∈QRR@K(q)\mathrm{MRR@}K =\frac{1}{|\mathcal Q|} \sum_{q\in\mathcal Q}\mathrm{RR@}K(q)

手算:

QueryGold数量Top-5命中排名Recall@5RR@5
Q121、41.01.0
Q2131.01/3
Q322,仅命中一篇0.51/2
Q41无00
MacroRecall@⁡5=1+1+0.5+04=0.625\operatorname{MacroRecall@}5 =\frac{1+1+0.5+0}{4}=0.625 MRR@5=1+13+12+04≈0.458\mathrm{MRR@}5 =\frac{1+\frac13+\frac12+0}{4} \approx0.458

MRR只使用第一个相关结果。第1名相关、第2至第5名全部错误,与第1至第5名全部相关,RR都等于1。因此MRR适合“尽快给出第一个正确结果”,不适合单独评估多证据覆盖。

5. Average Precision与MAP

Average Precision同时考虑多个相关结果的位置。设前i个结果的Precision为P@i:

AP@K(q)=1min⁡(∣Gq∣,K)∑i=1KP@i(q)⋅rel⁡i\mathrm{AP@}K(q) =\frac{1}{\min(|G_q|,K)} \sum_{i=1}^{K}\mathrm{P@}i(q)\cdot\operatorname{rel}_i MAP@K=1∣Q∣∑q∈QAP@K(q)\mathrm{MAP@}K =\frac{1}{|\mathcal Q|} \sum_{q\in\mathcal Q}\mathrm{AP@}K(q)

有些实现使用|G_q|作为分母,即使Gold数量大于K;必须在报告中写明定义。

例:Gold为{A,C,D},Top-5为[A,B,C,E,D]:

P@1=1,P@3=23,P@5=35\mathrm{P@}1=1,\qquad \mathrm{P@}3=\frac23,\qquad \mathrm{P@}5=\frac35 AP@5=1+23+353≈0.756\mathrm{AP@}5 =\frac{1+\frac23+\frac35}{3} \approx0.756

若把三个相关结果改排到[B,E,A,C,D],Recall@5仍为1,但AP下降,因为正确结果出现得更晚。

6. DCG与NDCG

NDCG支持分级相关性,适合区分“直接回答问题的证据”“有帮助但不充分”“仅背景相关”。常见定义为:

DCG@K=∑i=1K2gain⁡i−1log⁡2(i+1)\mathrm{DCG@}K =\sum_{i=1}^{K} \frac{2^{\operatorname{gain}_i}-1}{\log_2(i+1)} NDCG@K=DCG@KIDCG@K\mathrm{NDCG@}K =\frac{\mathrm{DCG@}K}{\mathrm{IDCG@}K}

其中IDCG@K\mathrm{IDCG@}K是将同一组Gain按降序排列后得到的最大DCG。

若所有Gold都使用二元相关性,则gain_i为0或1。分级标签例子:

  • 3:直接且充分支持答案;
  • 2:相关并支持部分结论;
  • 1:背景相关;
  • 0:无关。

假设Top-3 Gain为[3,1,2]:

DCG@3=7log⁡22+1log⁡23+3log⁡24=7+0.631+1.5=9.131\begin{aligned} \mathrm{DCG@}3 &=\frac7{\log_2 2}+\frac1{\log_2 3}+\frac3{\log_2 4}\\ &=7+0.631+1.5=9.131 \end{aligned}

理想排序的Gain为[3,2,1][3,2,1]:

IDCG@3=7+3log⁡23+1log⁡24≈9.393NDCG@3=9.1319.393≈0.972\begin{aligned} \mathrm{IDCG@}3 &=7+\frac3{\log_2 3}+\frac1{\log_2 4}\approx9.393\\ \mathrm{NDCG@}3 &=\frac{9.131}{9.393}\approx0.972 \end{aligned}

不同库也可能使用gain_i/log₂(i+1)而不是(2^gain_i-1)/...。复现实验时必须固定实现。

6.1 看任务选指标

评测目标优先指标原因
Top-K里至少有没有一条可用证据Hit Rate@K只判断是否命中,不关心覆盖多少
Gold证据找全了多少Recall@K分母就是全部Gold数量
第一条正确结果出现得够不够早MRR@K只看首次命中的排名
多条正确结果是否整体排在前面MAP@K每次命中都考虑此前排序精度
结果有强弱等级,强证据应更靠前NDCG@K同时考虑Gain和位置折损
最终回答是否被证据支持Faithfulness、Citation指标检查生成结果,不只检查Retriever

7. 指标实现伪代码

function metrics_at_k(ranked_ids, gold_ids, k):
    topk = ranked_ids[0:k]
    hits = [1 if id in gold_ids else 0 for id in topk]

    precision = sum(hits) / k
    recall = sum(hits) / size(gold_ids)
    hit_rate = 1 if sum(hits) > 0 else 0

    rr = 0
    ap_sum = 0
    seen_hits = 0

    for i in 1..k:
        if hits[i-1] == 1:
            seen_hits += 1
            if rr == 0:
                rr = 1 / i
            ap_sum += seen_hits / i

    ap = ap_sum / min(size(gold_ids), k)
    return precision, recall, hit_rate, rr, ap

实现时还要决定:重复Chunk是否去重;同一父文档的多个Chunk算一次还是多次;无Gold Query是跳过、记0还是单独进入“不可回答”集合。

8. Context与生成指标

8.1 Context Precision与Recall

如果能把最终Context拆成Evidence Unit:

ContextPrecision⁡=#Relevant Evidence Units#Context Units\operatorname{ContextPrecision} =\frac{\#\text{Relevant Evidence Units}} {\#\text{Context Units}} ContextRecall⁡=#Covered Gold Evidence#Gold Evidence\operatorname{ContextRecall} =\frac{\#\text{Covered Gold Evidence}} {\#\text{Gold Evidence}}

它们与Retrieval指标不同:Retriever可能召回Gold,但Context Builder因Token预算将其删除;此时Retrieval Recall高,Context Recall低。

8.2 Faithfulness

把答案拆成原子Claim集合C,判断每个Claim是否由提供的Context支持:

Faithfulness⁡=#Supported Claims#Verifiable Claims\operatorname{Faithfulness} =\frac{\#\text{Supported Claims}} {\#\text{Verifiable Claims}}

需要单独标记不可验证的主观表达和无事实内容。Faithfulness高只表示答案忠于Context,不表示Context正确或答案完整。

8.3 Citation Precision与Recall

CitationPrecision⁡=#Citations that entail their claims#Citations\operatorname{CitationPrecision} =\frac{\#\text{Citations that entail their claims}} {\#\text{Citations}} CitationRecall⁡=#Key claims with valid citations#Key claims requiring evidence\operatorname{CitationRecall} =\frac{\#\text{Key claims with valid citations}} {\#\text{Key claims requiring evidence}}

Citation存在不等于Citation正确。必须检查引用与Claim的蕴含关系,以及chunk_id + version_id是否对应实际展示内容。

8.4 Answer Correctness

封闭任务可使用Exact Match、Token F1或结构化字段准确率;开放RCA可按Rubric拆分:Root Cause、Evidence、Impact、Action和Uncertainty。每项单独评分,避免一段语言流畅的答案掩盖根因错误。

8.5 拒答与选择性风险

包含“无答案”样本时,需要同时衡量回答覆盖率与已回答样本的正确率:

Coverage⁡=#Answered Cases#All CasesSelectiveAccuracy⁡=#Correct Answered Cases#Answered CasesRisk⁡=1−SelectiveAccuracy⁡\begin{aligned} \operatorname{Coverage} &=\frac{\#\text{Answered Cases}}{\#\text{All Cases}}\\ \operatorname{SelectiveAccuracy} &=\frac{\#\text{Correct Answered Cases}}{\#\text{Answered Cases}}\\ \operatorname{Risk} &=1-\operatorname{SelectiveAccuracy} \end{aligned}

提高拒答阈值通常会降低Coverage并提高Selective Accuracy。应绘制Risk-Coverage曲线,而不是只报告拒答率。对必须回答的任务,还要把不必要拒答计为False Negative;对高风险动作,缺少证据时拒答通常是正确行为。

9. Tool评测

Tool Call至少分四层:

  1. Tool Selection:是否选对工具;
  2. Argument Validity:是否通过Schema;
  3. Argument Correctness:参数值是否满足任务;
  4. Execution Outcome:真实执行是否成功且副作用正确。

9.1 分类指标

对某个Tool或危险动作,可构造混淆矩阵:TP、FP、FN、TN。

Precision⁡=TPTP+FPRecall⁡=TPTP+FNF1=2⋅Precision⁡⋅Recall⁡Precision⁡+Recall⁡\begin{aligned} \operatorname{Precision}&=\frac{TP}{TP+FP}\\ \operatorname{Recall}&=\frac{TP}{TP+FN}\\ F_1&=2\cdot\frac{\operatorname{Precision}\cdot\operatorname{Recall}} {\operatorname{Precision}+\operatorname{Recall}} \end{aligned}

对危险写操作,FP意味着不该调用却调用,通常比FN更严重;此时不能只优化宏平均F1,应单独设置False Positive Rate门禁。

9.2 参数准确性

  • Exact Match:适合枚举、ID、时间窗口等确定字段;
  • Field-level F1:适合部分字段可选的JSON;
  • Semantic Validator:检查PromQL、SQL或过滤表达式是否满足约束;
  • Execution-based:在隔离环境执行,检查结果与副作用。

参数Schema合法不代表业务正确。service_id存在但指向错误租户,仍是严重失败。

10. Trajectory评测

开放Agent可能存在多条正确路径,因此不应只比较完整Action序列字符串。可以评估:

  • Required Tool Coverage:必需工具是否调用;
  • Forbidden Action Rate:禁止动作是否出现;
  • Redundant Step Rate:重复或无效步骤占比;
  • Recovery Rate:Tool Error后是否正确重试、降级或终止;
  • Budget Violation:是否超过Step、Token、Cost或Deadline;
  • State Consistency:Resume后是否从持久状态继续;
  • Final Task Success:最终目标是否完成。

如果业务有确定的Workflow,可以对状态迁移做严格校验;如果允许多条路径,则应以约束和结果为主,轨迹相似度只作为诊断指标。

11. 离线测试与端到端测试

11.1 离线测试

离线测试用于定位组件:

  • Retrieval与Rerank使用冻结知识快照;
  • Tool Contract覆盖正常、Malformed Input、Timeout、Denied、Retry;
  • Planner使用固定Observation做Replay;
  • Prompt和Model测试结构化输出、引用与拒答;
  • 安全测试使用固定Injection与越权样本。

外部Tool Response、时间、随机性和知识版本应尽量冻结,否则环境波动会混入模型差异。

11.2 端到端测试

端到端测试用于验证完整系统:

  • Incident是否得到正确Root Cause与Evidence;
  • Tool是否真实调用并遵守权限;
  • SSE、取消、恢复与最终状态是否一致;
  • P50/P95/P99延迟、Token、API成本;
  • 危险动作是否要求Approval;
  • 部分依赖失败时系统是否降级或安全终止。

离线高分不保证端到端成功,因为组合后会出现路由、共享状态、预算和错误传播问题;端到端失败也必须沿Trace回到具体组件。

12. 评测集构建

AgentOps的一个Case至少包含:

case_id
incident_snapshot: metrics / logs / topology / time_window
user_query
gold_root_cause
gold_evidence: metric / log / chunk / graph_path / code_location
acceptable_actions / forbidden_actions
required_tools / optional_tools
difficulty / failure_type / service / timestamp
knowledge_snapshot / tool_fixture_version

12.1 数据来源

  • 已解决Incident、Postmortem、Runbook;
  • 专家设计的边界与安全Case;
  • 线上失败Trace经脱敏和复核后回流;
  • 合成数据只用于补足稀缺模式,不能替代真实分布。

12.2 标注

由领域专家标Root Cause、最小充分证据集、允许动作和禁止动作。采用双人标注与仲裁;多根因任务允许多个可接受答案。记录标注指南版本,并用Cohen’s Kappa或Krippendorff’s Alpha观察一致性。

12.3 Hard Negative

  • 症状相似但根因不同;
  • 旧版本Runbook;
  • 同名服务、错误时间窗口;
  • 相关但不能支持结论的文档;
  • Tool Timeout、Permission Denied、部分数据缺失;
  • 无答案、证据冲突、Prompt Injection;
  • 看似有效但禁止自动执行的操作。

12.4 切分与泄漏

按Incident、服务族或时间切分Train/Dev/Test。来自同一事故的改写不能散落到不同集合;同一Runbook的近重复Chunk也要做Group Split。用Dev集调参数,Test集只用于最终报告。

13. Baseline实验

13.1 控制变量

冻结:

Dataset / Knowledge Snapshot / Model Version
Prompt Version / Tool Schema / Tool Fixture
Temperature / Seed / MaxStep / Token Budget
Timeout / Hardware / Concurrency

一次只改变一个主要变量。例如:

Baseline: Vector Only
Variant A: BM25 + Vector + RRF
Variant B: BM25 + Vector + RRF + Cross-Encoder

如果必须同时修改多个组件,应使用消融实验:A、B、A+B分别测试,判断收益来源和交互效应。

13.2 随机性与重复运行

检索器通常接近确定性,生成和Agent轨迹可能随机。每个Case运行n次,报告:

  • Mean、Median、Standard Deviation;
  • Pass@1、Pass@k和All-pass@n;
  • 最差分位数;
  • 每Case配对差值。

若一个Case采样n个结果,其中c个成功,从中选k个时“至少一个成功”的无偏估计为:

pass@k=1−(n−ck)(nk)\mathrm{pass@}k =1-\frac{\binom{n-c}{k}}{\binom{n}{k}}

Pass@k衡量多次尝试至少成功一次的能力,但会奖励重试预算;All-pass@n衡量连续多次均成功的稳定性。线上只能执行一次的任务应以Pass@1为主,不能用Pass@10掩盖单次可靠性不足。

不要把同一Case多次运行当作独立业务样本扩大样本量。统计单位仍应尊重Case层级。

14. 置信区间与显著性

14.1 Paired Bootstrap

Baseline和Variant在同一组Case上评测,使用配对Bootstrap:

for b in 1..B:
    sample |Q| case indices with replacement
    delta_b = metric_variant(sample) - metric_baseline(sample)

95% CI = percentile(delta, 2.5%, 97.5%)

若区间跨0,当前数据不足以说明差异稳定不为0。统计显著不等于业务显著,还要看Effect Size、延迟和成本。

14.2 二元成功率

对同一Case的成功/失败配对结果,可以使用McNemar Test,重点比较“Baseline失败而Variant成功”和“Baseline成功而Variant失败”的不一致样本。

连续但非正态的每Case指标差,可考虑Wilcoxon Signed-Rank或Permutation Test。选择方法前先明确独立性和配对结构。

15. 回归门禁

门禁应同时覆盖质量、效率、稳定性与安全:

维度示例门禁
RetrievalRecall@20不低于Baseline,NDCG@5提升至少2%
TaskRoot Cause Hit提升,95% CI下界高于0
LatencyP95增加不超过15%
Cost平均Token与Tool成本不超过预算
StabilityTimeout和Parser Failure不得上升
SafetyForbidden Action与ACL泄漏必须为0

安全门禁通常是硬约束,不能用平均质量收益抵消一次越权写操作。

16. LLM-as-a-Judge

LLM Judge适合开放文本,但需要:

  • 明确Rubric和分档示例;
  • 随机交换答案顺序,检查Position Bias;
  • 控制答案长度,观察Verbosity Bias;
  • Judge同时读取Gold和Evidence,而不只看措辞;
  • 与专家评分计算一致性;
  • 对关键安全Case人工复核;
  • 固定Judge模型、Prompt和版本。

Tool是否执行成功、参数是否越权、Citation是否存在等确定性判断,应优先使用程序和真实Trace,不应交由Judge推测。

17. RAG评测的技术栈表述

“RAG评测”不是单一软件,而是一组评测对象、指标和实验方法。技术栈中应将工具与方法分开,并且只写真实使用过的部分。

技术栈一行版

RAG Evaluation:Gold Evidence 数据集,Recall@K / MRR / NDCG,
Faithfulness 与 Citation Precision/Recall,Trace Replay,Paired Bootstrap

如果确实使用了评测框架,可以写:

RAG Evaluation:RAGAS / DeepEval,自定义 Gold Evidence 评测集,
Recall@K / MRR / NDCG,Faithfulness,Citation Accuracy,回归门禁

如果没有实际接入RAGAS或DeepEval,不应为了丰富技术栈而添加名称。自建评测Pipeline本身可以作为技术能力,但需要说明输入、指标和产物。

与检索技术栈合并

Retrieval & Evaluation:BM25 + Milvus + Neo4j,RRF融合与Cross-Encoder重排;
使用Recall@K、MRR、NDCG和Citation指标进行离线评测,
通过Trace Replay与配对Bootstrap执行版本回归。

这类写法比“Milvus / RAG / RAGAS”更有效,因为它表明候选如何产生、如何排序、如何判断改进是否成立。

项目描述版

构建基于Gold Answer与Gold Evidence的RAG评测集,覆盖精确词项、
语义改写、多跳关系、无答案和冲突证据场景;分层评估Retrieval、
Rerank、Context与Generation,使用Recall@5、MRR@5、NDCG@5、
Faithfulness和Citation Precision定位失败,并以配对Bootstrap和
质量/延迟/安全回归门禁比较Vector Only与Hybrid Retrieval方案。

面试口述版

我没有把RAG只测成一个最终答案分数,而是按Retrieval、Rerank、Context和Generation分层。评测集同时标Gold Answer和Gold Evidence:召回看Recall@K,首个正确结果的位置看MRR,多级相关性排序看NDCG;生成侧按Claim检查Faithfulness和Citation。Baseline与改进方案使用相同知识快照和模型,按Case配对比较并做Bootstrap置信区间,最后设置质量、P95、成本和安全门禁。

如果技术栈栏空间很短

优先保留最能证明方法闭环的内容:

RAG Eval:Gold Evidence、Recall@K / NDCG、Faithfulness / Citation、Trace Replay

MRR和NDCG不需要全部写入同一条技术栈描述;可以在正文或面试中展开公式与适用场景。技术栈条目用于说明能力范围,项目描述用于提供设计、实现和对比实验的证据。

18. 项目回答

我们将评测拆成Retrieval、Tool、Trajectory、Answer和System五层。检索同时报告Recall@K、MRR、MAP和NDCG;多证据任务以Recall和NDCG为主,MRR只衡量第一条相关证据的位置。Tool分别测选择、Schema、参数语义和真实执行。评测集标注Root Cause、Gold Evidence、允许与禁止动作,按Incident和时间分组切分。Baseline实验冻结模型、知识快照、Tool Fixture和预算,通过消融实验控制变量;对同一Case做配对Bootstrap或适当的配对检验,并设置质量、P95、成本和安全回归门禁。

19. 高频追问

  1. Precision@K、Recall@K和Hit Rate@K分别适合什么目标?
  2. MRR为什么不能衡量多证据覆盖?
  3. MAP与NDCG的差别是什么,何时需要分级相关性?
  4. Macro与Micro平均为什么会给出不同结论?
  5. 无Gold或多答案Case如何进入评测?
  6. Tool Schema通过为什么仍不能说明参数正确?
  7. 多条合法Agent轨迹怎样评测?
  8. 为什么Baseline与Variant应该按Case配对比较?
  9. 置信区间跨0意味着什么,又不意味着什么?
  10. 离线指标提升而端到端下降,应沿哪些Trace字段定位?