生产级 AI Agent 面试手册 ​

准确性 - 如何证明一个 Agent 真正“做对了”? ​


一、我们到底在评什么? ​

这是整个质量模块的第一性问题。

如果这个问题没有定义清楚,那么后面的:

  • 准确率
  • 大模型评分者(LLM-as-a-Judge)
  • 评测用例集(Eval Dataset)
  • 执行记录(Trace)
  • 回归检查(Regression,防止旧问题重现)
  • 线上评测(Online Eval)

都会变成一堆孤立技术点。

所以真正应该先问:

我们到底想证明 Agent 的什么?


1.1 普通大模型:主要看输入和输出 ​

传统大模型应用很多可以简化成:

text
用户输入
   ↓
大语言模型(LLM)
   ↓
最终回答

例如:

text
用户:法国首都是哪里?
模型:巴黎。

这种情况下:

对这类简单问答,最终回答正确,通常就代表任务完成。

所以传统模型评测天然容易围绕最终输出展开。


1.2 生产级 Agent 则是一条执行链 ​

真实 Agent 更接近:

text
用户目标
   ↓
理解用户意图(Intent)
   ↓
获取上下文(Context)
   ↓
制定计划(Planning)
   ↓
选择工具(Tool)
   ↓
生成工具参数(Tool Arguments)
   ↓
执行工具
   ↓
读取工具结果(Tool Result)
   ↓
根据结果继续决策
   ↓
可能再次规划 / 调用工具
   ↓
修改 Environment State / 外部环境状态
   ↓
判断任务是否完成
   ↓
生成最终回答(Final Response)

从运行机制看,则可以进一步抽象成:

text
目标(Goal)
   ↓
观察现状(Observe)
   ↓
判断并规划(Think & Plan)
   ↓
执行动作(Act)
   ↓
观察执行结果
   ↓
再次判断并规划
   ↓
再次执行动作
   ↓
...
   ↓
结束任务(Finish)

因此从工程角度,更准确的理解是:

Agent 是一个围绕目标不断进行感知、决策、行动、反馈和状态更新的非确定性执行系统。

这句话是整个 Quality 模块最重要的理论起点。


1.3 为什么这会彻底改变“正确”的定义? ​

看两个例子。

1.3.1 例子 A:答案正确,但 Agent 行为错误 ​

用户:

北京今天多少度?

Agent:

text
没有调用实时天气工具
↓
直接根据模型已有知识猜
↓
回答:31℃

当天真实温度恰好也是:

text
31℃

结果:

text
最终回答           ✅
工具选择           ❌
依据是否可靠       ❌
执行过程           ❌

如果只看最终回答:

text
通过

但这个 Agent 显然不能作为可靠的天气助手使用。

原因是:

它不是稳定地做对,而是碰巧做对。


1.3.2 例子 B:过程正确,但最终回答错误 ​

Agent:

text
调用天气接口         ✅
↓
返回 31℃              ✅
↓
正确解析数据           ✅
↓
最终回复写成 13℃       ❌

结果:

text
执行过程            ✅
工具执行            ✅
获取的数据          ✅
最终回答            ❌

所以两个例子放在一起,可以得到最核心的结论:

Agent 的结果正确性和过程正确性必须拆开评估。


1.4 Agent 质量的四个检查视角 ​

一个真正“做对”的 Agent,至少同时满足四个条件:

text
                     Agent 质量
                           │
          ┌────────────────┼────────────────┐
          │                │                │
       结果正确          执行路径合理       真实状态正确
          │                │                │
          └────────────────┼────────────────┘
                           │
                       关键约束满足

可以记成:

Agent 质量要同时看:结果(Outcome)、过程(Trajectory)、真实状态(State)和约束(Constraint)。

这里的加号只是帮助记忆,不是把四项分数简单相加。

比如:退款是否成功要看真实状态;越权操作即使完成任务,也不能算通过。


1.4.1 结果正确(Outcome) ​

用户最终想完成的任务:

到底有没有完成?


1.4.2 执行轨迹合理(Trajectory) ​

Agent 是否:

  • 理解正确
  • 规划正确
  • 选择正确工具
  • 参数正确
  • 正确理解中间结果
  • 没有明显 Loop
  • 没有进行无意义操作
  • 没有执行危险动作

1.4.3 真实状态正确(State) ​

Agent 说:

“已经修改成功。”

并不能证明任务成功。

真正应该验证的是:

数据库、订单、文件、Calendar、Git 仓库里的真实状态有没有正确变化。


1.4.4 满足约束(Constraint) ​

包括:

  • 业务规则
  • 权限
  • 审批
  • 风控
  • 合规
  • 关键安全边界

1.5 整个质量模块的主线 ​

后面的所有问题,本质上都在回答:

text
我们到底在评什么?
        ↓
Agent 为什么会错?
        ↓
第一次错在哪里?
        ↓
怎么观察全过程?
        ↓
怎么稳定地衡量?
        ↓
谁来评?
        ↓
用什么数据评?
        ↓
怎么证明评测自己可信?
        ↓
修改之后怎么防回退?
        ↓
线上新问题怎么重新进入评测?
        ↓
最终怎么形成持续质量闭环?

可以压缩成八个词:

定义 → 观察 → 诊断 → 衡量 → 校准 → 修复 → 回归 → 复利

这八个词,比死记 29 道题更重要。


二、定义 ​


2.1 什么叫一个 Agent“做对了”? ​

2.1.1 本质在考什么 ​

面试官真正想知道的不是:

你是否知道 Accuracy。

而是:

你有没有把 Agent Quality 理解成系统级正确性。


2.1.2 核心结论 ​

一个 Agent 真正成功,需要同时满足:

text
结果正确
+
执行过程合理
+
真实状态正确
+
关键约束满足

2.1.3 真实案例:Calendar Agent ​

用户:

把明天下午 3 点的产品评审改到 4 点。

Agent 最终回答:

已修改成功。

不能立刻判 PASS。

至少要验证:

2.1.3.1 结果:会议是否改对 ​

目标会议是否确实变成 16:00?

2.1.3.2 过程:有没有走对步骤 ​

Agent 有没有:

  • 找对 Calendar
  • 找对会议
  • 调对 Tool
  • 使用正确 eventId
  • 没有误操作其他会议
2.1.3.3 状态:后台是否真的变化 ​

Calendar 后台真实 event 是否真的变化?

