H2拆开一副 Agent Harness
用的人看到四层:上下文、模型、能力、闸门;打开源码,里面是循环、日志、工具流水线、压缩、子 Agent 和沙箱。
两种拆法
拆一副 Harness 有两种拆法。站在用的人的位置,看它由哪几层组成;站在写代码的人的位置,打开源码,看里面有哪些零件。两种我都做过,前一种用来上课,后一种用来给 DeepSeek Harness 写插件。
用的人看到的四层

大部分人只在模型层上花心思:哪个模型最强,哪个最便宜。可模型是所有人都能买到的,真正拉开差距的是上下文层和闸门层:前者决定它懂不懂你,后者决定你敢不敢把事交给它。
四层缺一层,它就退化成聊天框。没有上下文层,它每次都从零认识你;没有能力层,它只能说,不能做;没有闸门层,你不敢放手让它做。
打开源码看一轮循环
DeepSeek Harness 是开源的,架构文档写得很清楚,适合拿来当解剖样本。它的底层是一个叫 Cordis 的插件框架:模型适配器、工具注册表、会话日志,连 Agent 循环本身都是插件,都能从配置里替换。文档里说得很直接,不存在需要打补丁的特权内核。
文档里有两个定义:一个“步骤”,是一次模型请求加上它调用的工具;一个“轮次”包含零到多个步骤,直到不再欠下任何工作才关闭。模型从头到尾只做一件事:决定下一步。读文件、跑命令、把结果塞回去,都是 Harness 在干。
还有一条原则叫“模型可见即已记录”:送进模型请求的一切,都必须能从会话日志里重建出来。恢复中断的会话、分叉会话、压缩上下文却不删记录,都建立在这一条上。讲义里我反复说“对话历史会丢,文件不会”,在 DeepSeek Harness 里,这份文件就是会话日志。
零件清单
| 零件 | DeepSeek Harness 里的包 | 负责什么 |
|---|---|---|
| Agent 循环 | core/agent-loop | 一步步驱动干活;本身也是可替换的插件 |
| 会话日志 | core/session | 只追加的事件日志,模型看到的历史从这里派生 |
| 提示词组装 | core/system-prompt | 把提示词片段和工具说明拼成一次请求 |
| 工具与流水线 | core/tools、fs、shell、web | 注册工具;执行前、执行中、执行后都能挂策略 |
| 上下文管理 | context、compaction、skill | 注入工作区说明,按需加载 Skill,太长就压缩 |
| 分身与后台 | subagent、jobs、schedule、goal | 委派子 Agent,跑后台任务、定时任务和持续目标 |
| 安全与卫生 | sandbox、guard | 限制进程能碰什么;重复调用同一工具时提醒,超时就报错 |
整理自 DeepSeek Harness 仓库的架构文档与包目录(0.2.x 开发者预览版),包名以后可能会变。
包名不用背。除了前面说的模型适配器,这张表里直接跟模型打交道的只有提示词组装,剩下大部分是老老实实的软件工程:日志、权限、超时、沙箱。
我的七个插件挂在哪
第五期开课前,我给 DeepSeek Harness 写了七个插件,都发在 npm 上,名字统一以 @lovstudio/dsh- 开头。拿四层去对:
| 插件 | 我被绊了一下的地方 | 挂在哪一层 |
|---|---|---|
dsh-llm-config | 模型配置到处抄 | 模型层 |
dsh-account-balance | 额度还剩多少,看不见 | 模型层 |
dsh-inject-system-prompt | 每次都要重复交代我的规矩 | 上下文层 |
dsh-plugin-marketplace | 找不到别人写的插件 | 能力层 |
dsh-frontend-inspector | 点了页面,找不到源码在哪 | 能力层 |
dsh-better-command | 斜杠命令记不住全名 | 给人用 |
dsh-better-restart | 改完配置要重开 | 给人用 |
最后两个不属于四层里的任何一层,它们照顾的是坐在电脑前的我。
最容易被忽略的是回路
讲义第二章我写过“在终点放一个检查”:Agent 准备结束时,自动跑测试、看改动、让另一个 Agent 审一遍,没过就接着改。这类机制叫 Stop Hook。Mitchell Hashimoto 也是这个思路,他把 AGENTS.md 和截图脚本、只跑相关测试的脚本配合起来用,让 Agent 能自己验证做得对不对。
抓取活动行 3,839 个活动那次,我一共跑了四轮。每一轮的失败都变成了下一轮的配置改动,没有一轮是从头再来。
如果你今天的第二轮和第一轮唯一的区别是“我又说了一遍”,那你没有回路,你只是在重复。
常见误区
- —把 Harness 等同于系统提示词。提示词只是“提示词组装”那一个零件。
- —插件装得越多越好。第五期的规矩是先场景、后工具,插件只在链路需要时出现,不做工具巡礼。
- —只盯着模型层。换一个更强的模型,解决不了它不知道你的目录在哪、不知道你的规矩是什么。
- 第 1 题单选在工作台四层里,“什么时候必须停下来问你”属于哪一层?
- 第 2 题判断在 DeepSeek Harness 里,Agent 循环本身也是一个插件,可以从配置里替换。
- 第 3 题多选(选出全部正确项)下面哪些属于本节说的“回路”?
