第 01 章 · 第一性原理:Agent = Model + Harness
本篇目标:把任意一个 Agent 系统,干净地拆成「模型」与「非模型」两半。
1.1 一个公式,两个盒子
官方 DeepSeek 官网首页把产品定位写成一行:
Agent = Model + Harness
社区 LangChain 的 Vivek Trivedy 在 The Anatomy of an Agent Harness(2026-03-10)给出等价的强表述:
"If you're not the model, you're the harness. A harness is every piece of code, configuration, and execution logic that isn't the model itself."
这个公式的价值不在简洁,在它强迫你做二分类:
| 组件 | 是模型吗 | 归类 |
|---|---|---|
| 权重、推理、采样 | 是 | Model |
系统提示词 / AGENTS.md |
否 | Harness |
| 工具定义、工具 schema 描述 | 否 | Harness(且是提示词的一部分) |
| MCP Server / Skills / 插件 | 否 | Harness |
| 文件系统、沙箱、浏览器 | 否 | Harness |
| Agent Loop、重试、停止条件 | 否 | Harness |
| 子 Agent 派发、模型路由、handoff | 否 | Harness |
| 上下文压缩、hooks、中间件 | 否 | Harness |
| 会话日志、Trajectory、回放 | 否 | Harness |
| 审批、权限预设、告警、审计 | 否 | Harness |
判据 1:答不上来「它是模型吗」的,都是 Harness。
推论:当你说「这个模型不行」时,有极大概率你在描述一个 Harness 缺陷。第 06 章会给出可操作的判别流程。
1.2 一个更硬的类比:Harness 是操作系统
社区 Beren Millidge(Scaffolded LLMs as Natural Language Computers, 2023)把原始 LLM 类比为没有内存、没有硬盘、没有 I/O 的 CPU。补全这张表:
| 冯·诺依曼部件 | Agent 系统对应 | 由谁提供 |
|---|---|---|
| CPU | LLM 权重与推理 | 模型厂商 |
| RAM | 上下文窗口(快、小、易失) | Harness |
| 磁盘 | 文件、向量库、会话日志(大、慢、持久) | Harness |
| 设备驱动 | 工具 / MCP / API | Harness |
| 系统调用 | tool call 协议与执行流水线 | Harness |
| 中断与调度 | 审批、超时、取消、子 Agent 派发 | Harness |
| 操作系统 | Harness | 你 |
这个类比给出一个直接可用的设计原则:
判据 2(能力上限):Harness 不能提升模型的推理上限,但能决定这个上限有多少比例被稳定兑现。提示词写得再狠,也换不来不存在的推理能力;但环境设计错了,会把已有的能力成片浪费掉。
原文那句「门槛不在安装,在心智模型」,工程含义就是:把优化对象从模型权重切换到环境。
1.3 三次演进:不是替代,是包含
社区 2022–2026 年 AI 工程的重心迁移,主流梳理为三到五个层次。下表合并 Nicolas Neira 的三时代与 Heym 的五层划分:
| 层次 | 回答的问题 | 作用对象 | 工作单元 | 典型产物 | 修复的失败 |
|---|---|---|---|---|---|
| Prompt Engineering | 我怎么告诉模型 | 一次请求 | 一条消息 | 提示词模板 | 模型误解任务 |
| Context Engineering | 模型每轮看到什么 | 上下文窗口 | 一轮输入 | 检索、记忆、压缩策略 | 缺信息 / 信息淹没 |
| Loop Engineering | Agent 怎么迭代 | 一次运行 | plan-act-check-retry | 循环与停止条件 | 早停 / 死循环 |
| Spec-Driven Development | 「做完」是什么 | 一个功能 | spec + 验收条件 | 可验证规格 | 做错了东西 |
| Harness Engineering | 模型在什么环境里工作 | 整个环境,跨时间 | 一次失败 | 规则、测试、闸门、告警 | 同一个错误重复发生 |
关键差异 社区:
"A context engineer asks what the model was missing. A harness engineer asks what in the environment allowed the mistake, and what would catch it next time without a person."
Harness engineering 增加的唯一新维度是时间:不是把这一轮做对,是把环境改到这个错误在类上永久消失。第 07 章整章讲这个 ratchet。
1.4 六个要素:Harness 的最小完备集
社区 一个可运行的 Agent Harness 至少包含六部分。右列给出 DSH 中的对应实现 官方:
| # | 要素 | 职责 | DSH 对应(ctx 键) |
|---|---|---|---|
| 1 | The loop | 调模型 → 执行工具 → 回填结果 → 判断停止 | core/agent-loop、ctx.agentLoop |
| 2 | Tools | 函数定义 / MCP / Skills,含模型读到的描述 | core/tools、ctx.tools |
| 3 | State & memory | 跨步骤、跨会话存活的状态 | core/session、ctx.sessions(append-only 事件日志) |
| 4 | Context management | 每轮进窗口的内容与压缩策略 | core/system-prompt、subsystems/compaction |
| 5 | Sandbox | 生成代码与命令的隔离执行 | subsystems/sandbox、审批策略 |
| 6 | Guardrails & gates | 权限范围、审批、限制、监控 | subsystems/approval、permission-presets |
docs/architecture.md 的核心包表还给出更细的接缝:ctx.llm(模型适配器)、ctx.agents(Agent 注册表)、core/scope(按 Agent 隔离注册)。这些在第 03、11 章展开。
判据 3(完备性):评审一个 Harness,逐个问「这六件事谁负责」。答不出来的那一格,就是线上事故的入口。
1.5 Inner / Outer:哪一半真正属于你
社区 Birgitta Böckeler(martinfowler.com, 2026-04-02)把 Harness 切成两层:
| Inner Harness | Outer / User Harness | |
|---|---|---|
| 谁构建 | 工具厂商 | 你 |
| 内容 | loop、内置工具、权限模型、压缩策略 | AGENTS.md / CLAUDE.md、hooks、skills、MCP、测试套件 |
| 例子 | Claude Code、Codex、Cursor、DSH 标准模式 | 你仓库里的规则文件与 CI |
| 能否改 | 只能配置或换厂商 | 可版本化、可 review、可 diff |
DSH 的特殊性在于它把 inner/outer 的边界主动拆掉了。官方 架构文档原句:
"There is no privileged core to patch: you extend dsh by mounting a plugin beside the others, and registrations are effects that unwind when their plugin unloads."
即:模型适配器、工具注册表、会话日志、Agent Loop 本身全是插件,配置层可替换。这是「一切皆插件」的工程含义,也是本系列选它做主解剖对象的原因——它把通常不可见的 inner harness 变成了可读、可改、可复盘的教材。
1.6 为什么这件事值得系统学:三组证据
| 证据 | 数值 / 结论 | 等级 |
|---|---|---|
| LangChain 仅改 Harness、模型不变 | Terminal Bench 2.0 排名 top 30 → top 5 | 社区 |
| DSH 原文 PTC 实测 | 输入 520 万 → 150 万 token,耗时 33 → 26 分钟,质量三组最好 | 实测 |
| DSH 标准模式说「你好」 | 上下文开销约 1 万+ token;极简模式约 1 千+ | 实测 |
第二、三组数字来自原文,本教程未独立复现,只用于说明量级,不作为性能承诺。但它们共同指向一个非直觉的结论:
工具越多,每次对话的固定成本越高。 二十多个工具的说明书会写进系统提示词,你每一次交互都在为它们付费。Harness 设计里存在一条明确的「能力—开销」帕累托前沿,第 09 章量化它。
以及一条评测纪律 原文:
一个 benchmark 分数,部分反映测试时使用的 Harness,而不仅是模型。
所以第 15 章要求:固定 Harness 才能比模型,固定模型才能比 Harness。 混着比得出的结论无效。
1.7 本章产出与验收
核心产出:一张你自己系统的「组件归类清单」——把当前项目里每个模块标成 Model / Harness,并标注它属于六要素中的哪一格。
验收点:
- 能指着任意一个组件,在 3 秒内判定 Model / Harness
- 能说出六要素各自在你系统里的责任模块;说不出的记为缺口
- 能区分 inner / outer,并指出哪些文件已经进了 git、哪些还只存在某个人的脑子里
- 能解释「写得更狠 ≠ 写得更准」在概率采样意义下的原因
最后一问:你现在的
AGENTS.md里,有多少行能追溯到一次具体的线上失败?答不上来,就去第 07 章。
延伸阅读
| 来源 | URL | 等级 |
|---|---|---|
| DeepSeek Harness 官网(公式与四种模式) | https://www.deepseek.com/harness/zh/ | 官方 |
| LangChain, The Anatomy of an Agent Harness | https://www.langchain.com/blog/the-anatomy-of-an-agent-harness | 社区 |
| Böckeler, Harness engineering for coding agent users | https://martinfowler.com/articles/harness-engineering.html | 社区 |
| Hashimoto, My AI Adoption Journey | https://mitchellh.com/writing/my-ai-adoption-journey | 社区 |
| DSH 架构文档 | https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/architecture.md | 官方 |
| 原文(枪手AI) | https://mp.weixin.qq.com/s/rsfp0Kie5xlDOKDsE3Fqvw | 原文 |