第 16 章 · 生产级 Harness 七层架构

本篇目标:搭出「凌晨三点没人看着也能安全跑完」的系统。 社区 生产 Harness 与编码 Harness 的根本差别:编码 Harness 每个 loop 末端都有一个人,生产 Harness 常常没有。


16.1 两种 Harness 并排

社区 对照表(左列为常见工程实践,右列为 Heym 公开运行时的实现,仅作参照,不是规范):

部件 Coding Harness Production Harness
Guide AGENTS.md(CLAUDE.md 指向它) System prompt、skills、tool descriptions
Constraint 行数上限、typecheck、lint Docker sandbox、guardrails、深度与时间限制
Gate Pull request review 人类审核:Accept / Edit & Continue / Refuse
Computational sensor Coverage tests + 数百个测试文件 Run status、traces、时间窗告警
Inferential sensor 每个 PR 一次 AI review Eval suite + LLM-as-judge
Record 每条规则的 git 历史 Traces + audit log
人是否在环内 ✅ 末端必有 ❌ 常常没有

判据 20:把「有人会看」当成默认传感器,是生产事故最常见的设计假设。无人值守时,gate 必须坐在 run 内部,sensor 必须按时间窗触发。


16.2 七层运行顺序

① Guide      事前引导        → 系统提示词 / skills / tool 描述
② Constrain  环境约束        → 沙箱 / guardrails / 深度与时间上限
③ Gate       副作用前审批    → pending + 一次性 review link
④ Sense      事后反馈        → trace / eval / 确定性检查
⑤ Alert      时间窗告警      → error / duration / cost / execution count
⑥ Audit      贯穿全程        → 一行一动作,脱敏后落持久存储
⑦ Recover    失败恢复        → fallback 凭据 / fallback 模型 / Error Handler

社区 一句关键判断:"Each stage catches a different failure, so a production harness needs all of them, not the strongest one." 只做最强的那一层,其余六类失败照旧发生。


16.3 逐层落地清单

① Guide

  • system prompt 只写模型无法从代码推断的内容(命令、禁区、done 的定义)
  • 大份文档做成 skill,按需 prepend;skill 的 Python 文件可变成 Agent 可调用工具
  • node 作为 tool 暴露时,只允许 Agent 填标记为 agent-provided 的字段;其余保持配置值(例:未授权时 Agent 不能改 Slack channel)
  • tools 来源明确:MCP(stdio / SSE)、sub-agents、workflow nodes

② Constrain

社区 一组可直接借鉴的默认值(Heym 公开运行时,不是通用规范,按自己场景调整):

参数 默认 意图
Agent 代码执行 throwaway Docker container 一次性、可丢弃
Docker socket 不挂载 防止逃逸到宿主
Docker 不可用 fail closed 静默降级 = 无隔离裸奔
运行用户 non-root 最小权限
Linux capabilities 全部 drop 最小权限
根文件系统 read-only 防持久化篡改
Guardrail 分类 11 类(含 prompt injection) 消息进模型前用独立凭据与模型检查
子 Agent / 子工作流深度 5 防递归爆炸
Tool call 超时 30 s 防挂死
Model response 超时 60 s 防挂死
Tool loop 最大迭代数硬上限 防死循环
压缩阈值 窗口 80% 提前压缩,保留 system / first user / latest

"No defaults for safety decisions." 社区 缺 placement 就让构建失败,缺 sandbox 就让 run 失败。任何静默 fallback 都在隐藏一个本该有人拍板的安全决策。

③ Gate

  • 开启 human review 后,Agent 获得 request_human_review 工具,run 转为 pending
  • 生成一次性 review link;社区 参照值 168 小时过期
  • 三种结果:Accept / Edit & Continue / Refuse;从 stored snapshot 恢复
  • gate 只放在 side effect 前:send / pay / delete / change records
  • 原则:fewer, better gates —— 每步都 gate 会训练审核者无脑点 Accept

④ Sense

  • 每次 model call 与 tool call 全记:status、start、finish、duration
  • payload 脱敏 + 限制大小
  • 开 OTel 时导出 workflow span / 每 node span / 每 tool call span
  • eval 用例来自真实输入;评分用 Exact Match / Contains / LLM-as-judge(judge 温度 0)
  • 能确定性检查的,一律不用模型判断

