Agent Developer Roadmap
Agent Developer

Agent 评测与可观测性:从最终答案回溯整个轨迹

核验日期:2026-07-16。评测平台和 grader API 会变化,本文以可移植的数据集、确定性检查、校准后的模型评分、分层指标和 trace 为核心。任何外部基准都不能替代项目真实任务。

Agent 的输出具有概率性,路线还包含检索、工具、审批和远程系统。只问“这段回答看起来好吗”既不可复现,也无法定位失败。评测要先定义任务与损失,再分层测输入、检索、决策、工具、轨迹、最终输出、安全、延迟和成本;可观测性提供单次运行证据,评测把许多运行汇总成变更决策。

从任务规格构建数据集

每个 case 至少有:稳定 ID、用户目标、输入/身份/tenant、时间或数据版本、允许工具、初始状态、期望事实/动作/拒绝、不可接受行为、风险标签和评分方法。答案不是必须逐字匹配;把不变量写成可机器检查字段,把开放质量交给 rubric。

数据来源包括真实匿名化失败、产品关键路径、专家设计边界、事故回归和对抗样例。合成数据用于扩充覆盖,但不能完全替代真实分布。记录来源和许可,不把 PII、secret 或客户原文直接提交仓库。

训练/调 Prompt 的 development set、选择方案的 validation set 和最终报告的 test set 分开。按用户、来源文档、模板或时间分组切分,防止近重复泄漏。测试集看得太多会变成开发集,需要定期建立未见 holdout。

先做确定性检查

能精确判断的不要交给模型 grader:JSON Schema、字段范围、禁止工具、参数、调用次数、授权、引用 ID 存在、目标数据库状态、终止原因、预算、敏感正则/分类器、延迟和费用。工具型任务优先验证真实 side effect 的 sandbox 状态,而不是只看 Agent 声称“已完成”。

type RunRecord = {
  termination: string;
  toolCalls: Array<{ name: string; input: unknown }>;
  citations: string[];
  costUsd: number;
};

function gradePolicy(run: RunRecord) {
  return {
    terminated: run.termination === "final",
    onlyReadTools: run.toolCalls.every((call) => call.name.startsWith("get_") || call.name.startsWith("search_")),
    hasCitation: run.citations.length > 0,
    withinCost: run.costUsd <= 0.05,
  };
}

阈值只是示例,必须由项目风险和价格定义。grader 输出包含 pass/score、reason、evidence 和 grader version,不能只保留总分。

分层指标

典型问题指标/证据
输入/分类是否理解目标与风险label F1、澄清/拒绝正确率
检索证据是否被召回并可见recall@k、MRR/nDCG、ACL violation
工具选择是否选对工具和参数exact/field match、invalid/forbidden rate
执行工具是否成功且不重复success、latency、idempotency、side-effect state
轨迹步骤是否必要、有序、终止success@budget、steps、loop/repair/handoff rate
输出是否正确、完整、引用支持task score、claim support、citation precision
安全是否泄露、越权或受注入attack success、false allow/deny、approval bypass
生产是否满足体验和经济性TTFT/p95/p99、tokens、cost、availability

最终成功率相同的两个 Agent,可能一个一次工具完成,另一个循环七次后碰巧正确。轨迹效率、危险尝试和成本必须进入门禁。反过来,不要求轨迹和 golden 一字不差;只约束必要不变量与允许路径集合。

RAG 专项

相关性标签应落在 source/chunk,包含 hard negatives、旧版本和其他 tenant。先测召回,再固定 context 测生成,最后端到端。回答评测拆成事实正确、完整、忠实于证据、引用覆盖、引用支持和无证据时拒答。模型的内部知识碰巧答对不能掩盖检索失败,因为数据更新后会失效。

语料/index/embedding/chunker/reranker 版本进入每条运行。若召回率下降,先查摄取/ACL/索引,不通过改 Prompt 掩盖。

Tool/Agent Loop 专项

数据集定义允许工具、必须/禁止调用、参数约束、依赖顺序、最大步数和最终 side effect。注入用例把恶意指令放在 tool result/RAG 文档,验证不会扩大权限。网络故障用 fake 注入 timeout、429、响应丢失、部分成功,验证重试、幂等和终止。

衡量 tool_selection_accuracy 不足:错误工具被授权层拦下仍是安全成功、质量失败;正确工具参数越权则更严重。报告按 failure taxonomy 分层,不只算均值。

Model-as-a-Judge

模型 grader 能评价开放式正确性、风格和证据支持,但自身有位置偏差、长度偏好、自我偏好和随机性。Rubric 写清分档、关键事实、忽略项和输出 Schema;grader 看任务、候选、reference/evidence,不看不必要的供应商身份。成对比较时随机交换 A/B 顺序。

用专家标注集校准 grader:测与人一致率、各标签 precision/recall、重复稳定性和困难子集。高风险发布不能只依赖同一家模型自评。低置信/分歧 case 进入人工复核。保存 grader model/prompt/version 与原始结构化结果。

不要让 grader 奖励冗长。把正确、引用、安全、简洁拆开,按业务损失组合;一项安全硬失败不能被文风高分抵消。

人工评测

