动手实验 · 把机制做成可验证产物
用三个可复现的标准库 Python 实验,把 Loop 恢复、工具门禁和 Context 压测从阅读结论变成工程验收。
本章任务
要回答的问题
我应该先用哪一个实验,把当前最危险的 Agent 机制变成可检查产物?
读完你能
- 按失败成本选择 Loop、Tool 或 Context 实验
- 用统一格式记录故障注入、预期结果和证据
- 把实验结果映射回对应专题与源码入口
- 适合现在读
- 读过一两个专题、准备开始实现或评审 Agent 运行时的工程师
- 先修知识
- 能运行 Python 3.11 或更高版本;理解 Tool Call 与 JSON 事件的基本形态
- 实践产物
- 一条实验路线、一份验收报告模板,以及三个可直接运行的脚本
- 证据边界
- 这些实验验证机制和不变量,不代表任何模型、Provider 或生产环境的性能结论
先选最可能让你的 Agent 出事故的机制
Section titled “先选最可能让你的 Agent 出事故的机制”不要从最有趣的实验开始。先回答:当前系统失败一次,损失最大的是哪一条边界?
| 当前风险 | 先做哪个实验 | 你要证明什么 |
|---|---|---|
| 工具已经执行,进程却在结果落盘前退出 | Lab 01 · Loop 恢复 | 同一 operation_id 不重复副作用,Verifier 从正确检查点继续 |
| 用户批准了一个动作,执行时参数却发生变化 | Lab 02 · Tool Gate | Schema、Policy 与批准令牌共同约束那一次具体动作 |
| Context 快满,压缩后忘了约束或信任了恶意文件 | Lab 03 · Context Pressure | 受保护片段不丢失,不可信来源被扫描,压缩保留来源 |
三项实验都故意不调用真实模型,也不依赖第三方包。先把 Harness 的确定性边界跑通,再接入模型变量。
三项实验怎样组成一条学习路线
Section titled “三项实验怎样组成一条学习路线”运行时路线:先读 Agent Loop 与 Session Lifecycle,再完成 Lab 01。你会得到一条能回答“工具到底执行过没有”的事件时间线。
安全路线:先读 Tool System、Permissions 与 Sandbox,再完成 Lab 02。你会得到一个参数漂移和令牌重放都绕不过的执行门。
上下文路线:先读 Context System 与 Memory,再完成 Lab 03。你会得到一张随窗口占用率变化的保留、压缩、淘汰与阻断记录。
统一的实验记录格式
Section titled “统一的实验记录格式”每项 Lab 最后都提交同一类报告,避免只写“跑通了”:
{ "lab": "01-loop-recovery", "failure_injected": "after_effect_before_result", "expected_invariant": "duplicate_effects == 0", "observed": { "exit_reason": "injected_crash", "duplicate_effects": 0, "resumed_checkpoint": "effect_committed" }, "evidence": ["events.jsonl", "effect-ledger.json"], "remaining_risk": "external service must expose idempotency or commit lookup"}报告里至少有:故障点、不变量、观测值、证据文件和仍未解决的边界。没有证据文件的“成功”不算通过。
如何运行与保存产物
Section titled “如何运行与保存产物”从项目根目录运行全部自检:
pnpm labs:check也可以单独下载并运行:
脚本默认把临时结果写到 .agent-mechanics-lab/。这些目录不应提交;应提交的是你整理后的实验报告、关键事件和对真实系统的迁移说明。
从实验回到真实产品
Section titled “从实验回到真实产品”实验代码把网络、模型和数据库都替换成确定性模拟,这不是为了简化结论,而是为了隔离变量。迁移时按顺序替换:
- 保留事件 Schema、操作 ID 和验收断言。
- 把模拟副作用替换成一个有测试环境的真实工具。
- 把固定输入替换成模型产生的 Tool Call。
- 重跑同一故障矩阵,比较新增失败属于模型、协议还是外部系统。
如果接入模型后无法继续复现原实验,先恢复确定性版本,不要同时调 Prompt、Policy 和持久化协议。
完成标准:留下能被别人复核的机制证据
Section titled “完成标准:留下能被别人复核的机制证据”一项 Lab 只有同时满足以下条件才算完成:
- 自检命令退出码为 0;
- 至少触发一次预定失败,而不是只跑 Happy Path;
- 能指出哪一个文件或事件证明不变量成立;
- 能写出从实验到自己产品的一个迁移差异;
- 能说明实验没有覆盖什么。
下一步不是做更多 Lab,而是把其中一个断言接进你自己的 CI 或故障注入套件。
脚本与源码入口
Section titled “脚本与源码入口”附录:实验前自查
Section titled “附录:实验前自查”展开六个自查问题
- 这项实验模拟的最坏副作用是什么?
- 哪个状态是事实来源,哪个只是索引或界面?
- 故障应该落在哪两个持久化动作之间?
- 通过条件是否能由代码判断,而不是由模型自评?
- 哪个结果文件能让另一位工程师独立复核?
- 接入真实模型以后,新增了哪些不可控变量?