Agent 评测与生产化
第 28 课:Agent 评测与生产化
这是第四部分(Agent 工程)的最后一课。前面我们把一个 Agent"造出来、接上工具、记住知识、会规划、能训练"——但这一切都还不是交付。怎么证明它真能上生产?这一课把"跑分"与"可用"分开,用可靠性指标(pass^k)替代单次最好成绩,把评测从"看结果"推进到"看轨迹",再补齐安全、成本与发布门禁——用一套可执行的检查,回答"它到底能不能上"。
② 把评测分成"结果评测"与"过程评测",定位一条失败轨迹是从哪一步开始歪的
③ 用最小权限、沙箱、发布门禁与四线监控,回答"这个 Agent 能不能上生产"
上一课我们把"会工具、会规划"训进了权重。现在到了最后一关:榜单分数高,为什么上线还是翻车?
因为榜单测的是"在这套任务、这个环境、这次采样下能不能答对",而生产关心的是"换一组数据、多跑几百次、还要付得起 tokens 与延迟"——两者不是同一件事。就像驾照场地考 vs 真实马路:场地里倒库满分,不等于雨天晚高峰也能开好。所以先把"跑分"与"可用"的差距摆清楚。
| 成分 | 说明 | 上线后还在吗 |
|---|---|---|
| 真实能力 | 确实会做 | 在 |
| 环境适配 | 贴合这套任务格式 | 换环境就没了 |
| 蒙对 | 瞎猜命中 | 换数据就没了 |
| 噪声 | 抽样波动 | 不承载能力 |
| 方案 | SWE-bench 解决率 |
|---|---|
| SWE-bench 当时最好模型 Claude 2(BM25 检索,2023) | 1.96%(arXiv:2310.06770) |
| SWE-agent 报告 | 12.47%(arXiv:2405.15793) |
| 同论文口径 | 12.47% ÷ 3.8%(其对照基线)≈ 3.3× |
| 项 | 数值 |
|---|---|
| GAIA 人类基线(arXiv:2311.12983) | 约 92% |
| 同期 AI 系统 | 明显更低(差距数十个百分点) |
| 含义 | 任务对人类简单、对 Agent 难 |
评测的第一步是承认分数不等于能力:只有"真实能力"会跟着你上线,环境适配、蒙对与噪声都会蒸发。所以看 Agent 的分数,先问三件事——换数据还灵吗?换环境还灵吗?重复跑还灵吗?
上一张卡片说明跑分不等于可用。那么生产最关心的"稳定"该怎么量?为什么单次成功率不够,要看连续成功率?
因为一次成功可能只是运气;用户会反复用、任务会重复跑,而可靠性是连乘的——单次 90% 看着不错,连做 10 次全对就只剩三成多。就像验枪不能只打一发:要连续打靶都上环,才算枪准;单发命中可能是手气。所以要用 pass^k 把"稳定性"算出来。
| 指标 | 含义 |
|---|---|
| pass@k | k 次里有 1 次成功即可(能力上限) |
| pass^k | 每任务 k 次全都成功(可靠性) |
| 严格定义 | pass^k = E[(pᵢ)^k]:每个任务 i 的连续 k 次全对率 pᵢ^k,再在任务上取平均 |
| 与 p^k 的关系 | f(x)=x^k 在 k>1 时为凸,由 Jensen 不等式有 E[(pᵢ)^k] ≥ p^k——所以 p^k 只是下界(保守估计),真实 pass^k 不低于它 |
| 单次 p | 连续 8 次全对 ≈ p^8 |
|---|---|
| 0.90 | 0.90⁸ ≈ 0.430 |
| 0.70 | 0.70⁸ ≈ 0.058 |
| 0.50 | 0.50⁸ ≈ 0.0039 |
| 要求 | 推论 |
|---|---|
| 要 8 次全对 ≥ 99% | 单次 p 需 ≈ 0.9987(0.9987⁸ ≈ 0.99) |
| 实际做法 | 关键动作加重试、幂等与人审 |
| 结论 | 靠"提高单次成功率"很难达标,必须加兜底 |
可靠性的正确量法是 pass^k(连续 k 次全对),p^k 是它的下界(真实值不低于 p^k),比单次成功率严格得多。生产上的结论很实在:别指望"单次做到完美",要给关键动作准备重试、幂等与人审兜底。
上一张卡片用 pass^k 量了稳定性。但"对"本身还需要拆开看——为什么最终答对,不能证明中间没走弯路?
因为终态只记录"结果",不记录"怎么来的":一次执行可能绕了远路、越了权限、靠偶然一步蒙对,而终态看起来一样。要定位问题,必须回看每一步动作与当时写进 context 的内容。就像看监控回放:只看最后东西到位了不够,要知道是哪一步差点出事。所以评测要分结果与过程两层。
| 层 | 测什么 | 能发现 | 漏掉 |
|---|---|---|---|
| 结果评测 | 终态 = 目标态 | 任务是否完成 | 过程违规 / 绕路 |
| 过程评测 | 每步动作是否合理 | 违规、多余调用、越权 | 整体是否达成目标 |
| 步 | 动作 | 判定 |
|---|---|---|
| 1–7 | 查询、核对 | 正常 |
| 8 | 跳过政策校验直接改数据 | 越规(结果可能仍对) |
| 9–10 | 收尾 | 正常 |
| 方法 | 成本 | 适用 |
|---|---|---|
| 规则校验 | 低 | 可写死的约束(权限、格式) |
| 人工抽检 | 高 | 高风险动作的抽查 |
| LLM 当裁判 | 中 | 开放性步骤的合理性判断 |
评测要分两层:结果评测回答"做没做成",过程评测回答"做得对不对"。生产风险大多藏在过程里——所以判据是:先有终态比对,再能定位到具体是第几步、哪个动作出的问题。
上一张卡片说过程也要能评。但比"评测"更靠前的是"别出事"——为什么必须先解决权限与安全?
因为Agent 会真的执行动作(改数据、发邮件、调接口),而它读进来的外部文本与你的指令在 context 里长得一模一样,无法从"这段来自网页"推出"它不是指令"。就像给小孩一把万能钥匙之前,得先装好锁、划好能进的房间——否则钥匙越强,风险越大。所以要先把威胁与防线摊开。
| 威胁 | 怎么发生 |
|---|---|
| 提示注入 | 外部文本被当成指令执行 |
| 越权调用 | Agent 用了不该有的权限 |
| 数据外泄 | 把敏感信息写进外部请求 |
| 项 | 数值 |
|---|---|
| 挂载工具数 | 10 个 |
| 每个工具每次返回外部文本 | 1 段 |
| 可被注入的入口 | 10 × 1 = 10 个 |
| 防线 | 做法 |
|---|---|
| 数据 / 指令分区 | 用结构化标记隔开外部内容 |
| 最小权限 | 只给完成任务所需的权限 |
| 沙箱 / 人工确认 | 高风险动作沙箱执行、需用户同意 |
| 输出校验 | 对写操作做业务校验与审计 |
安全的前提是承认一条事实:对模型来说,指令和数据都是 token 序列,没有类型之分。因此防御只能在系统层——分区、最小权限、沙箱、输出校验,四道一起上。
上一张卡片把安全关进了笼子。但一个"又对又安全"的 Agent 仍可能被叫停——为什么成本和延迟能把它拦下来?
因为Agent 的每次任务都是多次模型调用叠加:一次问答约 200 token,10 步 Agent 每步重发一次历史,累计 200 × 55 = 11,000 token;延迟也随轮次串起来,尾部延迟被放大。就像预算有限的项目:方案再好,超支就只能砍。所以要把成本与延迟的账算清楚。
| 项 | 数值(示意:以单次 200 token、10 步为例) |
|---|---|
| 一次问答输入 | 200 token |
| 10 步任务、每步重发历史 | 200 × (1+…+10) = 200 × 55 = 11,000 token |
| 倍数 | 11,000 ÷ 200 = 55× |
| 指标 | 含义 | 为什么重要 |
|---|---|---|
| 平均延迟 | 所有请求的均值 | 掩盖掉最慢的那批 |
| P95 延迟 | 95% 请求都不超过它 | 用户体验由它决定 |
| Agent 特点 | 多轮串联,尾部被放大 | 一步慢、整条慢 |
| 手段 | 做法 | 代价 |
|---|---|---|
| 缓存 | 复用相同前缀 / 相同子问题 | 需判断可否复用 |
| 模型路由 | 简单步走小模型,难步走大模型 | 需准确分类 |
| 减少步数 | 能一次调用解决就别上循环 | 可能牺牲能力 |
Agent 的成本与延迟不是"附带开销",而是能否上线的一等约束:token 按步数放大到数十倍、尾部延迟被多轮串起来。降本的顺序是先减步数,再缓存与路由。
前面五张卡片分别讲了分数、可靠性、过程、安全、成本。最后一步是把它们变成一道门——为什么上线必须配门禁与回滚?
因为"演示能跑"只证明一次;线上要面对千变万化的输入,一次越权、一次数据泄露的代价远高于拦住的收益。就像飞机起飞前的检查单:不是不信任飞行员,而是用固定流程把"偶发疏忽"变成"每次都拦住"。所以要把检查固化成门禁。
| 固定项 | 为什么 |
|---|---|
| 同一私有评测集 | 防污染、可比 |
| 同一提示 + 模型版本 | 排除混淆变量 |
| 同一判分口径 | 分数可跨版本比 |
| 同一 tokens 账 | 成本可回归 |
| 线 | 指标 | 越线动作 |
|---|---|---|
| 质量 | 任务成功率(完成率) | 回滚 |
| 可靠性 | pass^k、错误率、重试率 | 回滚 |
| 安全 | 越权 / 注入告警 | 立即停量 |
| 成本延迟 | tokens / P95 | 限流或降级 |
| 阶段 | 流量 | 观察 |
|---|---|---|
| 灰度 | 5% | 观察 1 个完整周期 |
| 扩量 | 50% | 不复现问题才继续 |
| 全量 | 100% | 保持回滚能力 |
第四部分收口:从 Transformer 到 Agent 生产化,主线始终是同一件事——把"看起来行"变成"可验证地行"。Agent 的上线门禁是这条主线的最后一站:固定评测集 + 四线监控 + 灰度回滚,用可执行的检查代替"应该没问题"。这也是第四部分对"把模型造出来、再让它上得了线"这条路给出的回答——全课程还没结束:从下一课起进入第五部分 · 自主研究。