Agent Harness 从入门到精通 / A03
附录 C · 生产级验收清单
用法:上线前逐条勾。任何「安全决策」类条目没有明确答案,即视为不通过,不允许静默 fallback。 依据:第 16 章七层架构、第 17 章威胁模型、官方 DSH
SAFETY.md、官方 Claude Code 权限/沙箱文档、社区 Heym 公开运行时默认值。
0 · 前置门禁(不通过则停止上线)
- 已读并理解
SAFETY.md:未经过安全审计,不得视为生产就绪 - Harness 运行在独立隔离边界内(一次性 VM / 容器 / 专用主机),不是开发者笔记本
- 宿主上没有生产凭据;API key 为专用、限额、可撤销
- 工作区可回滚(已提交 / 副本 / 快照),并有备份
- DSH / 框架版本已固定,锁文件进 git
- 架构文档里明确写了一句:本 Harness 不是安全边界
- 已确认本系统不依赖 Harness 内部沙箱提供「保证」级隔离
① Guide · 事前引导
AGENTS.md每条规则可追溯到一次真实失败(编号 F-xxx)- 每条规则写明:为什么 / 哪个文件负责 / 哪个测试兜底
- 文件控制在约 300 行以内,优先指针而非拷贝大段文档
- 大份文档做成 Skill,按需加载,不常驻上下文
- 系统提示词只含模型无法从代码推断的信息
- 「Done」定义为可机器判定的状态,附验收条件
- 工具描述写清「何时用 / 何时别用」,枚举完整,参数带单位与例子
- node 作为 tool 暴露时,仅 agent-provided 字段可由模型填写
② Constrain · 环境约束
- Agent 生成代码跑在一次性容器中,不挂载 Docker socket
- 容器不可用时 fail closed,不静默降级
- 以 non-root 运行;Linux capabilities 全 drop;根文件系统只读
- 文件系统
allowWrite/denyWrite/denyRead显式列出 - 网络默认 deny,
allowedDomains白名单 - 权限 Deny 规则与沙箱规则同时配置(两者覆盖面不同)
failIfUnavailable: true,allowUnsandboxedCommands: false- 凭据:
credentials.files拒读 +envVars.mask哨兵替换 - 子 Agent / 子工作流调用深度有硬上限(参照值 5)
- tool call 超时(参照 30s)、model response 超时(参照 60s)
- tool loop 有最大迭代数;每轮估算 token
- 上下文压缩阈值(参照窗口 80%),保留 system / first user / latest
- 每次压缩写进 run trace
- 没有任何「缺配置就走默认值」的安全分支
③ Gate · 副作用前审批
- 只对 send / pay / delete / change records 等副作用设 gate
- run 转为
pending,生成一次性 review link(参照 168h 过期) - 三种结果齐备:Accept / Edit & Continue / Refuse
- 从 stored snapshot 恢复,不重跑已完成动作
- 副作用接口幂等(重复投递不会产生重复效果)
- 调度器的「不保证恰好一次」已由业务逻辑补偿
- 没有「每步都 gate」造成的审核疲劳
④ Sense · 事后反馈
- 每次 model call / tool call 记录 status、start、finish、duration
- payload 脱敏且大小受限
- OTel 导出 workflow / node / tool call span
- eval suite 用例来自真实输入,含成功 / 失败 / 边界 / 对抗样本
- 评分方式明确:Exact Match / Contains / LLM-as-judge
- LLM-as-judge 固定
temperature = 0,并给出 rubric - 能确定性检查的项目未使用模型判断
- 关键
AGENTS.md规则有 coverage test,失败消息写明修复方法 - 验证 Harness 改动的方法固定为:固定模型 → 只改一处 → 重跑同一 suite
⑤ Alert · 时间窗告警
- 四类告警齐备:error / duration / cost / execution count
- 全部基于时间窗,不是单事件阈值
- 上线前用最近 24 小时数据做 backtest
- cost budget 有硬上限与熔断动作
- 告警有明确接收人与升级路径
⑥ Audit · 贯穿全程
- always on,不可关闭
- 每条 security-relevant action 一行:who / to what / succeeded
- 字段名含
password/secret/token的写入前替换为*** - 日志外送到容器之外的持久存储
- append-only 事件日志可重建任意一次模型请求
- 日志保留期与合规要求已确认
⑦ Recover · 失败恢复
- fallback 凭据 + fallback 模型已配置并演练
- blocked message 可被 Error Handler 捕获,不崩整条流水线
- 每条失败路径写明:重试 / 跳过 / 升级人工 + 是否幂等
- 有卡住(stall)检测与自动恢复
- 宿主重启后的恢复行为已验证
- 事故响应六步(隔离→保全→重建→定责→固化→验证)已写成 runbook
8 · 规模化附加项(10+ 并发)
- 每 Agent 一个 worktree,零共享可变状态
- 任务板 + 原子任务认领,无双重派发
- 按 session 的 token / USD 记账可见
- 模型分层:规划用强模型,执行/校验用中档
- 确定性节点(linter / 建分支 / push)与智能体节点分离
- always-on 宿主 + 健康监控,不是「屏幕 + 祈祷」
9 · 上线后 30 天复审
- 删掉「删了也不会再出错」的规则
- 区分永久约束与补偿模型弱点的临时规则,后者已删除
- 每次事故都新增了一条永久 eval 用例
- 对照实验报告已归档,含失败样本与证伪条件
- 告警阈值按实际分布重调(静态阈值会失效)
判据速查
| 判据 | 一句话 |
|---|---|
| 强制 vs 建议 | 需要 100% 生效的约束必须由代码执行 |
| 可逆 vs 不可逆 | ctx.effect() 撤不回 git push |
| Gate 位置 | 只放副作用前 |
| 告警 | 一次失败是噪音,十分钟十二次是事故 |
| 验证 | 固定模型、只改一处、重跑同一 suite |
| 隔离 | Harness 内沙箱降低概率,Harness 外边界才提供保证 |
| 失败决策 | 缺 placement 让构建失败,缺 sandbox 让 run 失败 |
本系列为本站原创教程,基线为微信公众号《DeepSeek Harness 最新高阶指南》(2026-11-05),并汇总 DeepSeek 官方仓库与文档站、Cordis / arXiv:2608.25512、以及 OpenAI / Anthropic / LangChain / Martin Fowler 等一手资料。每条引用均标证据等级,完整清单见 附录 B;未定位到一手来源的线索单列,未编造补位。DeepSeek Harness 为 developer preview,官方 SAFETY.md 明确「未经过安全审计、不得视为生产就绪」,命令与配置键可能随版本失效。资料截止 2026-11-06。姊妹篇:《FDE 入门到精通》。