2.1.3.4 约束:有没有越权或误操作 ​

Agent 是否:

  • 有权限修改
  • 修改的是正确用户的数据
  • 没有错误删除参与者

2.1.4 数据分析 Agent 例子 ​

用户:

查询昨天华东区域 GMV,并分析环比变化。

Agent 最终回答:

华东 GMV 1.2 亿,环比下降 8%。

不能只看最终回答。

至少检查:

text
表结构选对了吗?
GMV 指标口径对吗?
昨天的日期范围对吗?
华东区域筛选对吗?
SQL 查询正确吗?
环比计算正确吗?
最终数字能从 SQL 结果核对吗?
分析结论有依据吗?

这也是为什么数据 Agent 的质量很容易出现这样的问题:

答案看起来很专业,但业务口径从第一步就错了。


2.1.5 工程上怎么实现 ​

不要只记录一个笼统的成功标记:

text
success = true  # 只记录“成功”,无法说明哪一步做对

应该分别记录任务、执行路径、真实状态和约束是否正确。系统字段可以保留英文,但读者需要知道各字段的含义:

text
task_success             任务是否完成
trajectory_correctness   执行路径是否合理
state_correctness        真实状态是否正确
constraint_compliance    是否遵守关键约束

例如:

text
任务完成              通过
工具选择              通过
工具参数              通过
最终回答              通过
真实状态验证          通过
权限与策略约束        失败

总体结论              失败

2.1.6 一个非常重要的设计:Hard Gate ​

某些指标不能简单求平均。

例如:

text
回答质量:95
安全约束:未通过

金融、权限、删除、支付、隐私场景应该:

把关键约束作为 Hard Gate / 硬门禁。

也就是说:

text
回答质量分数很高
+
关键审批规则未通过

最终仍然不通过

2.1.7 面试官连续追问 ​

2.1.7.1 最终答案正确,但多调用了一次 Tool,算 Quality 吗? ​

看影响。

  • 多调用一次无害的只读工具:主要影响性能和成本
  • 使用错误数据源:Quality
  • 修改了额外状态:Quality
  • 调用了高风险工具:涉及安全和行为可控性
2.1.7.2 Quality 的各维度要不要统一做一个总分? ​

可以有总分方便排序和趋势分析,但:

不能让总分覆盖关键失败。

核心安全、状态、权限约束最好单独做 Gate。

2.1.7.3 最终用户满意,但是路径不合理,还需要管吗? ​

需要。

因为:

用户只看到这一次,而工程团队关注下一万次是否仍然稳定。


2.1.8 一句话记忆 ​

Agent 的“对”不是答案对,而是结果、过程、状态和约束一起对。


2.2 为什么 Agent 不能只评最终答案? ​

2.2.1 核心结论 ​

因为:

答案正确,不等于 Agent 整个执行过程都正确。

最终答案可能掩盖:

  • 错误 Tool
  • 错误数据源
  • 错误规划
  • Loop
  • 多余动作
  • 危险状态修改

Agent 即使最终答案正确,也可能走了一条脆弱路径;这类 Agent 下一次执行同样任务时可能直接失败。


2.2.2 这里存在一个 Trade-off ​

是不是意味着:

每个任务都应该完整检查整个 Trajectory?

也不是。

2.2.2.1 高风险任务 ​

例如:

text
身份校验 → 修改账户
审批 → 转账
退款资格 → 退款

需要检查关键轨迹。

2.2.2.2 开放任务 ​

例如:

  • Research
  • Data Analysis
  • 内容生成

通常更关注:

text
最终结果
+
关键约束
+
明显异常行为

而不应该把所有中间步骤锁死。


2.2.3 为什么不能过度约束? ​

因为会带来:

  • 合理路径被判错
  • Agent 探索空间下降
  • Eval 和当前实现强耦合
  • 换模型后大量误报
  • Grader 维护成本高

所以真正成熟的原则是:

对结果严格,对关键行为严格,对开放路径保持弹性。


2.3 Agent 到底会在哪里出错? ​

需要建立统一:

Failure Taxonomy / 失败分类体系。

完整执行链:

text
理解意图
 ↓
获取上下文
 ↓
制定计划
 ↓
选择工具
 ↓
生成工具参数
 ↓
执行工具
 ↓
理解工具结果
 ↓
修改真实状态
 ↓
生成最终回答

2.3.1 意图错误(Intent Error) ​

用户:

把刚才那场会议推迟一小时。

Agent:

把下午所有会议推迟。


2.3.2 上下文错误(Context Error) ​

例如:

  • RAG 找错文档
  • Memory 使用过期信息
  • Context 被截断
  • Schema 获取错误
  • 历史对话污染
  • 获取了错误用户的数据

2.3.3 规划错误(Planning Error) ​

正确:

text
查订单
→ 判断退款资格
→ 判断金额
→ 必要时审批
→ 退款

Agent:

text
直接退款

2.3.4 工具选错(Tool Selection Error) ​

例如:

需要公司内部 DB。

却使用:

text
search_web  # 搜索公开网页,找不到内部数据库中的权威数据

2.3.5 工具参数错误(Tool Argument Error) ​

text
get_order(order_id=123)  # 查询编号为 123 的订单

实际应该:

text
order_id=132  # 实际应查询编号为 132 的订单

2.3.6 工具执行错误(Tool Execution Error) ​

例如:

  • Timeout
  • HTTP 429
  • HTTP 500
  • 网络异常
  • 权限不足

这一类之后会在 Reliability 深入。


2.3.7 结果理解错误(Interpretation Error) ​

Tool:

text
Revenue = 12.3M  # 实际收入:1230 万

Agent:

text
Revenue = 123M  # 被误读成:1.23 亿

2.3.8 状态修改错误(State Error) ​

例如:

Tool 成功执行,但修改了错误订单。


2.3.9 最终表达错误(Final Response Error) ​

后台已经成功。

Agent:

操作失败。


2.3.10 约束违规(Constraint Error) ​

退款成功。

但:

10 万元退款本应人工审批。

仍然 FAIL。


2.3.11 企业中最好统一错误标签(Error Label) ​

例如:

