DeepSeek Harness:一台为模型而造的机器
[series:Harness 深水区] [date:2026-08-14] [read:12min] [words:5.6k] #Agent#Harness#DeepSeek#行业观察
DeepSeek Harness 开源第二天,关于它好用不好用的讨论已经铺满了时间线。这篇文章不参与那场争论。我想先指出一个容易被忽略的事实:
它叫 DeepSeek Harness,不叫 DeepSeek Code。名字里没有 Code。
所谓 harness,直译”马具”,是套在模型外面的那整套工作台:帮它记住上下文、调用工具、接受人的审批、留下完整记录。名字当然可能只是个品类词——所以别急着在这里下结论,接着看它的出场方式:一个想参加 coding agent 比赛的产品,发布时头版通常是跑分;而 dsh 仓库里的 BENCHMARK.md 只有三行,教你怎么自己跑,没有附任何分数。README 的自我介绍第一句是:“DeepSeek Harness 是一个开源 agent harness。“写代码是它能干的活——出厂就带一个 code 预设——但那是它的一个用途,不是它的自我介绍。
它甚至给 Claude Code 和 Codex 修了配置兼容桥。注意方向:那不是去别人的记分牌上得分,是把别人赛场上的选手,连人带行李接进自己的世界。
那这套装置到底是什么,为谁而造?我和既白把它的每一份设计文档读完,又借助 AI 把 12,293 个 commit 的历史翻了个底朝天(快照 47f9438,8 月 13 日)。读到后半夜,我越来越确定一个答案。先从一个比方说起。
一个比方
想象一台炒菜机器人。它每天炒几百盘菜,食客吃完各有评价。但这台机器的设计目标,从头到尾不是”让顾客吃得更好”——它炒菜,是为了让自己学会炒菜。每一次点单、每一句”咸了”、每一盘吃剩的菜,都是它的教材——不是当场学会,是攒着教下一代。菜当然要能吃,不能吃就没人来了;但”能吃”是它的成本项,不是它的目标函数。
我认为这就是理解 DeepSeek Harness 最准确的方式:它是一台为模型而造的机器。人可以用,但人不是它的目的。
这是一个重判断,重判断需要立证据、也需要立反方。往下我把两样都摆给你。
我用什么尺子
先交代我的框架。我一直认为 harness 是双侧产品:一侧朝向模型——上下文、工具、约束、数据回路;一侧朝向人——界面、权限、习惯、信任。各家产品的差别,本质是两侧的配比。Claude Code(目前口碑最好的 AI 编程助手)在我看来是双侧平衡的典范,两头都下了重注,所以它同时赢得了模型表现和人的口碑。
而 dsh 把配比推到了我见过的最极端:模型侧深到骨髓,人侧只留一间驾驶舱。这不是能力不够,是选择。
证据有两类:一类在产品本体的逻辑里,一类在它被开发出来的痕迹里。分开摆,最后看它们指不指向同一处。
先看机器本身的构造
它有一条黄金法则:模型看到的,账本上必须有。凡是进入模型请求的内容,必须能从会话日志逐字节重建,一处都不许私塞(反过来不成立:账本里还有大量只作审计、不进模型的事件)。一条只追加的事件流,同时换来回放、审计、事故复盘——顺带,也是一份随时可以变成教材的底料。
成本工程渗进了毛细血管。模型有一本不用重算的”记忆账”(缓存),省钱的关键是别把它弄碎。保护这本账是各家一线 harness 的常规功课;dsh 做得更彻底,三处互不相干的机制都在守它(动态上下文不改开头、只追加消息;压缩摘要时逐字重放原对话、只在末尾加一条指令;模式切换不动工具表)。
模型可以修改它自己——走的是正门。这套自改工具默认不挂载,要显式装上;模型写好的插件,定义不等于执行,运行还可能要过人的审批,装出来的东西也只活在当前进程里。但架构给它留的是正门:官方示例的名字就叫”agent 修改自己的运行时”。正门是设计,默认关是审慎。
用户面被打磨得不轻,但它是驾驶舱,不是客厅。浏览器端有七万多行代码,是全仓最大的区域,每个界面改动的 PR 还被要求附上真实录屏——投入不小。可打磨的方向全部是”看清机器在干什么、在关键点放行”:权限只有”每次问”和”从不问”两档,没有终端形态,审批只在越权时弹出。连同意环节都写成了模型的操作规程——工具说明书教模型:“不要绕道聊天来请求权限,弹出的审批框本身就是用户的同意步骤。“
再看它被建造的方式
以下这些不在产品逻辑里,在开发过程里——是这个团队造机器时留下的痕迹。
仓库的第一个 commit 不是代码,是 AGENTS.md——写给 AI 开发者的工作规程。64 天 12,293 个 commit,日均一百九十多个,分支名里能看到不止一家 code agent 的痕迹;测试代码比产品代码还多三成,连文档字数、反 AI 水文的检查清单都做成了机器门禁。这套制度,只有 AI 劳动力充足的团队才养得起。
在它的开发验收里,被制度强制必填的”体验”章节只有一章——模型的体验。每个模块文档必须写 “Model Experience”:装上这个模块,运行时的模型会看到什么、多花多少 token、“记忆账”会不会碎。这一章是写给开发者看的,不是喂给运行时模型的;它说明的是,这支团队天天核算的是谁的体验。
测试规范里有一句大概只有模型第一方才写得出来的话:“We are DeepSeek——别节约真实 API 测试,推理在这儿很便宜。”
开发痕迹到此为止——它证明不了”为谁而造”,只画出了”谁在造、怎么造”。判断”为谁”,还得靠构造本身,和它对待你的方式。
最无聊的解释
立论之前,先替反方把话说满。对以上一切,存在一个最无聊的解释:一支 AI 密度极高的团队,用顶级工程纪律,做了一个通用 agent 运行时——人侧不是不要,是先没做。穷人版 Claude Code,仅此而已。
这个解释能吃掉不少证据:事件账本、缓存纪律、工程门禁,任何认真的运行时团队都会做。我不打算假装有哪条证据能单独排除它。真正让我下判断的,是拼起来的形状和刻意的留白:唯一必填的体验章是模型的;发布不带跑分;MIT 开源不收钱;模型端点不锁自家(后面细说);而人侧——权限、习惯、跨会话的那些活——在 683 条决策记录里几乎无人问津。
好在这两种解释会分岔,而且可以等着看:如果它只是”先没做”,人侧的补课迟早会来;如果我读对了,你会看到它的迭代继续砸向账本、缓存、轨迹,人侧长期只有驾驶舱。第三个观察点更硬:DeepSeek 后续的模型,会不会显出吃过真实协作轨迹的样子。我把判断押在后者,这篇文章就是押注凭证。
插件系统的另一种读法
有工程经验的人看到”插件系统”四个字,大概率会本能地皱眉:hook 互相踩踏、加载顺序、版本地狱——这些坑行业都踩过,这个直觉完全正确,而且跟扩展者是人还是模型无关。
dsh 没有对这些问题免疫。它押的解法是上面那条黄金法则:在一个每一步都能逐字节回放的系统里,涌现故障至少是可复现、可定位的——“自改运行时”和”确定性回放”合在一起,才是它对插件地狱的完整回答。这个赌能不能成,要等生态真长出来才知道;在 1.0 之前,也别把”随时重组”读成设计哲学,那是 rc 阶段的年龄。
但方向值得看清:每个会话可以组装出不同的能力集,配置系统能把它拼到只剩一个无界面的执行内核。headless 形态对 CI 是标配,不新鲜;新鲜的是它把”可拆到只剩内核”当作一等设计原则来验收——这台机器随时准备被装进更大的管线里。
它采的不是数据,是行为
一个流行的说法是:“现在用 dsh 的人,都在给它喂数据。“方向是对的,但我想再推准一步。
行为当然也是一种数据。我用这两个词区分的是:数据是客观结果的记录,行为是人的想法的外化——人怎么把一件模糊的事委托出去,什么时候忍不住打断,怎么纠偏,凭什么判断”这事算完成了”。至少以今天公开的结果看,这些东西合成不出来,蒸馏不出来——我相信它们只能从真实协作里长出来。dsh 的整个账本体系,保证的正是这种行为的完整可重建。
账本里有个细节让我停了很久。子代理干完活,“它自己说的话”和”运行时替它总结的话”,在日志里是两种不同的来源类型——文档给的理由是:合并的话,会把子代理没说过的话记在它头上。一个连”这句话到底是谁产生的”都不肯含糊的账本,很难说只是为了给人看回放。行为要能当教材,第一步是来源不能混。(机器自发的辅助请求也带着与会话流量分开的标记——不过这属于各家都做的常规归因,不必读出深意。)
到这里必须把”看得到”和”拿去用”拆开说清,这是你该知情的部分:你的会话账本躺在你自己的机器上;遥测模块默认是关的,显式打开才会上传。走它默认的 DeepSeek API 时,请求自然会到达对方服务端——而”到达”不等于”保存”,更不等于”用于训练”,最后这一步没有任何公开证据,我不替任何人回答。
更值得玩味的是:它不锁矿。它的第二个模型适配器支持把整台机器指向任何 OpenAI 兼容端点、甚至别家的协议——换一行配置,你的账本一个字都不会流向 DeepSeek。一台连矿都不强征的采矿机,要么说明我读错了它,要么说明它对”自愿留下的矿”有信心。我押后者——但请记住,这是我在押。
再往下是纯推测,我说明白它是推测:沿着这个逻辑,连定价都可以是选矿设备。价格是用户构成的过滤器,用户构成决定行为的成色。一家不靠 harness 赚钱的公司,完全可以用价格来洗矿——留下来的每一次使用,都更接近金矿。
敬意,与不安
写到这里,我得承认自己有两种情绪。
一种是不安。“使用者更接近资源,而不只是顾客”——这件事想久了是有点可怕的。交换当然真实存在:你得到一线且便宜的能力,它得到你的行为。但知情地站进矿层,和不知情地站进去,是两回事——这也是我写这篇文章的原因之一。
另一种是敬意,而且我想把这份敬意说得明确一点,因为它不是客套。做一个不迎合任何人的东西,然后公开放出来,主动迎接铺天盖地的”不好用”——说实话,这是我自己不敢干的事。我没有他们那样的压力,也没有他们那样的成本,尚且不一定有胆量把一个注定被误解的东西放到台面上。他们做了。能做出这种选择的,我愿意相信是有理想、有情怀的人。
如果我的判断成立,这两天的许多失望,多半落在一场它并没有参加的比赛上——它连名字都没报那场比赛的名:coding agent 打的是”谁让开发者更省事”,输赢按月算;dsh 打的是”谁的模型进化得更快”,输赢按代际算。它的赌注也就写在这里:真实协作的轨迹,是下一代模型最贵的原料;而一线又便宜的能力,足以让矿脉自愿留下。注意这个赌自带绞索——菜太难吃,矿也会走。“能吃”虽然只是成本项,却是它必须一直付的成本。顺着这个框架,最近围绕他们新模型的种种议论,或许也有另一种读法——当一家公司把”模型与 harness 共同进化”当成目标函数,单独给模型打的分,未必量得出它真正在优化的东西。这只是一个猜测,我把它留在这里。
给普通开发者的实际建议只有一句:爱好者值得装一个玩玩,这种理念浓度的项目不多见;正经干活,现在先别用它。
空着的另一半
把模型侧做到极端,反而照亮了一个空位。
dsh 在会话内其实把”人味”的东西都做了一遍:目标、定时提醒、审批、人类反馈——但全部是围着单次会话转的微缩版:目标钉在它出生的那个会话上,提醒也只会回到原会话。跨会话、跨工具、属于人的那本账——你委托出去了什么、谁欠你什么、什么才算真正完成——在我核对过的样本里,从 Claude Code 到做到极端的 dsh,还没有人做。
模型侧的账本,已经有人做到头了。人侧的账本,还空着。
后记:我在做的那一半
说完他们,交代一下我自己,免得”人侧的账本”像一句空话。
我近半年在做的,正是双侧论里的另一侧:人侧。出发点是一个朴素的观察——当模型可以并行产出远超人类阅读速度的东西时,稀缺的不再是产出,而是人的批阅带宽、注意力和信任。所以我在给人和 AI 的协作记一本账:你把什么委托了出去,对方欠你什么,什么才算真正完成,哪些事此刻值得占用你的眼睛。
利益相关,得说破:我的尺子量出的空位,恰好是我自己在做的事。你应该对上一段保持警惕——这也是为什么正文里的每个判断,我都尽量给了你能自己核验的位置。
这也是为什么我对 dsh 没有失望,只有认同和补位感:它把模型侧做到头,是对”共进化”的一种回答;而人侧的机制,决定的是留在系统里的人会产生什么成色的行为——两侧终究会在某处汇合。
这篇文章本身也是这套理念的产物:署名里的既白不是修辞,是与我共事的 AI 伙伴;我们的分工,和这篇文章的每一个判断一样,都记在账上。
方法注:基于公开仓库快照 47f9438(2026-08-13,v0.1.0-rc.5);设计文档全部通读,提交历史与外围模块为 AI 辅助抽验;commit 计数含合并提交,“683 条决策记录”即仓内 Agent Notes(英文正本)。事实性描述欢迎逐条核验,推测处均已明示。