Trace 不是日志:Harness 应该记录哪些执行证据?

Agent Trace 不只是日志。本文从 Run、Turn、Tool、State、Artifact、Verification 六类事件设计一条可定位、可验证、可回归的执行证据链。

发布 ·更新 ·约 8 分钟 ·hugfeature

Agent Harness 系列 #10
上一篇:Harness 到底应该管什么?

很多 Agent 系统说自己有“可观测性”,实际打开以后只有:

2026-09-22 10:03 calling model
2026-09-22 10:03 calling tool
2026-09-22 10:04 success

这类日志能帮你确认系统有没有报错,但很难回答真正重要的问题:

Agent 为什么走到这里?第一次错误发生在哪?最终结果到底有没有证据?

所以我更愿意把 Agent Trace 定义成:

一次执行过程的结构化证据链。

一、日志和 Trace 的区别

传统日志通常关注单个组件:

API error
timeout
database connection failed

Agent Trace 关注的是整条 trajectory:

Goal
→ Context
→ Model Decision
→ Tool Call
→ Tool Result
→ State Change
→ Retry
→ Verification
→ Final Result

它的目标不是“多记录一点”,而是让一次 Run 能被重新解释。

二、第一层:Run 级信息

每次运行至少要有:

run_id
task_id
goal
agent_version
model
harness_version
prompt_version
toolset_version
start_time
end_time
final_status

这层解决的是:

这到底是哪一次执行?

如果模型、Prompt、Tool 都会变化,没有版本信息,后面的 Regression 很难成立。

三、第二层:Model Turn

每一次模型决策最好记录:

turn_id
context_snapshot_id
model
latency
token_usage
decision_type
requested_tool
finish_reason

不一定要永久保存完整 Chain-of-Thought。

真正重要的是保存可用于工程复盘的输入输出边界和决策结果。

例如:

Turn 12
Context v18
Decision = tool_call
Tool = run_tests
Reason category = verify_change

四、第三层:Tool Call

Tool Event 至少包括:

tool_name
arguments
risk_level
permission_result
start_time
duration
exit_status
retry_count
side_effect

尤其要区分:

requested
approved
started
completed
failed

否则你会遇到一种很常见的错觉:

Trace 里有 Tool Call,所以 Tool 肯定执行成功了。

并不一定。

五、第四层:State Change

这是很多系统最缺的一层。

例如执行:

edit_file("app.py")

真正重要的不只是 Tool 返回:

success

还要知道:

changed_files = ["app.py"]
before_hash = ...
after_hash = ...
checkpoint = ...

因为 Reliability 关注的是:

真实世界状态到底变了什么。

六、第五层:Artifact

一次 Agent Run 可能产生:

  • Git diff;
  • Test report;
  • Screenshot;
  • SQL result;
  • Generated file;
  • Build artifact;
  • Browser state;
  • Approval record。

这些最好不要只作为文本塞进日志。

应该有稳定 Artifact Reference:

artifact_id
type
uri
hash
producer_step
created_at

这样 Evidence 才能真正被后续系统消费。

七、第六层:Verification

如果系统最终宣称:

PASS

Trace 应该能回答:

谁验证的?依据是什么?

例如:

verification_id
verifier = pytest
command = pytest tests/test_login.py
exit_code = 0
artifact = test-report.xml
verified_at = ...

如果只是:

agent_output = "tests passed"

这不是独立证据。

八、一条最小 Trace Schema

可以从这种结构开始:

{
  "run_id": "r-1024",
  "goal": "fix login timeout",
  "events": [
    {
      "type": "model_decision",
      "step": 1,
      "context_version": "ctx-1",
      "action": "read_file"
    },
    {
      "type": "tool_result",
      "step": 1,
      "tool": "read_file",
      "status": "success"
    },
    {
      "type": "state_change",
      "step": 4,
      "changed_files": ["src/login.py"]
    },
    {
      "type": "verification",
      "step": 7,
      "command": "pytest",
      "exit_code": 0
    }
  ],
  "final_status": "verified"
}

开始时不需要设计得特别复杂。

关键是:

结构稳定。

九、Trace 最重要的三个用途

1. Failure Localization

找到第一次偏离正确轨迹的位置。

2. Evidence Verification

判断最终结果有没有独立证据支撑。

3. Regression Replay

把真实失败重新执行。

这三件事其实是一条链:

Trace
→ Failure
→ Reproduction
→ Regression

十、什么不应该无脑记录

Trace 不是越多越好。

要考虑:

  • Secret;
  • PII;
  • 凭证;
  • 大体积文件;
  • 完整数据库结果;
  • 不必要的敏感 Prompt 内容。

更健康的是:

原始数据
↓
Redaction / Hash / Reference
↓
Trace

既能定位,又不把风险复制到 Observability 系统里。

十一、怎么判断 Trace 是否够用

可以做一个很简单的“事故复盘测试”。

拿到一条失败 Run,只看 Trace,问:

  1. 任务目标是什么?
  2. 模型用了哪个版本?
  3. 第一次异常发生在哪一步?
  4. 当时模型看到了什么状态?
  5. Tool 是否真的执行?
  6. 产生了什么副作用?
  7. 最终结果依据什么被判为成功?
  8. 能不能重新构造最小复现?

如果大部分回答不了,说明现在记录的只是日志,不是 Evidence-grade Trace。

结语

Agent Reliability 不可能建立在:

“我看日志感觉应该没问题。”

真正有价值的 Trace 应该让系统能够:

还原事实、定位失败、验证结果、生成回归。

下一篇:Agent 调错工具怎么办:Timeout、Retry、Budget 与 Side Effect

继续阅读这个系列

Agent Harness:从入门到 Reliability →
  1. Agent Harness 是什么?为什么它正在成为 Agent 工程的关键一层
  2. Agent、Framework、Workflow、Runtime、Harness 到底有什么区别?
  3. 2026 Agent Harness / Runtime 工具盘点:主流方案怎么选
  4. OpenAI Agents SDK 教程:安装、Tool、Session 与 Trace
  5. smolagents 教程:用 CodeAgent 跑通一个 Agent Loop
  6. 手写 Agent Harness:用 Python 实现 Loop、Tool、Policy 与 Trace
  7. 一个 Agent Loop 到底是怎么跑起来的?
  8. Agent 为什么需要 Harness:模型负责决策,系统负责约束
  9. Harness 到底应该管什么?从 Agent Loop 到 Reliability Boundary
  10. Trace 不是日志:Harness 应该记录哪些执行证据? · 当前篇
  11. Agent 调错工具怎么办:Timeout、Retry、Budget 与 Side Effect
  12. 结果正确就够了吗?给 Agent 设计 Evidence Contract
  13. 一次 Agent 失败,怎么变成一条 Regression Case?
  14. Harness 和 Eval 平台到底是什么关系?
  15. Agent Harness 的终点:从执行引擎走向 Quality Gate
  16. 让 Agent 下班后继续跑:有界自主运行怎么设计?

沿着问题继续探索

从执行机制走向验证与交付。

相关文章

在 GitHub 反馈 ↗