text
INTENT_ERROR            意图理解错误
CONTEXT_ERROR           上下文错误
PLANNING_ERROR          规划错误
TOOL_SELECTION_ERROR    工具选错
TOOL_ARGUMENT_ERROR     工具参数错误
TOOL_EXECUTION_ERROR    工具执行错误
INTERPRETATION_ERROR    工具结果理解错误
STATE_ERROR             真实状态修改错误
FINAL_RESPONSE_ERROR    最终回答错误
CONSTRAINT_ERROR        关键约束违规

有了统一分类之后,才能统计:

text
35% 上下文错误
22% 工具参数错误
17% 规划错误
...

从:

“这个 Case 怎么这么奇怪?”

升级为:

当前最大系统性问题是 Context,应该优先投资源优化 Context。


2.4 小结:质量的第一性问题不是评测,而是成功定义 ​

必须先定义:

text
结果正确
执行路径合理
真实状态正确
关键约束满足

然后再看:

text
理解意图
获取上下文
制定计划
选择工具
生成参数
执行工具
理解结果
修改状态
生成回答

最重要的记忆点:

不要只问“最后为什么错”,要问“第一次从正确行为偏离发生在哪里”。


三、观察与诊断 ​


3.1 一个线上失败案例到底怎么定位? ​

3.1.1 核心结论 ​

不要:

text
最终回答出错
↓
直接修改提示词

应该:

读完整执行记录,找最早能看到的偏离,再验证根因。


3.1.2 Trace 是什么? ​

执行记录(Trace):

一次完整 Agent Task 的执行记录。

例如 Data Agent:

text
执行记录(Trace):data_analysis_123
│
├─ 用户意图
│
├─ 准备上下文
│
├─ 获取指标口径
│
├─ 获取表结构
│
├─ 制定计划
│
├─ 调用工具:execute_sql
│
├─ 分析结果
│
└─ 最终回答

每个节点(Span)可以记录输入输出、版本、工具调用、耗时和评测信息。下面是可能使用的字段名:

text
input           输入
output          输出
model_version   模型版本
prompt_version  提示词版本
tool_args       工具参数
tool_result     工具返回结果
latency         耗时
token_usage     Token 用量
exception       异常信息
eval_score      评测分数

3.1.3 First Divergence:第一处可见偏离 ​

例如:

text
用户问题                正常
↓
理解意图                正常
↓
制定计划                正常
↓
获取表结构              出错
↓
SQL 查询                出错
↓
数据库执行              成功
↓
分析结果                出错
↓
最终回答                出错

这里:

  • SQL 错
  • Analysis 错
  • Final Answer 也错

但:

最早可见的偏离在 Schema Retrieval(表结构检索)。

它是优先排查点。是否为根因,还要核对上游输入。


3.1.4 为什么这比“找到错误”更重要? ​

因为 Agent Failure 通常是:

Cascade Failure / 级联错误。

如果只修 SQL Prompt:

可能只是缓解了症状。

而不是根因。


3.1.5 规模化怎么做? ​

3.1.5.1 小规模 ​

人工读 Trace。

3.1.5.2 中规模 ​

关键 Run 节点部署 Evaluator:

text
检索结果评测
工具选择评测
工具参数评测
3.1.5.3 大规模 ​

加入:

text
自动识别失败类型
用大模型辅助评分
将相似失败聚类
按异常信号抽样

最后:

text
异常执行记录
↓
失败类型标签
↓
核实根因
↓
沉淀回归用例

3.1.6 一个高级工程问题:Root Cause 一定只有一个吗? ​

不一定。

可能存在:

3.1.6.1 主要根因 ​

第一主要根因。

3.1.6.2 Contributing Factors ​

次要促成因素。

例如:

text
主要问题:
表结构检索错

次要因素:
SQL Agent 没有做字段合法性校验

成熟 RCA 不应该简单变成:

“只能选一个标签”。


3.1.7 面试官连续追问 ​

3.1.7.1 First Divergence 怎么自动判断? ​

可以结合:

  • 节点级规则 Evaluator
  • 大模型执行记录评分者
  • Expected Constraint
  • 与正常 Trace 的差异分析

但高风险问题的根因仍建议由人工复核。

3.1.7.2 如果 Planning 本来就存在多条合法路径怎么办? ​

不要比较是否和“标准路径”一模一样。

比较:

是否违反关键约束,以及是否最终持续向目标推进。

3.1.7.3 为什么不直接让一个强模型读整个 Trace 给 Root Cause? ​

可以做辅助,但不能完全依赖。

因为:

  • Trace 很长
  • 判断可能不稳定
  • 关键结构化错误代码更容易发现
  • Judge 自己也会 hallucinate

3.2 为什么评测要分步骤、完整任务和多轮会话? ​

因为 Agent 错误发生在不同粒度。

当前 LangChain 公开实践就明确使用:

  • 单次执行(Run):一次具体动作,例如调用工具
  • 完整任务轨迹(Trace):把这次任务的各步串起来
  • 多轮会话(Thread):把前后几轮交互串起来

三层 Agent 评测。

这里先按评测范围记:

Run 看具体动作,Trace 看完整任务,Thread 看前后几轮是否一致。

一个 Run 可以是工具调用,也可以包含子操作;它不固定等于一步。


3.2.1 Run:看某次执行 ​

例如:

当前是否应该调用 get_order?

适合:

  • 工具选择
  • 参数生成
  • 信息检索
  • 任务路由

回答:

哪里错?


3.2.2 Trace:完整任务 ​

评:

text
最终回答
+
执行过程
+
真实状态变化

回答:

这次任务成功没?


3.2.3 Thread:多轮任务 ​

例如:

text
用户:推荐三个上海酒店。
用户:不要浦东。
用户:第二家有健身房吗?

需要评:

  • 上下文
  • 指代
  • 记忆是否正确
  • 用户偏好
  • 长期任务状态

回答:

多轮目标成功没?


3.2.4 一个非常实际的优化 ​

如果只是测试:

Tool Selection。

没有必要每次跑完整 Agent。

直接评测这一步的执行(Run-level Eval):

  • 更快
  • 更便宜
  • 更容易定位问题
  • 更适合 CI 高频运行

这是一种重要的:

Eval 分层与成本控制。


3.3 工具调用到底怎么评? ​

至少四层:

text
这一步需要调用工具吗?
↓
应该选择哪个工具?
↓
传给工具的参数对吗?
↓
工具结果用对了吗?

3.3.1 第一层:该不该调用工具(Should Call) ​

例如:

text
1 + 1 = ?

不需要 Search。

所以 Tool Eval 不只测:

