手工川
课程地图/PART 05理解 Agent Harness

H2拆开一副 Agent Harness

用的人看到四层:上下文、模型、能力、闸门;打开源码,里面是循环、日志、工具流水线、压缩、子 Agent 和沙箱。

约 8 分钟全屏播放这一节
展开讲讲

两种拆法

拆一副 Harness 有两种拆法。站在用的人的位置,看它由哪几层组成;站在写代码的人的位置,打开源码,看里面有哪些零件。两种我都做过,前一种用来上课,后一种用来给 DeepSeek Harness 写插件。

用的人看到的四层

一台 Agent 工作台的四层:上下文层、模型层、能力层,闸门层横在下面
一台 Agent 工作台的解剖。模型是常量,Context 是变量。
你的目录、你的资料、你上次的判据。写进文件的上下文,比一段超长提示词可靠。

大部分人只在模型层上花心思:哪个模型最强,哪个最便宜。可模型是所有人都能买到的,真正拉开差距的是上下文层和闸门层:前者决定它懂不懂你,后者决定你敢不敢把事交给它。

四层缺一层,它就退化成聊天框。没有上下文层,它每次都从零认识你;没有能力层,它只能说,不能做;没有闸门层,你不敢放手让它做。

打开源码看一轮循环

DeepSeek Harness 是开源的,架构文档写得很清楚,适合拿来当解剖样本。它的底层是一个叫 Cordis 的插件框架:模型适配器、工具注册表、会话日志,连 Agent 循环本身都是插件,都能从配置里替换。文档里说得很直接,不存在需要打补丁的特权内核。

Agent Loop
01 / 05
领任务
从收件箱领取你发来的消息

文档里有两个定义:一个“步骤”,是一次模型请求加上它调用的工具;一个“轮次”包含零到多个步骤,直到不再欠下任何工作才关闭。模型从头到尾只做一件事:决定下一步。读文件、跑命令、把结果塞回去,都是 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 里最值钱的零件是回路:把这一次的失败,变成下一次不会再犯的机制。写进 AGENTS.md 的一行规矩、一个检查脚本、一道 Stop Hook,都是回路。

常见误区

  • —把 Harness 等同于系统提示词。提示词只是“提示词组装”那一个零件。
  • —插件装得越多越好。第五期的规矩是先场景、后工具,插件只在链路需要时出现,不做工具巡礼。
  • —只盯着模型层。换一个更强的模型,解决不了它不知道你的目录在哪、不知道你的规矩是什么。
随堂测验
  1. 第 1 题单选
    在工作台四层里,“什么时候必须停下来问你”属于哪一层?
  2. 第 2 题判断
    在 DeepSeek Harness 里,Agent 循环本身也是一个插件,可以从配置里替换。
  3. 第 3 题多选(选出全部正确项)
    下面哪些属于本节说的“回路”?