应该切换到DeepSeek Harness吗?
大约一年来,我的笔记本电脑一直运行着同样有点荒谬的配置。一台36GB的MacBook Pro,Ollama以四位量化服务Qwen 3.6–27B,还有两三个我自己搭建的模型上下文协议服务器,现在已经记不清是怎么配置的了。它大约能处理我扔给它的百分之七十的任务。剩下的仍然需要调用付费API,因为困难的情况确实很困难,我在三月份左右就不再自欺欺人了。
所以当DeepSeek在8月13日开源了它的代理框架,星标计数器直线上升时,我最想知道的不是架构是否优雅。而是这个东西能否驱动已经在我SSD上的模型。
它不能,至少在我自己编写提供商条目之前不能,而找出原因的过程带我去了意想不到的地方。
1、安装就是359兆字节,你还没输入任何东西
我将@deepseek-ai/dsh安装到一个空目录中,看看实际发布了什么,而不是仓库宣传的内容。版本0.1.0-rc.6,于8月13日UTC时间12:35发布,是同一天早上发布的第三个发布候选版本。
结果是:359兆字节的node_modules,555个包清单,255个顶级依赖目录。其中196个包带有@deepseek-ai作用域。称其为带插件的框架有点低估了。它更像是一个恰好能启动的小型包注册表。
启动组合配置后,你可以直接计算行数。无头配置组装了81个插件条目。Web配置组装了129个。在我机器上运行的实例中,设置面板报告加载了133个插件,这与我独立计算的数字足够接近,我都相信。
我想公平地评价这个重量级设计带来了什么。会话日志是仅追加的,运行时强制执行一个不变量:模型看到的任何内容都必须可以从该日志中重建。去年我花了两周不愉快的时间试图弄清楚为什么生产代理做了一些愚蠢的事情,只有部分追踪可用,我不认为这个保证是装饰。这是项目中最好的想法。
但359兆字节就是359兆字节。
2、两个模型适配器发布,其中一个在撒谎
这是阅读变得有价值的地方。
包中正好发布两个模型适配器。有dsh-llm-deepseek,它做名字所说的事情,还有dsh-llm-pi-ai。第三个dsh-llm-retry是包装器而不是提供商。基础包中设置的默认模型是deepseek-v4-flash,提供商叫deepseek-official。
阅读pi-ai适配器的package.json,它自称是"dsh-llm-deepseek的设计验证双胞胎"。换句话说,是为了证明接缝是真实的而构建的第二个实现。这读起来像是内部测试夹具,我差点就继续往下看了。
然后我打开了构建文件。lib/index.js的第728行在自己的注释中将同一个类描述为"基于pi-ai的多提供商适配器"。所以我直接调用了底层提供商目录并打印了返回的内容。三十八个提供商。Amazon Bedrock、Anthropic、Google、Google Vertex、OpenAI、Azure、Groq、Mistral、xAI、OpenRouter、Cerebras、Fireworks、GitHub Copilot、Moonshot、MiniMax、Together、Nvidia,以及几个区域性的Qwen和小米计划。
Web界面无需任何探索就确认了这一点。设置,然后模型,然后添加提供商,有一个包含36个条目的下拉菜单。Anthropic位于从上数第三个,在ant-ling和azure-openai-responses之间。界面相对于目录缺少的两个条目是仅OAuth的,适配器自己的README解释说它故意不提供,因为它不运行登录流程,会返回一个无法认证的路由。这是工程诚信的小体现,我很高兴发现这一点。
同一个README提供了一个配置示例。它包含一个anthropic块,键为ANTHROPIC_API_KEY,模型名为claude-sonnet-4-5,旁边写着200,000个令牌的上下文窗口。
所以"DeepSeek Harness能运行Claude吗"的答案是肯定的,有文档记录,开箱即用,今天就可以。这使得"你应该从Claude Code切换到DeepSeek Harness吗"成为一个有点混乱的问题,因为一个合理的配置答案是Claude模型在DeepSeek的框架内运行。
还有一个我觉得暗自好笑的曲折。做所有这些提供商工作的库是@earendil-works/pi-ai,这是Pi的模型层,Pi是libGDX作者为了应对这种复杂性蔓延而编写的故意极简的编码代理。DeepSeek对Claude Code的回答将其非DeepSeek流量路由通过了最简竞争对手的核心。
3、它无法驱动的是我自己笔记本电脑上的模型
回顾那个提供商列表,看看什么不在那里。没有Ollama。没有LM Studio。没有llama.cpp。没有任何本地运行时的条目。
你可以手动到达那里。界面有一个"添加自定义提供商"按钮,适配器的README在虚构的acme-gateway下记录了这个模式:声明api: openai-completions,将baseURL指向你自己的端点,提供一个密钥环境变量。Ollama说一种OpenAI兼容的方言,所以这可行。我不是说门是锁着的。
我是说没有人建造了这扇门。三十六个提供商被认为值得编目,包括三个独立的小米区域令牌计划,而本地优先的情况被留给了手动声明的路由。对于一个最响亮的卖点是你拥有整个栈的项目,这种遗漏很奇怪。所有权显然在你停止按令牌付费的地方停止了。
4、一切都是插件,设置面板提供三个
标语是"一切都是插件",从结构上说是真的。代理循环是一个你可以通过配置交换的普通包。工具注册表、会话存储、沙箱、模型适配器,它们都并排安装,没有特权核心需要修补。我读了两遍架构文档,我相信这个说法。
然后我打开了运行实例上的设置、插件、插件配置。三个条目。Shell,限制代理运行的每个命令。代理循环,控制工具调用如何分发。Web搜索,这是DeepSeek搜索提供商。这就是整个面板。
相邻的标签列出了所有133个插件及其启用开关,热模块重载默认禁用,这是一个合理的选择,但考虑到运行时热交换是整个重量级设计存在以支持的能力,这也有点令人失望。
版本0.1的界面落后于其架构是正常的事件顺序,我不会单独对此说太多。不过它确实加剧了权衡。每个用户今天都要支付133个插件的组合成本。能够重新组合它们的好处只属于少数真正会编写一个插件的人。
5、它读取你的CLAUDE.md。两个都读。
如果我即将将这个指向真实仓库,这就是我会想要的发现。
在dsh-agent-instructions中,指令文件候选被声明为一个两元素列表:AGENTS.md和CLAUDE.md。一百行之后的注释解释说,一个目录中的不同候选"永远不会在作用域键控的状态映射中冲突",每个都在自己的键下独立跟踪。
独立跟踪意味着独立加载。如果你的项目同时包含这两个文件(现在人们为了跨工具兼容性而保持同步,这非常常见),两个都会进入提示词。如果两个文件内容相同(我的就是),你的指令集会在会话的整个生命周期中,每个请求注入两次。一位开发者的初步比较显示,未缓存输入在Pi上大约4,500个令牌,在dsh上大约47,600个令牌,任务相同。该测试者标记了自己的混淆因素,项目是预览版,所以请松散地对待这个倍数。重复不是松散的。它就在发布的代码中。
当我在那里时,我发现了更喜欢的东西。文件搜索工具将内联glob结果限制在100,内联grep匹配限制在250,文档明确指出这些数字与Claude Code的GlobTool限制和GrepTool头限制匹配。有人坐下来研究了竞争对手的行为并据此校准,而不是猜测。这是好的工程实践,在自己的README中承认这一点是不寻常的。
一个更正。几篇文章说dsh子代理可以委托给Claude Code或Codex CLI作为后端。我在发布的包中寻找了这一点,但没有找到。子代理接缝发布两个后端,fork-in-process和spawn-in-process,都在同一运行时内运行子代理。npm发布中没有提到任何竞争对手作为子代理提供商。也许它存在于某个分支,或者计划中,或者我找错了地方。它不在你安装的内容中。
6、我不切换,原因很无聊
不是因为架构不好。我认为这是今年这个类别中任何人发布的最有趣的东西,可审计性保证是我想要拥有的。
我不切换是因为切换从来不是昂贵的部分。我的Claude Code设置是一堆累积的小配置、关于什么时候打断什么的肌肉记忆,以及对哪些任务要完全移交、哪些要监督的粗略直觉。这些都不会转移。框架大约是我将要替换内容的百分之十五,dsh在其自己的README中用大写字母告诉我,其接口将在我之下断裂。
发布四天后,npm上有19个第三方插件。没有一个是本地运行时的模型适配器,但有人确实在48小时内发布了ChatGPT订阅的OAuth桥接,这告诉你需求实际上在哪里。
星标计数毫无意义。它比平台上几乎任何东西都更快地超过了130,000,我不会从那个数字中读出任何产品判断。人们星标他们打算以后看的东西。
有一个我无法说服自己排除的可能性,即令牌开销是全部故事,而不是预览阶段的缺陷。一个每个功能都是提示词中带有模式的实时插件的设计有一个底线,而底线可能很高。如果这是结构性的,优雅的架构和昂贵的账单就是同一个事实戴着两顶帽子,再多的修饰也无法将它们分开。我还不知道。我怀疑DeepSeek也不知道。
当接口停止变动时再问我。现在我有一台笔记本电脑,上面有一个完全好的本地模型,这个框架不会与之对话,除非我手写提供商,这是开源项目让我处于的奇怪位置。
原文链接:Should You Switch From Claude Code to DeepSeek Harness?
汇智网翻译整理,转载请标明出处