会不会调。

还要测:

知不知道什么时候不应该调。


3.3.2 第二层:选哪个工具(Tool Selection) ​

text
应该:get_order
实际:search_web

3.3.3 第三层:参数对不对(Tool Arguments) ​

重点关注:

  • ID
  • 时间
  • 金额
  • 用户
  • SQL Filter
  • Region
  • File Path
  • Permission Scope

3.3.4 第四层:有没有正确使用工具结果(Result Consumption) ​

Tool:

text
status = refunded  (订单状态:已退款)

Agent:

尚未退款。

仍然 FAIL。


3.3.5 工程上怎么评? ​

3.3.5.1 确定性问题 ​
text
assert tool.name == "get_order"    # 选的是查询订单工具
assert args.order_id == "132"      # 查询的是目标订单
3.3.5.2 State ​
text
assert db.order.status == "refunded"  # 订单在数据库中确实已退款
3.3.5.3 开放语义 ​

才使用:

LLM Judge。


3.3.6 三种评分方式的取舍 ​

评测方式 优势 问题 典型应用
Code / Rule 稳定、便宜、可复现 只能覆盖可规则化问题 Tool、SQL、状态、格式
LLM Judge 能理解语义和开放问题 随机、偏差、成本 报告、分析、回答质量
Human 质量高、能解决争议 贵、慢 Gold Set、高风险 Case

一个非常重要的原则:

确定性问题优先使用确定性 Evaluator。


3.4 执行过程到底怎么评? ​

不能机械要求:

text
A → B → C → D

因为 Agent 可能存在多个合理路径。


3.4.1 硬约束(Hard Constraint) ​

例如:

text
身份验证
↓
修改账户

必须严格。


3.4.2 软约束(Soft Constraint) ​

Research Agent:

text
先搜索 A,再搜索 B

或者:

text
先搜索 B,再搜索 A

都可能合理。


3.4.3 按风险决定评测重点 ​

按风险决定轨迹评测严格程度。

3.4.3.1 金融 / 权限 / 删除 ​

强 Constraint。

3.4.3.2 Research / 数据分析 ​

更多关注:

text
最终结果
+
关键约束
+
异常行为

3.4.4 面试官可能追问 ​

3.4.4.1 Q:什么情况下必须验证完整路径? ​

通常当:

步骤顺序本身就是业务正确性或安全性的一部分。

例如:

  • 审批
  • 身份认证
  • 权限提升
  • 支付
  • 删除
3.4.4.2 Q:如果 Agent 找到了比标准答案更好的路径呢? ​

如果路径:

  • 满足用户目标
  • 满足业务约束
  • 没有安全风险

就不应该因为“和预设路径不同”直接 Fail。

Anthropic 也特别指出,高能力 Agent 可能找到评测设计者未预期但实际上更优的解决路径,所以过度僵硬的静态 Eval 会误判 Agent。


3.5 小结:可观测性是质量的基础设施 ​

没有 Trace:

只能知道“错了”。

有 Trace:

才能知道“为什么错”。

因此:

text
执行记录
↓
找到最早可见的偏离
↓
核实根因
↓
归入失败类型
↓
修复

虽然 Observability 是独立的大模块,但对于 Quality:

完整的执行记录,是分析根因的前提。


四、衡量 ​


4.1 大模型评分者怎么真正落地? ​

输入通常:

text
任务
+
Agent 输出 / 执行记录
+
必要上下文
+
评分规则

输出:

text
通过 / 不通过

或者:

text
分数
+
理由
+
失败类别

4.1.1 评分规则是整个判断的核心 ​

差:

这个回答好吗?

好:

text
1. 是否完成用户要求?
2. 是否遗漏关键约束?
3. 是否存在事实错误?
4. 是否使用正确数据?
5. 是否存在无依据推断?

4.1.2 为什么推荐多维评分? ​

不要只返回:

text
88 分

而是:

text
任务完成        5/5
事实准确        4/5
完整性          3/5
结论有依据      5/5
约束遵守        5/5

因为:

Eval 的价值首先是诊断,而不是排名。


4.1.3 一个生产实践建议:输出结构化理由 ​

Judge 最好不要只:

text
通过

可以输出结构化字段,同时让读者看懂每个字段表示什么:

text
score         评分
failure_type  失败类型
evidence      判断依据
reason        判定理由

这样后面可以:

  • 分析失败类型和频率
  • 自动聚类
  • 找高频问题
  • 辅助定位根因

4.2 评测用例集到底怎么建设? ​

推荐数据来源:

text
产品需求
+
业务专家
+
合成用例(Synthetic Cases)
+
线上真实流量(Production Traffic)
+
历史失败案例(Historical Bad Cases)

Anthropic 当前建议,Agent 开发早期可以先从大约几十个真实任务和失败案例开始,而不是等一个巨大测试集完全建好再开始评测。


4.2.1 评测集至少包含 ​

text
正常路径(Happy Path)
边界情况(Edge Case)
反例(Negative Case)
对抗性输入(Adversarial Case)
线上失败案例(Production Bad Case)
回归用例(Regression Case)

4.2.2 推荐企业建设流程 ​

4.2.2.1 Phase 1:起步 ​

产品 + 业务 + 研发:

整理 30~50 个核心 Case。

覆盖主流程。

4.2.2.2 Phase 2:生产接入 ​

线上 Bad Case 自动进入:

Candidate Pool / 候选池。

4.2.2.3 Phase 3:人工 Review ​

判断:

text
是不是 Agent 问题?
根因是什么?
未来是否值得防止再次发生?
成功标准是否清晰?
4.2.2.4 Phase 4:加入 Regression ​

高价值 Case 转成:

text
回归用例
4.2.2.5 Phase 5:持续治理 ​

定期做:

  • 流量分布校准
  • 长尾补充
  • 难度升级
  • 重复 Case 合并
  • 过时业务 Case 清理

Microsoft Foundry 目前已支持版本化 Evaluation Dataset,以及从真实生产 Trace 创建 Evaluation Dataset;生产 Trace 与合成数据被视为互补来源。


4.3 Agent 有随机性,准确率怎么评? ​

Agent 同一个 Case:

text
第一次通过
第二次失败
第三次通过

是正常现象。

所以一次 PASS:

不能证明稳定。


4.3.1 多次运行(Multiple Trials) ​

例如:

text
任务 A 独立运行 10 次