⑤ Alert

  • 四类:error threshold、workflow duration、token/USD cost、execution count
  • 基于时间窗,不基于单次事件:「一次失败是噪音,十分钟十二次是事故」
  • 保存前对最近 24 小时做 backtest,避免静态阈值一上线就误报
  • 告警与 cost budget 联动(第 18 章)

⑥ Audit

  • 每条 security-relevant action 一行:who / to what / succeeded
  • always on,不可关闭
  • 字段名含 password / secret / token 的,写入前替换为 ***
  • 日志不能只留在容器 stdout,必须 ship 到持久存储

⑦ Recover

  • 配置 fallback 凭据 + fallback 模型;主 provider 失败先按第二套凭据重试
  • blocked message 可被 Error Handler 捕获,不要直接崩掉整条流水线
  • 每个失败路径写清:重试 / 跳过 / 升级人工,以及是否幂等(第 14 章状态契约)

16.4 从零起步的最低路径

社区 Heym 给的「这周就能开始」五步,不要求先有平台:

  1. 写下最近 5 次 Agent 犯的错(症状 / 文件 / 正确行为)
  2. 每条错误写一条带原因的规则(AGENTS.md 一节一条)
  3. 给关键规则写 coverage test,失败消息写明修复方法
  4. 给生产运行加传感器:全量 traces + 真实输入的 eval suite
  5. 在 side effect 前加 gate,并配时间窗告警与审计

顺序很重要:先有失败记录,再有规则;先有规则,再有测试;先有 traces,再有告警。 反过来做(先上平台再找问题)通常得到一个很贵但没人用的 Harness。


16.5 在 DSH 上的映射

层 DSH 接缝 官方
Guide ctx.systemPrompt、Skills、agent.inject()
Constrain ctx.sandbox、permission-presets、审批策略
Gate subsystems/approval、subsystems/user-questions
Sense subsystems/session-telemetry、append-only 事件日志、Trajectory
Alert 需自建(推断 用事件日志消费者 + 外部告警系统)
Audit 事件日志天然可审计;但需外送持久存储并脱敏
Recover assistant/attempt 保留失败尝试、llm 适配器可换 provider

⚠️ 重要边界:官方 SAFETY.md 明确 DSH 未经过安全审计、不得视为生产就绪。上表是「用 DSH 作为参照实现来理解七层」,不是「把 DSH 直接搬上生产」的建议。真正上生产请走隔离容器、固定版本、自建告警与审计,详见第 17 章。


16.6 本章产出与验收

核心产出:一份七层逐项勾验的 checklist(可直接用 appendix/production-checklist.md),加一次无人值守 7×24 试跑记录。

验收点:

  • 能说明为什么 gate 只放 side effect 前
  • 能列出四类时间窗告警,并解释为何不用单事件阈值
  • 能指出自己系统里缺失的层,并说明该层专门拦截哪类失败
  • 能说清 fail closed 与静默 fallback 的区别
  • 能解释「DSH 不能视为生产就绪」对架构决策的约束

延伸阅读

来源 URL 等级
Heym, Harness Engineering: From AGENTS.md to Production https://heym.run/blog/harness-engineering 社区
Heym 文档 · Guardrails / HITL / Alerts / Audit / OTel https://heym.run/docs/reference/guardrails 社区
Databricks, What is an AI Agent Harness?(8 building blocks) https://www.databricks.com/blog/ai-harness 社区
InfoQ · Microsoft Agent Framework Harness GA https://www.infoq.com/news/2026/08/agent-framework-harness-ga/ 社区
DSH SAFETY.md https://github.com/deepseek-ai/deepseek-harness/blob/master/SAFETY.md 官方
官方文档 · 审批 / 权限预设 / 沙箱 / 遥测 https://deepseek-harness.github.io/deepseek-harness/reference/subsystems/ 官方
附录 C · 生产级验收清单 ../appendix/production-checklist.md 本系列
本系列为本站原创教程,基线为微信公众号《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 入门到精通》。