为什么只评估 AI 的“最终答案”已经不够了
我们正处在一个非常有意思的转折点上:大模型不再只是“聊天窗口里的对话引擎”,而是开始被接入代码仓库、数据库、浏览器、终端,甚至被派去完成需要多步推理的“调查类任务”。
所谓“调查类任务”,指的是这类问题不能靠一次生成就完成,而是要经过:拆解问题 → 检索信息 → 交叉验证 → 推理判断 → 得出结论,这样完整的链条。比如让 AI 分析“某公司最近三个月的营收为什么下降”,它需要先找到财务数据,再看市场动态,还要对照竞品信息,最后给出判断。
在这种场景下,如果你仍然只看模型最终输出的结论对不对,就会遇到一个很大的问题:
结论对,不代表过程对;过程错,结论碰巧对的情况在复杂任务里非常普遍。
这也是 TRACES 这类基准出现的背景:我们要评估的不只是 AI 的“最终答案”,更是它得出结论的整个调查过程。
这篇文章会围绕 TRACES 基准展开,讲清楚它要解决什么问题、评估哪些维度、如何设计评估协议,以及作为 AI 应用开发者,我们能从这套基准里获得什么工程启示。
1. 背景:AI 评估的“回答精度”困境
1.1 传统评估指标的局限
我们先回顾一下传统评测体系。BLEU、ROUGE、F1 这类指标衡量的是“模型输出和标准答案之间的重合度”,后来的 LLM-as-Judge 则是让大模型给回答打分。这套体系在大模型还处于“问答助手”阶段时是有效的:你问一个问题,模型给一个答案,对比答案质量即可。
但到了 Agent 阶段,这个范式出现了明显漏洞。
假设你让一个 AI Agent 做一件事:“评估三家云厂商某个实例规格的月成本”。这个任务涉及:
- 检索各家官网的定价页面
- 区分按量计费和包年包月
- 考虑不同地域的差价
- 把价格汇总成表格
如果 Agent 中途从一个不靠谱的源抓到了错误价格,但最终输出时算出了一个看起来合理的数字,你很难判断它是“真会算”还是“蒙对了”。
更棘手的是相反情况:Agent 每一步推理都正确,但最终总结时漏了一句话,让最终答案显得不完整。传统按答案打分的评测方式会把这种高质量调查过程判为低分。
1.2 过程质量为什么比答案更重要
对于工程系统而言,我们关注过程,是因为过程决定可复现性。
一个真实项目里,如果 AI 输出的结论是“建议采用方案 B”,我们不可能直接上线。我们需要知道:
- 它是否看过了所有候选方案
- 它比较了哪些维度
- 它的数据来源是什么
- 它的推理链路是否完整
这些信息全部蕴含在“过程”里,而不是最终答案里。
这就像面试:候选人给出正确答案当然重要,但面试官更关注他是怎么想到这个答案的,因为这能反映他解决未知问题的能力。TRACES 基准本质上就是 AI 领域的“结构化行为面试”。
2. TRACES 基准的核心概念
2.1 TRACES 是什么
TRACES 是一套用于评估 AI 智能体(Agent)在调查类任务中过程质量的基准。它的名字拆分来看:TRACES 强调“留下痕迹”,也就是关注 AI 完成一条任务时的完整轨迹——使用了哪些工具、检索了哪些资料、推理了哪些步骤、遇到了哪些冲突、如何做出判断。
TRACES 并不是一个简单的“题目集”,而是一套评估协议。它既包含任务设计,也包含评分标准,还包含结果分析方式。相比传统 benchmark“给题 → 判分 → 排名”,TRACES 更接近一种“考试 + 卷面分析 + 解题过程评审”的综合评估方案。
2.2 它与传统基准的区别
传统基准和 TRACES 的差异,可以这样理解:
| 对比维度 | 传统基准 | TRACES |
|---|---|---|
| 评估对象 | 模型的最终输出 | Agent 的完整调查过程 |
| 任务类型 | 单轮问答、代码生成、分类 | 多步调查、信息检索与交叉验证 |
| 评分依据 | 答案匹配 | 过程质量 + 结论一致性 |
| 可解释性 | 差,只有一个分数 | 强,能定位到问题出在哪一步 |
| 应用目标 | 模型能力横向比较 | 指导 Agent 系统迭代改进 |
这个区别非常关键。TRACES 关注的不是“你答对了吗”,而是“你是怎么做对的”和“你是怎么做错的”。
2.3 TRACES 关注的典型任务
TRACES 基准里的任务通常具备以下特征:
- 开放性:没有唯一标准答案,但结论需要有证据支撑
- 多步性:需要规划子任务并逐步执行
- 信息不对称:初始信息不完整,需要主动检索
- 交叉验证:不同来源的信息可能存在冲突,需要判断取舍
- 可审计性:调查过程可以被回放、被复现
举个例子,一个典型的 TRACES 任务可能是:
调查某开源库最近 90 天内的安全漏洞修复情况,分析修复速度和严重程度的关系,并给出“下一版本是否应该升级”的建议。这个任务没有标准答案,但评估者可以检查 Agent 是否:
- 正确访问了 GitHub 仓库的 Release 页面
- 检索了 CVE 数据库
- 按时间序列统计了修复间隔
- 区分了不同严重等级的漏洞
- 基于数据而不是直觉给出了升级建议
每一环都是过程质量的一部分。
3. TRACES 的评估维度拆解
3.1 任务分解能力
复杂调查任务的第一步是对问题进行拆解。TRACES 评估 Agent 是否能自主生成合理的问题解决计划,而不是一股脑开始检索。
评估点包括:
- 是否识别出任务的核心问题
- 是否拆成可执行的子问题
- 子问题之间是否有依赖关系标注
- 计划是否覆盖了所有必要信息类型
例如,面对“评估某个数据库迁移方案的风险”这个任务,一个合理的问题拆解可能是:
1. 目标数据库版本与源数据库版本兼容性? 2. 需要迁移的数据量级跟表数量? 3. 是否有大表或长事务? 4. 迁移窗口内业务写入流量情况? 5. 选用的迁移工具支持哪些同步模式? 6. 回滚方案是什么?如果一个 Agent 只问“这个迁移工具支持吗”就跳到结论,那它的任务分解能力就不能得分。
3.2 信息搜集与工具调用质量
调查类任务离不开工具调用。TRACES 会重点关注 Agent 如何使用搜索、API 调用、数据库查询等手段获取信息。
这一维度的评估点包括:
| 评估点 | 好表现 | 差表现 |
|---|---|---|
| 信息源的权威性 | 优先访问官方文档和数据源 | 依赖未经核实的第三方博客 |
| 信息覆盖度 | 主动获取多源交叉信息 | 只取一条搜索结果 |
| 查询效率 | 能通过精确查询减少冗余调用 | 反复调用同一接口获取重复数据 |
| 时间敏感性 | 能筛选出对应时间段的信息 | 混用不同年份的数据 |
这一维度的意义在于,它能判断 Agent 是“会搜资料”还是“会查资料”。前者是盲目地用关键词搜索,后者是有目的地定位高价值信息。
3.3 推理链路与证据链构建
推理链路评估是 TRACES 最核心的部分。
TRACES 要求 Agent 在得出结论时,必须能够展示自己的证据链。这条证据链至少要包含三个要素:
- 观察:从信息源提取了什么事实
- 推导:从事实能推出什么结论
- 限制:这个结论在什么条件下成立
一个完整的证据链示例:
观察:PostgreSQL 16 在 2023 年 9 月发布。 观察:某个 ORM 库在 2024 年 1 月的 Release Notes 中声明支持 PostgreSQL 16。 推导:如果项目使用该 ORM 的版本 ≥ 2024 年 1 月版本,则兼容 PostgreSQL 16。 限制:此结论基于 ORM 官方声明,未验证生产环境下的特定查询模式。评估者会给“证据链完整度”打分。如果 Agent 直接说“根据我的分析,可以升级”,没有展示信息来源、对比过程和限制条件,那么即使结论后来被证明正确,推理链路这一项也无法得分。
3.4 不确定性与冲突处理
真实调查中,信息经常是相互矛盾的。有的文档已经过时,有的数据统计口径不一致,有的官方声明相互冲突。
TRACES 考察 Agent 面对冲突时的表现:
- 是否能够识别出信息冲突
- 是否能寻找第三方权威信息源来仲裁
- 是否能明示不确定性,而不是强行选择一个答案
- 是否会在最终结论中标出“置信度较低的判断”
一个成熟的 Agent 应该能说出类似这样的话:
官网文档显示该 API 在 v2.4 废弃,但 GitHub Issue #1234 中维护者表示会延迟到 v2.6 才移除。 由于 Issue 中的信息尚未合并到官方文档,当前 v2.4 仍是安全的使用版本,但升级到 v2.5 前需再次确认。这种“把不确定性摆在台面上”的能力,在真实工程场景中非常宝贵。传统基准往往不会为这种保守、精确的表达加分,但 TRACES 会。
3.5 效率与成本
过程质量不只看正确性,还要看效率。如果一个 Agent 调用 50 次工具才完成一个本来 10 次调用就能完成的任务,即使结论正确,它在 TRACES 的效率维度上依然会得到差评。
效率评估主要包括:
- 完成任务的工具调用次数
- 无效回溯和重复检索的比例
- 子任务之间的步骤冗余度
- 最终答案长度与信息密度是否匹配
这一维度对工程开发者尤其重要,因为工具调用次数直接对应 API 成本和时间开销。
4. 一次 TRACES 评估的模拟实践
4.1 设计一个调查任务
理解了 TRACES 的评估维度之后,我们可以在自己的 Agent 系统里设计一套简化版的 TRACES 评估流程。
我们用一个具体的调查任务作为例子:
任务:某项目当前使用 Spring Boot 2.7.18,维护团队需要在 2025 年决定是否升级到 Spring Boot 3.x。 请调查升级的主要障碍,评估升级成本,并输出建议报告。这个任务的特点在于:没有标准答案,但过程中有明显可评估的信息搜集行为、冲突检测和推理判断。
4.2 记录 Agent 执行轨迹
要评估过程,首先要记录过程。在设计 Agent 系统时,我们应该为每个任务生成一个结构化的 trace 文件。
一个简化的 trace 数据结构如下:
{ "task_id": "task_001", "steps": [ { "step_id": 1, "type": "plan", "content": "拆解问题:确认Spring Boot 2.7停止维护时间;梳理3.x关键变更;对比项目依赖兼容性", "timestamp": "2025-01-10T10:00:01Z" }, { "step_id": 2, "type": "retrieve", "tool": "web_search", "query": "Spring Boot 2.7 EOL date", "results": ["https://endoflife.date/spring-boot"], "timestamp": "2025-01-10T10:00:03Z" }, { "step_id": 3, "type": "reason", "content": "获取到 Spring Boot 2.7 的 EOL 时间为 2023 年 11 月,已经停止免费维护", "timestamp": "2025-01-10T10:00:08Z" } ], "final_answer": "建议在 2025 年 Q2 前完成升级,主要障碍是 javax 到 jakarta 命名空间迁移…" }有了这样一份轨迹记录,我们就可以对过程进行离线分析。
4.3 编写过程评分脚本
下面是一个用于分析 trace 质量的简化 Python 脚本。它会从 trace 文件里提取关键特征,计算过程质量得分。
# 文件路径:scripts/evaluate_trace.py import json from typing import Dict, List def load_trace(file_path: str) -> Dict: with open(file_path, "r", encoding="utf-8") as f: return json.load(f) def count_step_types(trace: Dict) -> Dict[str, int]: """统计各类型步骤的数量""" stats = {"plan": 0, "retrieve": 0, "reason": 0, "verify": 0} for step in trace.get("steps", []): step_type = step.get("type", "unknown") if step_type in stats: stats[step_type] += 1 return stats def check_evidence_chain(trace: Dict) -> Dict: """检查最终答案中是否包含证据链关键要素""" final_answer = trace.get("final_answer", "") checks = { "has_source_link": "http" in final_answer, "has_reasoning": "因为" in final_answer or "因此" in final_answer, "has_limitation": "限制" in final_answer or "注意" in final_answer } return checks def calculate_process_score(trace: Dict) -> float: """简化版过程质量评分""" score = 0.0 max_score = 0.0 # 1. 任务分解:plan 步骤是否存在于前 20% 的步骤中 steps = trace.get("steps", []) if not steps: return 0.0 first_part = steps[:max(1, len(steps) // 5)] has_plan = any(s.get("type") == "plan" for s in first_part) score += 2.0 if has_plan else 0.0 max_score += 2.0 # 2. 信息搜集:至少检索 2 次 stats = count_step_types(trace) has_multiple_retrieval = stats["retrieve"] >= 2 score += 2.0 if has_multiple_retrieval else 0.0 max_score += 2.0 # 3. 推理与验证:有 reason 且至少有一步 verify has_reason = stats["reason"] >= 1 has_verify = stats["verify"] >= 1 score += 1.0 if has_reason else 0.0 score += 1.5 if has_verify else 0.0 max_score += 2.5 # 4. 证据链完整性 checks = check_evidence_chain(trace) score += sum(checks.values()) * 0.5 max_score += 1.5 return round(score / max_score * 100, 1) if __name__ == "__main__": trace_data = load_trace("trace_example.json") score = calculate_process_score(trace_data) print(f"Process Quality Score: {score}/100")这段脚本的思路是:把 TRACES 评估的核心原则转化为可执行规则,对 Agent 的轨迹做离线量化分析。实际项目中,你可以把它扩展成更复杂的评分器。
4.4 分析评估结果
运行上面的脚本后,你会得到每个任务的过程质量得分。但分数本身不是终点,重要的是如何解读。
一个质量得分低于 50 分的任务,通常预示着以下问题:
- 任务拆解不规范,Agent 直接跳进信息检索
- 检索次数过多但证据链很短,说明信息利用率低
- 缺少验证步骤,Agent 对检索到的事实没有交叉确认
- 最终答案缺少限制条件,显得过度自信
我们可以把多个任务的评估结果聚合起来,形成一张问题分布表:
| 问题类型 | 出现比例 | 典型表现 | 修复优先级 |
|---|---|---|---|
| 跳过任务拆解 | 32% | 第一步直接调用搜索 | 高 |
| 缺少冲突检测 | 28% | 面对矛盾数据不处理 | 高 |
| 证据链不完整 | 24% | 结论无引用来源 | 中 |
| 过度冗余检索 | 16% | 同一查询重复执行 | 低 |
这张表对工程实践的指导意义非常大。
5. TRACES 结果解读与模型诊断
5.1 从低分结果反推环节缺陷
TRACES 最实用的能力是“归因”。假设我们评估了 100 个调查任务,发现某个 Agent 的“证据链构建”维度平均得分只有 40 分。我们可以进一步分析:
- 是 LLM 本身不会总结来源?
- 还是 prompt 里没有要求输出来源?
- 还是工具返回的内容格式里丢掉了来源元数据?
不同归因对应的修复方案完全不同。比如,如果是 prompt 问题,修改提示词即可;如果是工具返回格式问题,则需要调整工具链的元数据传递逻辑,这一步非常影响 Agent 的可观测性,后面会专门展开。
5.2 过程质量与结论质量的关系
在 TRACES 的实际评估中,研究者会发现一个有价值的现象:过程质量和结论质量并不是线性相关的。
有四种组合:
| 过程质量 | 结论质量 | 解读 |
|---|---|---|
| 高 | 高 | 理想状态,Agent 可信任 |
| 高 | 低 | 可能是最后一步总结能力弱,需要改进输出层 |
| 低 | 高 | 危险状态,碰巧答对,不可复现 |
| 低 | 低 | 系统性问题,需要全面优化 |
对于“过程质量低,结论质量高”的状态,TRACES 的处理逻辑是“仍然判为不合格”,因为这种结论无法复现,也无法被审计。在真实工程场景里,你不可能因为开发者碰巧提交了正确的代码就忽略他过程里的严重问题。
5.3 自动评估与人工评估的配合
TRACES 框架并不排斥自动评估。相反,它的设计思路是让自动评估覆盖可量化的部分,让人工评估覆盖需要判断的部分。
自动评估适合:
- 工具调用次数是否超限
- 信息源域名是否属于可信列表
- 证据链元素(来源、时间戳)是否存在
- 是否包含冲突检测的关键词
人工评估适合:
- 推理链路的语义完备性
- 对复杂冲突的处理是否得体
- 最终报告的信息组织是否清晰
- 结论建议在业务层面是否可执行
一个成熟的评估平台应该把两者结合:用自动评估做第一轮筛除,把低分的样本直接过滤掉;再让人工抽检中等得分的样本,聚焦判断那些“自动评估无法区分”的案例。
6. 从 TRACES 反推 Agent 系统的最佳实践
6.1 设计可观测的 Agent 架构
TRACES 基准强调“过程留痕”,这恰好也是生产级 Agent 系统的必备能力。如果我们的 Agent 系统本身就没有日志、没有中间状态记录、没有工具调用跟踪,那即使想评价过程质量也无从谈起。
因此,工程上建议在设计 Agent 架构时引入“事件溯源”模式:
- 每个 Agent 会话对应一个 trace 文件
- 每一步都记录:动作类型、输入、输出、耗时、token 消耗
- 所有中间结果都持久化,而不是只保存在内存里
- 为 trace 文件设计独立的数据表或存储桶
这样,TRACES 的评估过程就变成了对已有 trace 数据的离线分析,不需要重新执行任务。
6.2 提示词中显式要求过程输出
如果你希望 Agent 在调查类任务中表现出良好的过程质量,最简单有效的方式是在系统提示词中显式要求它“逐步输出推理和证据来源”,并且可以给出一个固定的输出模板作为约束。
下面是一个适用于调查类 Agent 的系统提示词模板:
你是资深行业调查分析师。执行调查任务时,请严格遵循以下流程: 1. 拆解:用 3-5 个子问题描述你的调查计划。 2. 搜集:明确标出每一步的信息来源(URL或文件名)。 3. 交叉验证:如果不同来源存在冲突,请明确指出并解释你如何取舍。 4. 限制说明:在最终结论中列出本调查的限制条件(时间范围、数据来源范围、未覆盖内容)。 如果事实数据不足,请直接说明“基于现有信息无法确认”,不要强行推断。这种做法能显著提升 Agent 的可评估性,也能约束 Agent 不要走捷径。
6.3 使用轻量级归因工具辅助验证
在 Agent 系统里,我们还可以用一些轻量级的工程手段来强化过程质量:
- 来源元数据注入:在检索工具返回内容时,把 URL、发布时间、作者嵌入到上下文里
- 引用锚点:要求 LLM 在关键结论后以
[来源1]的形式标注引用 - 步骤校验器:在 Agent 每执行一步后,由一个校验模块检查该步是否有对应的检索证据
这些手段不需要大规模重构 Agent 架构,但能显著提升过程的可审计性。
6.4 把 TRACES 评估接入 CI/CD
对于那些已经开发了 AI Agent 功能的团队,我建议把 TRACES 评估接入 CI/CD 流水线,形成“变更 → 回归评估 → 质量门禁”的闭环。使用action-after-merge或者独立评估服务都可以,关键是每次变更都要跑一遍基线任务集。
一个简化版的流程:
代码变更提交 → 触发评估 pipeline → 在固定测试集上运行 Agent 任务 → 采集 trace 文件 → 计算过程质量得分 → 对比上一个版本的得分 → 若质量分数下降超过阈值,阻断合并虽然这种流水线需要额外算力,但从“上线一个不可复现答案”到“上线前发现过程链断裂”,这个投资是值得的。
7. 常见问题与排查思路
在实际应用 TRACES 基准或设计类似评估体系时,下面几类问题出现频率较高。
7.1 评估任务设计不合理
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 所有 Agent 得分都很高 | 任务过于简单,不需要多步推理 | 增加信息冲突和隐藏陷阱,提高任务复杂度 |
| 所有 Agent 得分都很低 | 任务开放度过高,评估者无法判定对错 | 为任务补充明确的评估 rubric,定义好什么算“证据充分” |
| 评估结果波动大 | 任务样本量不足,随机性过高 | 增加任务数量,或对同一个任务多次运行取中位数 |
| 人工评估成本过高 | 任务量太大,评估员不够 | 先自动筛选,人工只抽检中分段样本 |
7.2 trace 数据不完整
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 无法定位问题环节 | 日志里没有记录 LLM 的中间输出 | 在 Agent 循环中增加thinking字段,记录每一步推理内容 |
| 无法验证信息源 | 工具调用返回结果没有保存原始内容 | 在 trace 里同时保存检索结果的摘要和完整原文 |
| 无法复现结果 | Agent 运行依赖外部环境状态 | 记录运行时间、模型版本、温度参数、seed 值 |
| 步骤间缺少关联 | 没有记录每一步的输入上下文 | 为每一步记录 parent_step_id,构建依赖树 |
7.3 评分标准不一致
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 不同评估员给分差异大 | rubric 定义过于模糊 | 为每个维度补充好/中/差示例 |
| 同一模型多次评估结果不同 | 模型输出具有随机性 | 固定采样温度,多次运行求均值 |
| 自动评分与人工判断冲突 | 自动评分规则过于死板 | 将自动评分作为初筛,保留人工复审通道 |
| 维度权重不合理 | 没有根据业务目标调整 | 在评估前明确任务类型,再分配权重 |
8. 面向工程团队的引入建议
8.1 从“小闭环”开始
最好不要一开始就追求完整复现 TRACES 基准并建设一个庞大的评估体系。我建议从一个小闭环开始试点:
- 挑选 5-10 个团队内部真实的调查类任务
- 手动记录当前 Agent 系统的运行轨迹
- 用初步的维度框架对轨迹做一次评审
- 输出问题清单,优先修复排名前三的问题
这个流程一两周内就能跑完,产出却非常具体。
8.2 定义自己的过程质量维度
TRACES 给了很好的参考,但每个团队的核心场景不同。比如:
- 做代码审查 Agent 的团队,过程维度应该包含“是否检查了变更前后依赖”
- 做运维诊断 Agent 的团队,过程维度应该包含“是否确认了变更时间窗口”
- 做合规审查 Agent 的团队,过程维度应该包含“是否检索了最新法规文本”
把通用框架映射到自己的业务场景,才能产出真正有用的评估结果。
8.3 关注 Token 成本与评估效率
TRACES 类评估的成本不容忽视。运行一个复杂调查任务可能需要几十次工具调用和大量 token。在建设评估集时,要对任务做分层:
| 层级 | 任务数量 | 运行频率 | 用途 |
|---|---|---|---|
| 冒烟层 | 3-5 个轻量任务 | 每次变更 | 快速发现严重问题 |
| 回归层 | 20-30 个标准任务 | 每日 | 跟踪过程质量趋势 |
| 深度层 | 50-100 个复杂任务 | 每周或发版前 | 完整维度评估 |
这样既控制了评估成本,又保证了关键变更能被及时覆盖。
9. 总结与后续学习方向
9.1 核心要点回顾
TRACES 基准给我们最大的启示是:AI 评估正在从“只看结果”走向“全链路过程审计”。
对开发者来说,这意味着:
- Agent 系统不能只追求“最终答案正确率”
- 过程可复现、证据可追溯、结论可解释,这些指标在工程上同等重要
- 评估体系应该从上线后的“事后验证”前移到开发阶段的“过程质量门禁”
9.2 后续可以继续深入的方向
在此基础上,有几个方向值得继续探索:
第一,自动化过程评判器。设计一个独立的 LLM 评判器,让它遵循 TRACES 的评估规范,自动化完成过程质量的打分,并与人工评分做一致性校验。
第二,多 Agent 协作的过程评估。当多个 Agent 协作完成一个调查任务时,过程质量如何归属到每个 Agent 头上,这是一个值得研究的新问题。
第三,领域定制的 TRACES 协议。结合医疗、金融、司法等领域的特殊要求,设计包含领域规则的过程质量评估协议。
9.3 一个建议
如果你正在开发自己的 Agent 系统,不妨今天就做一个简单的测试:让 Agent 完成一个需要三步以上调查的任务,然后记录它的完整执行轨迹,再按照“任务拆解、信息搜集、推理链路、冲突处理、证据完整性”这五个维度打个分。
你可能会发现,很多 Agent 的表现比“只看最终答案”时以为的要差不少。但这恰恰是好事——找到过程中隐藏的问题,才是让 AI 系统真正稳定、可信、可落地的第一步。
如果这篇文章对你理解 TRACES 基准或设计 Agent 评估方案有帮助,欢迎收藏备用。后续我也会继续更新关于 AI Agent 可观测性、评估体系与工程落地的实践内容,关注我,第一时间收到更新。