通过 8 次
失败 2 次

Success Rate:

text
80%

Anthropic 当前也把一次独立执行定义为 Trial,并明确因为模型输出存在波动,所以一个 Task 应该通过多个 Trial 获得更稳定的评估。


4.3.2 Pass@1 ​

第一次成功。

对于 Production:

最重要。


4.3.3 Pass@k ​

k 次里至少一次成功。

适合:

  • Benchmark
  • 搜索型推理
  • 多 Sampling 系统

但生产不能满足于:

“多试几次一般能做对。”


4.3.4 进一步看稳定性(Stability) ​

例如:

text
Agent A(执行步数较稳定):
分别用了 5 / 5 / 6 / 5 / 6 步

Agent B(执行步数波动较大):
分别用了 3 / 28 / 4 / 40 / 6 步

成功率可能一样。

但 B 明显:

更不稳定。

所以还可以统计:

  • Step 方差
  • Tool Count 方差
  • Token 方差
  • Latency 方差
  • Failure Type 方差

这里开始与:

Reliability

发生交叉。


4.4 能力评测和回归评测有什么区别? ​

这是非常值得记住的一组。

4.4.1 能力评测(Capability Eval) ​

回答:

Agent 能做到什么难度?

能力评测要保留有挑战的题。

如果全部 PASS:

就测不出能力上限。

用于:

  • 新模型比较
  • 新能力
  • 新工具
  • 新规划能力
  • 架构试验

4.4.2 回归评测(Regression Eval) ​

回答:

已经会的东西现在还会不会?

目标应该接近:

text
全部通过

4.4.3 一句话 ​

Capability 找上限,Regression 守底线。

这是 Anthropic 当前公开 Agent Eval 方法里明确区分的两个 Suite 目标。


4.5 线上质量改进闭环怎么建设? ​

这是整个 Quality 模块真正的工程终点。

text
线上运行
↓
记录执行过程
↓
发现失败案例
↓
核实根因
↓
补充评测用例集
↓
修复问题
↓
离线评测
↓
回归检查
↓
小流量验证
↓
再进入线上运行
↺

4.5.1 注意:Fix 并不等于改 Prompt ​

根据根因,真正需要修的可能是:

text
上下文材料与检索(Context / RAG)
提示词(Prompt)
工具说明与参数定义(Tool Description / Schema)
规划逻辑与工作流(Planner / Workflow)
模型选择(Model)
业务规则
数据源

例如:

4.5.1.1 Schema Retrieval 错 ​

不应该:

继续强化最终 Answer Prompt。

4.5.1.2 Tool 参数常错 ​

可能应该:

  • 修改 Tool Schema
  • 增加 enum
  • 增加 argument validation
  • 缩小 Tool 可选范围
4.5.1.3 Long-horizon 状态丢失 ​

可能应该:

  • Checkpoint
  • Summary
  • External State
  • Context Compression

4.6 小结:真正产生复利的不是提示词,而是质量基础设施 ​

长期积累的是:

text
执行记录
+
失败案例库
+
评测用例集
+
评分方法
+
回归检查流程

模型会换。

Prompt 会换。

Tool 会换。

Workflow 会换。

但:

什么叫正确,以及历史上犯过哪些错误,必须长期保存。


五、校准 ​


5.1 没有唯一标准答案怎么评? ​

很多 Agent 任务没有唯一答案。

例如:

分析这家公司未来最大的三个经营风险。

这时使用:

Rubric-based Evaluation / 基于评分规则的评测。

例如:

text
关键风险覆盖      30%
事实准确          25%
证据质量          20%
逻辑              15%
建议可执行性      10%

核心:

没有唯一答案,不等于没有明确评价标准。


5.2 怎么证明模型评分者自己可靠? ​

不能因为:

Judge 模型比 Agent 模型更强。

就默认:

Judge 一定正确。


5.2.1 校准评分者(Evaluator Calibration) ​

建立:

text
人工标注的标准样本集(Human Gold Set)

也就是:

由领域专家人工高质量标注的测试集。

再比较:

text
领域专家的人工判断
对照
大模型评分者的判断

重点统计:

  • 人工与评分者的一致率
  • 错误地判为通过的比例
  • 错误地判为失败的比例
  • 各类失败的识别准确度

5.2.2 最危险的是把严重错误误判为通过 ​

例如:

text
越权操作
→ 评分者误判为通过

这比:

text
一个普通好回答被误判失败

风险大得多。

所以不同错误类型:

可以有不同容错标准。


5.3 评测集为什么不能只有人工编写的用例? ​

人工 Case 经常:

text
信息完整
语言规范
意图单一
参数明确

生产环境却是:

text
口语
错字
省略
指代
冲突
长上下文
边界业务
奇怪输入

所以:

生产环境的执行记录,是评测数据的重要来源之一。


5.4 什么是评测集过拟合? ​

如果团队有固定 500 个 Case:

text
不断修改提示词
↓
评测通过率 80%
↓
提高到 90%
↓
提高到 98%

但线上实际效果没提升:

很可能对评测集过拟合。


5.4.1 怎么避免? ​

拆:

text
开发集(Development Set)
回归集(Regression Set)
保留测试集(Holdout Set)
5.4.1.1 开发集 ​

日常调试。

5.4.1.2 回归集 ​

保护已修复能力。

5.4.1.3 留出测试集 ​

不参与日常针对性调优,用于检查真正泛化。


5.4.2 面试官可能追问 ​

5.4.2.1 Q:那 Production Bad Case 加入 Dataset 后不还是会被针对优化吗? ​

是的。

所以:

旧的线上案例更适合作为回归用例;

同时仍然需要:

新的线上案例加留出测试集。

检测泛化。


5.5 什么是评测数据泄漏? ​

如果 Eval Case 或答案通过:

  • Prompt
  • Few-shot
  • RAG
  • Memory
  • Fine-tuning
  • Historical Trace

进入 Agent 的可访问范围,

那么:

Agent 可能提前见过答案。


5.5.1 生产系统尤其容易出现隐性泄漏 ​

例如:

text
线上失败案例
↓
进入回归用例集
↓
同时原始执行记录被回灌知识库
↓
Agent 可以直接检索到原用例

这时 Regression Score 可能虚高。

所以:

评测集与 Agent 可访问的数据必须做隔离审计。


5.6 评测用例本身设计错了怎么办? ​