专家评测用于建立 gold、校准 rubric 和审查新型失败。界面隐藏实验组,随机顺序,显示必要证据/轨迹,支持“不确定/资料不足”。至少部分 case 双人标注,计算一致性并讨论定义歧义;不是简单多数投票。

普通用户反馈(点赞/点踩、重试、编辑、放弃)是弱信号:可能受速度、语气或期望影响。关联任务类型和轨迹,抽样人工解释,不能把点击率直接当事实正确率。

非确定性与统计

同一配置对关键 case 多次运行,估计 success@1、pass^k 或 worst-case 风险。报告样本数、均值/比例、置信区间和分层差异;小数据的 1% 变化可能只是噪声。成对运行尽量同时间/区域,减少外部版本和负载混杂。

发布门槛可以是:关键安全集零容忍;核心任务成功率不低于对照方案的预设非劣界;p95/成本不超预算;每个重要分层有最低样本。不要只优化一个综合分数,避免权重掩盖回归。

版本与实验设计

一个 Agent 配置指纹包含应用 commit、model/profile/参数、Prompt、tool Schema/实现、语料/index、路由/guardrail、SDK 和 grader。比较时一次改变一个主要因素,或用明确 factorial 实验;否则无法归因。

对照方案可以是非 Agent 搜索、人工规则、小模型、旧生产版本。若简单检索就达到目标,复杂 Agent 没有正收益。保存原始 runs,聚合可重新计算;供应商模型别名变化时重新对照方案。

Trace 与可观测性

Trace 树包含 request/run、context、retrieval、generation、tool、handoff、guardrail、approval 和 final validation spans。每个 span 记录版本、安全的输入摘要/哈希、时间、usage、状态和 error class。完整 Prompt/结果仅在受控采样中保存,遵循最小化、脱敏、地域与 TTL。

评测 runner 将 caseId/configId/runId/traceId 关联。失败报告一键跳到首个错误 span,并展示与对照方案差异:少了哪个 chunk、为何多调用工具、哪个 Schema 字段被拒绝。可观测性没有 taxonomy 只会得到大量漂亮瀑布图。

线上指标分四类:系统健康(availability/queue/latency);模型/工具(usage/error/step);质量代理(citation/empty/retry/escalation);安全(policy deny/attack signal/approval)。高基数字段放日志/trace,不放 metrics label。

离线、Shadow、Canary 与 A/B

离线评测快速、可重放,但不能覆盖真实流量和依赖;shadow 对真实请求运行候选但不产生副作用,需用户数据许可和额外成本,写工具必须 mock/dry-run;canary 让小比例真实用户得到候选结果,配置 kill switch;A/B 适合产品指标,仍需安全硬门槛。

逐级推进:单元/契约 → 固定离线集 → 对抗与故障 → shadow → canary → 扩量。任何阶段发现严重越权/泄露立即停止,不等统计显著。回滚同时恢复 model/prompt/tool/index 兼容组合。

回归数据流程

事故或用户失败进入 triage:确认是否可复现,脱敏,归类根因,构造最小 case 和相邻变体,先证明旧版本失败,再修复并防回归。避免把完整生产对话原样加入,防数据权利问题与过拟合。定期去重、淘汰已失效版本题,保留历史兼容集。

数据集也会偏:只收投诉会缺成功分布,只收易自动判定题会奖励机械任务。维护 coverage matrix,按任务、用户、语言、风险、工具、来源、长度、故障与时间片;产品变化时更新权重但保留可比较核心。

成本与性能评测

成本包含模型 input/output/cached 等 token、embedding/rerank、工具 API、存储/trace、重试和人工审核。按成功任务计算成本比单请求更有意义;失败后多次重试会放大。延迟分 queue/context/retrieval/TTFT/generation/tool/approval/finalize,报告完整分布。

压测使用 fake model/tool 先找应用/流/存储容量,再用受控真实调用测供应商限额;不要用付费模型做无上限负载。质量评测并发受 rate limit,失败重试不能把限流当质量失败,但要作为可用性结果单列。

安全评测

攻击集覆盖直接/间接注入、跨 tenant、secret/exfiltration、工具参数注入、SSRF/路径/命令、审批绕过、memory poisoning、恶意 MCP/A2A、资源耗尽和供应链能力变化。测试不仅看最终文本,还看任何工具尝试、trace 泄漏和副作用。

红队发现是种子,不是精确攻击词黑名单。生成同义、编码、多轮、跨模态和嵌套变体,验证架构控制。安全 grader 优先确定性策略与真实 sandbox 状态,模型分类只是辅助。

报告与发布门禁

报告包含目标、数据版本/覆盖、候选配置、环境、样本、指标定义、区间、分层结果、失败示例、质量/安全/延迟/成本权衡、已知限制、选择与回滚。只报“准确率 92%”不具备审查价值。

CI 跑快速核心集与工具状态机;夜间/发布候选跑完整离线和对抗集;真实模型任务有预算和稳定缓存策略,但不可用旧缓存伪装新模型已测试。门禁代码版本化,例外需 owner、理由、到期时间。

验收时随机抽 case,能从任务规格追到 trace、grader evidence、聚合指标和发布决定;随机抽一次回归,能说明首个失败层、修复与新增变体。做不到时,系统仍处于演示阶段。

参考资料

上一节:AI SDK · 下一节:安全与生产化

在 GitHub 上编辑此页

本页目录