前十篇解释了 Harness 的组成,现在把它们连接成一个可以逐段阅读的小工程。我们不先引入复杂框架,而是让一次调用经过的所有关键位置都能直接看到。
任务仍是生成 A1042 售后报告。教学订单已签收十天,质量问题尚未确认。程序只处理这份虚构资料,不退款、不上传、不执行任意命令。本次修订没有运行以下程序、安装依赖或调用模型;下文输出都是按代码解释的预期过程。
先看清文件之间的依赖
| 文件 | 负责什么 |
|---|---|
| contracts.py下载 | 虚构输入、报告 Schema、内容摘要和固定生成器 |
| verifier.py下载 | 结构、类型和事实检查 |
| runtime_core.py下载 | 工作区、工具入口、状态、预算和导出 |
| harness_demo.py下载 | 固定错误与修复轨迹,支持暂停和恢复 |
| instruction_manifest.py下载 | 按任务类型装配规则及版本清单 |
| model_driver.py下载 | 可选真实 Claude Messages 调用循环 |
将它们下载到同一目录,使用 Python 3.11 或更高版本。核心工程只有标准库依赖。其他机制示例和源码材料见指南下载。
第一遍先不接模型
从一个不存在的工作路径启动:
# 新路径用于创建教学任务;已有普通目录不会被当成空任务覆盖。
python harness_demo.py /tmp/order-harness-demo --pause-after-draft
程序创建输入、输出和导出目录,保存输入 hash 与状态,然后故意生成状态为 paid 的错误报告。这里没有语言模型:correct_report 是普通函数,驱动代码有意改错一个字段,让失败过程可观察。
暂停后目录仍保留。读取 outputs/report.json 可以看到候选,state.json 显示目前阶段。最终交付目录此时还没有报告,不能因为候选存在就回复“已完成”。
第二遍从磁盘继续
# 同一路径表示恢复,不重新创建订单输入,也不重置累计预算。
python harness_demo.py /tmp/order-harness-demo
恢复逻辑检查输入与清单一致,再读取候选进行校验。它会发现 status 与来源中的 delivered 不一致,并输出带检查项、预期和实际的反馈。固定驱动随后写入修正后的报告,finish 再验证并导出。
预期交付包含 quality_verified=false 和 freight_decision=pending_verification。尚未核验不等于确认没有质量问题;报告保留这个区别。示例交付 JSON,若需要 Markdown,可以从已验证字段确定性渲染,避免自由文本重新引入矛盾。
再次启动已完成任务时,程序核对导出 hash 和事实检查,返回已有交付位置。它不会重新调用写报告工具。如果导出内容被改动,会明确拒绝把旧完成标志当成依据。
白名单在哪里真正生效
Runtime.call 是模型动作的入口:先检查工具名,再检查任务是否已完成,扣减持久预算,然后分派到明确实现。不存在动态 eval,模型也不能传入任意模块名或磁盘路径。
四个工具分别读取固定来源、保存候选、校验候选和完成交付。write_report 的参数只有 report,文件路径由程序确定。当前身份和订单绑定也由控制器检查,演示身份是固定常量,生产时应来自真实认证会话。
这个入口有意保持窄小,以便读者看到限制实际落在哪里。但它不是沙箱。当前用户可以直接编辑文件,敌对并发进程也不在演示保证范围内。输入目录没有被操作系统只读挂载,文中的可信单进程假设必须保留。
保存状态为何在动作前后各出现一次
工具次数在执行前扣减,以免通过崩溃重启重置预算。写报告尝试次数也先保存,再写候选;崩溃可能消耗一次未完成尝试,这是保守选择。
文件内容采用临时写入后替换,但状态与报告不是一个事务。恢复时重新验证实际候选,就是为了不只相信状态中的阶段。若初始化在多个文件之间失败,程序不会猜测哪些资料应该覆盖,而是要求检查未完成目录。
两个进程不能同时使用同一目录。升级生产时,需要锁、任务所有权、持久事务或条件写入,而不是把所有进程指向共享目录就宣称支持分布式恢复。
再把固定轨迹替换成真实模型
model_driver.py 复用同一套执行器,只替换“下一步动作来自哪里”。它使用 Claude Messages HTTP 接口:工具说明放入请求,模型返回 tool_use,程序执行后以匹配 ID 的 tool_result 回填。协议依据见官方工具调用文档。
# 先在自己的终端安全配置 ANTHROPIC_API_KEY。
# HARNESS_MODEL 使用自己账户当前可访问、支持工具调用的模型 ID。
# 此入口产生真实模型请求与费用,建议使用新的教学任务路径。
python model_driver.py /tmp/order-harness-model-demo
代码不记录 API Key,不自动跟随认证请求重定向,不执行被长度限制截断的工具调用。模型过早结束而没有通过 finish,程序会报未完成,不把自然语言声明转成成功。
模型最多累计八次请求,工具最多十二次,候选写入最多两次。它们是教学限额,不是生产推荐值。网络请求有 socket 超时,但没有完整硬墙钟取消、重试或流式实现。恢复时重建必要状态,不声称恢复原始推理过程。
真实模型可能第一次就写对,也可能在两次尝试内仍未通过。这是固定轨迹与真实调用最重要的区别:前者用于解释控制路径,后者才涉及模型实际选择。本次没有运行后者,因此没有成功率结论。
把独立机制放回完整系统
权限示例下载展示审批绑定和撤权;预算示例下载展示重复失败;委派示例下载展示只读并行与版本核对。它们不假装已经包含在线认证、子模型或上传系统。
接下来阅读开源项目时,可以用这个小实现定位对应职责:模型适配在哪里,工具入口在哪里,状态由谁保存,文件究竟落在哪个后端。第一站是Pi Agent。