这是非常真实的问题。

如果:

text
Agent 评测得分 = 42%

不能立刻:

归因 Agent。

Anthropic 当前就特别强调:

  • Task 可能模糊
  • Grader 可能不公平
  • Environment 可能不稳定
  • Harness 可能有 Bug

因此评测设计本身必须 Review。


5.6.1 一个有效做法:先做出参考解(Reference Solution) ​

对于可确定性验证的 Task:

先人工做出至少一个已知正确解。

如果:

连参考解都无法稳定通过 Grader,

那就是:

Eval 本身有问题。


5.7 为什么必须有正反样本? ​

例如搜索工具评测。

如果题目全部是:

text
今天天气
最新股价
最新新闻

Agent 学会:

所有问题都 Search。

仍然可能:

text
100%

因此必须:

text
应该搜索的题
+
不应该搜索的题

Anthropic 就公开提到,他们的 Web Search Eval 同时覆盖“应该搜索”和“不应该搜索”,否则容易把 Agent 优化成过度触发或触发不足。


5.8 评测只能判通过或失败吗? ​

复杂 Agent 任务建议:

Partial Credit / 部分得分。

例如:

text
订单识别        ✅
资格判断        ✅
审批判断        ✅
执行退款        ❌
用户通知        ❌

简单:

text
失败

会丢失大量信息。


5.8.1 更好的做法 ​

text
订单识别        20%
资格判断        20%
审批判断        20%
退款执行        30%
最终通知        10%

不过:

高风险约束仍可单独设为一票否决项。

也就是说:

部分得分和硬性门槛可以同时存在。


5.9 怎么防止 Agent 钻评测漏洞? ​

例如 Grader 只检查:

数据库里有没有退款记录。

Agent 可能直接:

修改测试数据库。

而没有走真实退款流程。

这种问题属于:

  • Reward Hacking
  • Specification Gaming
  • Grader Bypass

5.9.1 本质 ​

Agent 优化的是:

“怎么让 Grader 给 PASS”

而不是:

“怎么正确完成业务目标”。


5.9.2 怎么解决? ​

需要联合验证:

text
最终结果
+
关键执行过程
+
真实状态
+
关键约束

这其实再次验证了开头的 Quality 公式。


5.10 评测分数什么时候在统计上可信? ​

例如:

text
旧版 Agent:20 题通过 16 题
新版 Agent:20 题通过 18 题

不能直接说:

新版显著提升。

还应该考虑:

  • Sample Size / 样本量
  • Multiple Trials
  • Confidence Interval / 置信区间
  • Effect Size / 提升幅度
  • Traffic Distribution
  • Failure Distribution

5.10.1 一个重要认知 ​

Agent 从:

text
50% → 70%

通常容易确认。

但:

text
95% → 96%

想证明真的提升:

往往需要更多 Case 和 Trial。


5.11 小结:评测本身也是一套生产软件系统 ​

因此要版本化:

text
评测用例集版本
Agent 版本
提示词版本
模型版本
工具版本
评分者版本
评分规则版本
执行外壳版本
业务代码版本

否则:

text
上周:94%
今天:91%

你甚至不知道:

到底是谁变了。

成熟 Eval 系统至少需要:

评分校准、版本记录、数据隔离、可复现和统计分析。


六、复杂 Agent ​


6.1 长程 Agent 怎么评? ​

长任务可能:

text
30 步
100 步
几十分钟
甚至数小时

只看 Final Answer:

太晚,也太粗。


6.1.1 四层评测 ​

6.1.1.1 Milestone ​

关键阶段有没有完成?

6.1.1.2 Progress ​

是否持续向目标靠近?

6.1.1.3 State Consistency ​

长期状态是否前后一致?

6.1.1.4 Outcome ​

最终结果正确吗?


6.1.2 Coding Agent 示例 ​

用户:

修复这个项目中的登录 Bug,并保证测试通过。

Agent:

text
理解 Issue
↓
查看代码
↓
修改
↓
运行测试
↓
发现失败
↓
继续修改
↓
再次测试
↓
提交最终结果

可以在 Milestone 检查:

text
能复现 Bug 吗?
修改是否落在正确模块?
测试通过了吗?
有没有破坏已有测试?

6.1.3 检查点评测(Checkpoint Eval) ​

长任务可以:

text
检查点 1 → 评测
检查点 2 → 评测
检查点 3 → 评测
最终结果 → 评测

目的是:

尽早发现偏离,而不是任务结束后才知道全部重做。


6.2 多智能体任务怎么评? ​

例如:

text
协调 Agent
↓
规划 Agent
↓
SQL Agent(负责查询数据)
↓
分析 Agent
↓
报告 Agent

必须至少两层。


6.2.1 系统级评测(System-level Eval) ​

整个系统:

是否完成用户任务?


6.2.2 单个 Agent 评测(Agent-level Eval) ​

text
协调 Agent → 分工是否正确
规划 Agent → 计划是否合理
SQL Agent → 查询是否正确
分析 Agent → 分析是否正确
报告 Agent → 最终报告是否正确

6.2.3 真实场景 ​

假设最终 Data Report 错误。

分析 Trace:

text
协调 Agent 分工正确
规划 Agent 计划正确
SQL Agent 查询错误
分析 Agent 正确分析了错误数据
报告 Agent 正确总结了错误分析

那么:

整个系统仍然失败。

但真正应该修:

SQL Agent。

这就是 Multi-Agent Eval 最大价值之一:

Responsibility Attribution / 责任归因。


6.3 不同类型 Agent 应该使用同一种评测吗? ​

底层理论一样:

text
结果
执行过程
真实状态
关键约束

但是具体 Grader 应该随着 Agent 类型变化。


6.3.1 Coding Agent ​

优先:

text
单元测试
集成测试
构建
代码规范检查(Lint)
类型检查
安全扫描

原则:

能跑程序验证,就不要让 LLM 只靠“读代码感觉”。


6.3.2 Data Agent ​

重点:

text
数据表结构选择是否正确
指标口径是否正确
SQL 查询是否正确
计算是否正确
结论是否有数据支撑
洞察是否有用

6.3.3 Research Agent ​

重点:

text
事实是否正确
来源是否可靠
关键信息是否覆盖
引用是否准确
结论是否有来源支撑
综合分析是否合理

6.3.4 客服 Agent(Customer Support Agent) ​

重点:

text
真实问题解决
订单真实状态
政策或业务规则是否遵守
转人工正确性
用户重试
会话体验

6.3.5 Computer-use Agent ​

重点:

真实环境是否发生目标状态变化。


6.4 小结:验证真实产物,比验证 Agent 自述更可靠 ​

记住一个很重要的工程原则:

能验证实际产物或环境状态,就不要只验证 Agent 的自然语言声明。

例如:

text
编程 Agent → 运行测试
日历 Agent → 查询日历
数据 Agent → 查询数据库和 SQL 结果
浏览器 Agent → 验证页面状态
文件 Agent → 检查文件

七、线上质量 ​


7.1 离线与线上评测怎么闭环? ​

7.1.1 离线评测(Offline Eval) ​

发布之前:

新版本是不是更好?


7.1.2 线上评测(Online Eval) ​

真实生产:

用户真实环境中表现怎么样?

Microsoft Foundry 当前既支持对版本化 Dataset 做评测,也支持直接评已有 Response / Trace,而不一定需要重新运行 Agent。


7.1.3 线上质量信号(Online Quality Signal) ​

不仅是 Judge Score。

还包括:

text
用户重试
重新表达
用户纠正
人工接管
取消任务
中途放弃
异常步骤
工具报错

这些是:

Implicit Feedback / 隐式反馈。


7.1.4 完整闭环 ​

text
离线评测
↓
质量门槛
↓
小流量发布
↓
生产环境
↓
线上评测
↓
失败案例
↓
评测集
↓
离线评测
↺

7.2 为什么换模型必须重新评测? ​

因为 Agent 中 Model 可能负责:

text
理解用户意图
制定计划
决定由谁处理
选择工具
生成工具参数
解释工具结果
决定何时停止

换模型不是简单:

换文本生成 API。

而是:

更换 Agent 的核心决策引擎。

因此:

text
更换模型
=
Agent 系统的决策行为发生变化

必须 Regression。


7.3 Agent 质量最终怎么对齐业务指标? ​

技术指标:

text
准确率 = 96%

不等于:

用户满意。


7.3.1 三层指标体系 ​

7.3.1.1 Model Metric ​
text
工具选择与调用正确率
回答是否有依据
大模型评分者给出的分数
7.3.1.2 Agent Metric ​
text
任务成功率
首次完成率
重试率
人工接管率
执行步数
7.3.1.3 Business Metric ​

客服:

text
问题解决率
客户满意度(CSAT)
人工成本

Data Agent:

text
分析完成率
结果采纳率
人工修正率

Coding Agent:

text
持续集成检查通过率(CI Pass Rate)
代码变更被接受率(PR Acceptance)
人工修改比例

7.3.2 真正重要的是建立因果链 ​

text
工具调用正确率提高
      ↓
任务成功率真的提高了吗?
      ↓
业务结果真的改善了吗?

如果没有:

很可能优化错指标。


7.3.3 面试官可能追问 ​

7.3.3.1 Q:如果离线评测分数涨了,但业务关键指标不涨怎么办? ​

首先检查:

  • 评测集是否代表真实流量
  • 评测指标是否和业务成功相关
  • 是否出现数据分布变化
  • 用户体验问题是不是评测没有覆盖
  • 成本或延迟是否抵消了收益

7.4 怎样从海量线上执行记录中发现失败案例? ​

如果一天:

text
100 万条执行记录(Trace)

不可能人工逐条看。


7.4.1 Random Sampling ​

随机看真实总体。


7.4.2 Trigger Sampling ​

重点抓:

text
工具报错
用户重试
负反馈
人工接管
令牌消耗异常高
异常步骤
延迟过高
重复循环

7.4.3 Online Judge ​

自动判断:

text
任务是否完成
回答是否有依据
是否遵守政策和业务规则

7.4.4 Failure Clustering ​

例如:

text
32%:数据表结构选择错误
25%:工具参数错误
18%:上下文丢失
12%:规划错误
...

然后优先解决:

高频、系统性的根因。

Microsoft Foundry 当前公开的 Trace → Dataset 流程,也不是只随机采样,而是通过智能采样从生产 Trace 中选取具有代表性的高价值样本。


7.5 小结:Quality 的终点不是测试,而是“让失败产生复利” ​

最终:

text
生产环境
   ↓
执行记录
   ↓
失败案例
   ↓
根因
   ↓
评测集
   ↓
评测
   ↓
修复
   ↓
回归验证
   ↓
小流量发布
   ↓
生产环境
   ↺

成熟团队不是:

今天把 Case A 修掉。

而是:

把 Case A 变成以后不会轻易再次发生的质量资产。


八、工程模型 ​

8.1 Definition:定义 ​

text
结果
执行过程
真实状态
关键约束

8.2 Observation:观察 ​

text
执行记录(Trace)

8.3 Diagnosis:诊断 ​

text
最早偏离点
根因
失败类型分类

8.4 Measurement:衡量 ​

text
单次执行(Run)
完整任务轨迹(Trace)
多轮会话(Thread)

以及:

text
规则或代码检查
大模型评分者
人工复核

8.5 Calibration:校准 ​

text
评分标准
人工标注的基准样本
留出测试集
数据泄漏检查
统计分析
评测运行环境

8.6 Fix:修复 ​

根据 Root Cause:

text
提示词
上下文
检索增强(RAG)
工具
规划
工作流程
模型

关键:

不是所有失败案例都靠改提示词解决。

8.7 Regression:防回退 ​

text
回归评测
持续集成与发布流水线的质量门槛

8.8 Compounding:复利 ​

text
线上失败
↓
回归用例资产

九、复习与面试表达 ​

9.1 Quality 模块最本质的 10 个技术点 ​

9.1.1 Agent Quality 是系统级正确性 ​

结果、执行过程、真实状态和关键约束。

9.1.2 Agent 是非确定性执行系统 ​

单次成功不代表稳定成功。

9.1.3 Error 会级联传播 ​

找最早偏离点。

9.1.4 Observability 是 Quality 前置能力 ​

没有完整执行记录,就很难可靠地定位根因。

9.1.5 Eval 必须匹配执行层级 ​

按单次执行、执行步骤和多轮会话分别评测。

9.1.6 Evaluator 按任务性质选择 ​

能用规则或代码验证的先自动检查,开放性判断交给大模型评分者,争议与高风险样本由人工复核。

9.1.7 真实状态比 Agent 自述可信 ​

能验证真实产物,就验证真实产物。

9.1.8 Dataset 必须不断吸收 Production ​

让评测集持续吸收线上失败案例。

9.1.9 Eval 自己也需要工程可靠性 ​

评分者校准、版本记录、测试集隔离、可复现和统计分析都要可靠。

9.1.10 Quality 最终必须回到 Business ​

基准测试只是中间指标,用户任务成功才是终点。


9.2 面试中的五条高价值追问链 ​

9.2.1 追问链一:什么叫 Agent 做对? ​

text
最终答案对就算成功吗?
↓
不算,为什么?
↓
怎么定义正确性?
↓
执行过程是否必须固定?
↓
什么场景必须严格?
↓
如果过程违规但结果正确怎么办?

核心考察:

对 Agent 质量的基本定义。


9.2.2 追问链二:线上答案错了怎么排查? ​

text
看执行记录
↓
执行记录要看什么?
↓
怎么找根因?
↓
为什么不是看最后一个错误?
↓
怎样自动找到最早偏离点?
↓
海量执行记录怎么规模化分析?

核心考察:

生产诊断能力。


9.2.3 追问链三:LLM Judge 能不能直接解决所有 Eval? ​

text
为什么需要大模型评分者?
↓
什么时候不该用它?
↓
评分者自己会错怎么办?
↓
怎么校准?
↓
人工标注的基准样本从哪来?
↓
怎样处理严重错误被误判为通过?

核心考察:

评测基础设施的可靠性。


9.2.4 追问链四:Eval Dataset 怎么建设? ​

text
先写多少评测用例?
↓
用例从哪来?
↓
为什么要加入真实线上数据?
↓
怎么防止对评测集过拟合?
↓
怎么防止评测数据泄漏?
↓
为什么还需要留出测试集?

核心考察:

是否真正建设过长期质量体系。


9.2.5 追问链五:Agent 上线后怎么持续提升? ​

text
离线评测
↓
小流量发布
↓
线上评测
↓
挖掘失败案例
↓
定位根因
↓
沉淀回归用例
↓
再发布

继续追问:

如何证明离线指标提升,真的改善了业务关键指标(KPI)?

核心考察:

是否从“模型优化”升级到“业务质量工程”。


9.3 29 道题最终分组 ​

9.3.1 第一组:什么叫做对? ​

  1. 什么叫一个 Agent 做对了?
  2. 为什么不能只评最终答案?
  3. Agent 会在哪里出错?

9.3.2 第二组:出了问题怎么定位? ​

  1. 线上失败案例怎么定位?
  2. 为什么要分步骤、完整任务和多轮会话评测?
  3. 工具调用怎么评?
  4. 执行过程怎么评?

9.3.3 第三组:怎么建立评测? ​

  1. 大模型评分者怎么落地?
  2. 评测用例集怎么建设?
  3. Agent 随机性怎么评?
  4. 能力评测和回归评测有什么区别?
  5. 线上质量改进闭环怎么建设?

9.3.4 第四组:怎么保证评测自己可信? ​

  1. 没有唯一标准答案怎么评?
  2. 怎么证明评分者可靠?
  3. 评测集为什么不能只有人工用例?
  4. 怎么避免评测集过拟合?
  5. 怎么避免评测数据泄漏?
  6. 评测用例本身有问题怎么办?
  7. 为什么必须有正反样本?
  8. 为什么复杂任务需要部分得分?
  9. 怎么防止 Agent 钻评测漏洞?
  10. 怎么判断评测分数在统计上可信?

9.3.5 第五组:复杂 Agent 怎么评? ​

  1. 长程 Agent 怎么评?
  2. 多智能体任务怎么评?
  3. 不同类型 Agent 如何选择评分方式?

9.3.6 第六组:生产环境怎么做? ​

  1. 离线与线上评测怎么闭环?
  2. 为什么换模型必须重新评测?
  3. Agent 质量怎么对齐业务指标?
  4. 怎样从海量线上记录中发现失败案例?

9.4 面试优先级 ​

9.4.1 P0:必须掌握 ​

1~12。

9.4.2 P1:高级 Agent 工程师重点 ​

13、14、16、18、19、20、21、22、23、29。

9.4.3 P2:资深 / Agent Platform / 架构岗位 ​

24、25、26、27、28。


9.5 2~3 分钟面试标准回答 ​

如果面试官问:

你怎么理解生产级 Agent 的 Quality?

可以回答:

生产级 Agent 的质量不能只看最终回答。它会获取上下文、规划、调用工具,还可能修改外部状态;其中一步出错,答案也可能碰巧正确。

我会从四个方面判断:任务有没有完成,执行过程是否合理,数据库或文件中的真实状态是否正确,权限、审批等关键约束有没有遵守。高风险约束要单独判断,不能用总分抵消。

排查线上失败时,我先看完整执行记录,把输入、工具调用及结果、状态变化和相关版本串起来。找到最早能观察到的偏离,再核对上游输入,验证根因,而不是看到错误就直接改提示词。

评测范围要覆盖关键操作、完整任务和多轮对话。能用规则或真实状态验证的,先用确定性检查;开放语义再用大模型评分;高风险或有争议的样本交给人工复核。模型评分者本身也要用人工标注样本校准。

评测集既要有正常路径,也要有边界情况、反例、对抗输入和真实线上失败。有价值的失败要沉淀成回归用例。

模型、提示词、工具或流程发生变化后,先跑离线与回归评测,通过质量门槛再小流量上线。上线后继续看执行记录和用户行为,发现新的问题。

所以成熟的 Agent 质量工作,是建立这样一个循环:

定义 → 观察 → 诊断 → 评测 → 校准 → 修复 → 回归 → 线上再观察

这样一套能够持续复利的质量工程闭环。


9.6 最终记忆模型 ​

9.6.1 八个词 ​

定义、观察、诊断、衡量、校准、修复、回归、复利。

9.6.2 六个核心技术词 ​

结果(Outcome)、过程(Trajectory)、状态(State)、执行记录(Trace)、评测(Eval)、回归验证(Regression)。

9.6.3 一句话 ​

生产级 Agent Quality 的本质,是能够明确什么叫做对、看见为什么会错、可靠地衡量错误、阻止旧问题复发,并让每一次线上失败都转化成下一版 Agent 的质量资产。