你选了一个便宜的模型。你对着模型卡片算了一遍账。然后账单来了,和你的计算完全不一样。
这个差距几乎从来不是模型的问题。是工具链(Harness)的问题。工具链决定了你的模型被调用了多少次,每次调用时有多少对话内容被重放,工具描述有多大,以及一个失败的测试运行是重试三次还是十二次。同款模型,同样的任务,两个不同的工具链,Token 数量天差地别。
2026年8月13日,DeepSeek 开源了自己的智能体工具链,争论立刻变得激烈起来。一方是来自模型研发实验室、上线仅两周的代码仓库。另一方是 GitHub 上最受关注的编程智能体 OpenCode。两者都是 MIT 许可证。两者都可以运行你指定的任何模型。
所以,这才是诚实的对比版本。不是凭感觉,也不是看星标数。而是看每个工具链实际对你的 Token 用量做了什么,以及如何在大约十五分钟内,在你自己的代码仓库上测量它。
关键要点
- DeepSeek Harness 是 DeepSeek AI 推出的插件优先的智能体运行时,采用 MIT 许可证,使用 TypeScript 编写,仍标注为开发者预览版。模型、工具、会话、存储、沙箱、循环,甚至智能体循环本身都是可替换的插件。
- OpenCode 是一个 Go 语言编写的、终端原生的编程智能体,在 GitHub 上约有 19.8 万个星标,拥有成熟的 TUI、LSP 支持和庞大的供应商目录。它是目前安全可靠的默认选择。
- 工具链的选择对 Token 使用量的影响超出大多数人的预期。 在一个使用 DeepSeek V4 Flash 的 30 个工作流基准测试中,被测试的工具链每个任务的平均 Token 数量从大约 192,000 到 1,400,000 不等。
- DeepSeek Harness 并不在该基准测试中。 它在基准测试发布两天后才发布,所以现在引用 DeepSeek Harness 的基准测试数据的人都是在猜测。
- 两者都与模型无关,因此你可以将两者指向同一个兼容 OpenAI 的端点,进行真正的一对一测试。这唯一重要的数字,就是针对你的代码库的实际结果。

阳光书桌上并排放置的两台笔记本电脑,运行着相同的编码任务,但使用两个不同的智能体工具链
对 DeepSeek Harness 与 OpenCode 进行公平比较的唯一方式:一个模型,一个任务,两个终端。
为什么 DeepSeek Harness 与 OpenCode 成了本月争论的焦点
DeepSeek 的框架是一个口号:智能体 = 模型 + 工具链。模型负责思考,工具链负责读取文件、运行终端和调用工具。两年来,每个人都在优化前者,而把后者当作管道来处理。
结果发现,管道成本很高。
Composio 运行了 30 个复杂的多应用工作流,通过 8 个不同的智能体工具链,全部驱动同一个 DeepSeek V4 Flash 模型,每个任务有 900 秒的时间限制,并在 240 次运行中进行了二进制程序化评分(Composio,2026 年 8 月)。所有地方都使用相同的模型。结果相差甚远。
| 工具链 | 通过率 | 中位数时间 | 每个任务平均 Token 数 |
|---|---|---|---|
| Pi Agent | 66.7% | 132.2s | 559,000 |
| Prime Agent | 62.5% | 242.1s | 1,400,000 |
| OMP | 56.7% | 272.4s | 742,000 |
| Claude Code | 53.3% | 122.7s | 742,000 |
| Codex | 53.3% | 245.0s | 678,000 |
| DeepAgents | 53.3% | 187.1s | 665,000 |
| Hermes Agent | 50.0% | 175.5s | 192,000 |
| OpenCode | 46.7% | 129.7s | 692,000 |
再看看 Token 这一列。最节俭的工具链使用的 Token 数量大约是最浪费的那个的七分之一,而运行的是相同的模型和相同的任务。该基准测试自己的结论是,工具链“可能和它们运行的模型一样重要”。
现在,大多数文章都跳过了这一部分。DeepSeek Harness 不在那个表格中。 基准测试于 8 月 11 日发布,而 Harness 于 8 月 13 日才发布。目前还没有可靠的、针对 DeepSeek Harness 的一对一 Token 数据,如果有人本月向你展示这样的数据,要么是他们在一个狭窄的任务上自己运行过,要么就是编造的。这个表格给你的,是一个关于 OpenCode 的可靠且有来源的基准:每个任务 692,000 Token,通过率 46.7%,中位数时间 129.7 秒。
这就是你要努力超越的数字,本文其余部分将介绍如何诚实地进行测试。
DeepSeek Harness 与 OpenCode:相同模型,一个端点,两种运行时环境
在运行任何东西之前,先看看每个工具的实际形态。
| DeepSeek Harness (dsh) | OpenCode | |
|---|---|---|
| 来源 | DeepSeek AI | Anomaly(原 SST) |
| 发布 | 2026 年 8 月 13 日 | 2025 年末 |
| GitHub 星标数 | 约 14.3 万 | 约 19.8 万 |
| 许可证 | MIT | MIT |
| 语言 | TypeScript | Go |
| 界面 | 127.0.0.1:3080 上的 Web UI | 终端 TUI |
| 状态 | 开发者预览版,预计会有破坏性变更 | 成熟,广泛部署 |
| 架构 | 一切都是插件:模型、工具、技能、会话、沙箱、存储、循环、调度、UI | 固定核心,两个内置智能体(构建、规划),MCP 和 LSP 扩展 |
| 配置 | $DSH_HOME/settings.yaml | opencode.json |
| Token 核算 | 内置 Token 计数器,包含上下文压力、分解预测,以及通过折叠进行压缩 | 每个会话的 Token 和成本追踪,TUI 内的分解信息最少 |
| 最适合 | 希望重写智能体循环本身的团队 | 希望今天就能用上编程智能体的团队 |
重要的行是架构行。OpenCode 为你提供了一个构建良好的智能体,并允许你扩展其边缘。DeepSeek Harness 为你提供了一个骨架,并让你替换其核心,包括智能体循环本身,它本身就是一个插件。这确实很不寻常,也是它仍处于预览版的原因。
两者都与模型无关,这也是能够进行公平测试的全部原因。将两者指向一个服务于同一种模型的兼容 OpenAI 的端点,你测量到的每一个差异都归属于工具链。
在本教程中,我将从 Atlas Cloud 提供 DeepSeek V4 Flash 服务,因为它暴露了一个普通的兼容 OpenAI 的端点,两个工具链都可以接受,无需任何适配器代码,并且同一个密钥可以用于两次运行。那里列出的 deepseek-v4-flash-0731 价格为每百万输入 Token 0.14 美元,每百万输出 Token 0.28 美元,上下文窗口为 1,048,576 Token,最大输出为 393,216 Token(截至 2026 年 8 月)。任何兼容 OpenAI 的提供商都可以用于此测试。关键是两个工具链必须命中同一个端点。
在选择模型之前,有一件事值得了解:OpenCode 发布了自己的聚合使用数据,DeepSeek 模型通过它处理了 233 万亿个 Token,其中 V4 Flash 占 85.5%,V4 Pro 占剩余的 14.5%(OpenCode,2026 年 8 月)。Flash 是生态系统实际运行的基础。
第 1 步:将 DeepSeek Harness 和 OpenCode 指向同一个模型
获取一个 API 密钥和一个基础 URL,然后将完全相同的两者提供给两个工具。在 Atlas Cloud 控制台 中创建密钥,并导出一次:
bash1export ATLAS_API_KEY="your-api-key" 2
在连接任何一个工具链之前,用一次调用验证端点和确切的模型 ID。如果这没有返回文本,下游的任何东西都将无法工作:
bash1curl https://api.atlascloud.ai/v1/chat/completions \ 2 -H "Authorization: Bearer $ATLAS_API_KEY" \ 3 -H "Content-Type: application/json" \ 4 -d '{ 5 "model": "deepseek-ai/deepseek-v4-flash-0731", 6 "messages": [{"role": "user", "content": "Reply with the single word: ready"}] 7 }' 8
在将模型交给智能体之前,先让模型通过端点直接回答一次实际任务,这很有帮助。这样你就知道,如果运行失败,是工具链的问题,而不是路由的问题:

文章的任务提示发送到 api.atlascloud.ai,旁边是 DeepSeek V4 Flash 0731 返回的真实答案以及调用报告的 Token 使用情况
一次对 deepseek-ai/deepseek-v4-flash-0731 的真实调用,两个工具链将使用相同的模型 ID:输入 148 个 Token,返回 6,879 个输出 Token,其中 5,731 个是推理 Token。在工具链添加任何工具描述之前,这是你的基线。
现在配置每一方。DeepSeek Harness 读取 $DSH_HOME/settings.yaml,自定义的兼容 OpenAI 的提供商放在 llm-pi-ai 插件下(DeepSeek Harness 文档,2026 年 8 月):
yaml1llm-pi-ai: 2 providers: 3 atlas: 4 apiKeyEnv: ATLAS_API_KEY 5 api: openai-completions 6 baseURL: https://api.atlascloud.ai/v1 7 models: 8 - id: deepseek-ai/deepseek-v4-flash-0731 9
api 字段接受 openai-completions、openai-responses 或 anthropic-messages。这里使用 openai-completions。如果你不想手动编辑 YAML,Web UI 中有设置 -> 模型 -> 添加自定义提供商,它会写入相同的块,并将密钥存储在 $DSH_HOME/.credentials.yaml 中。
OpenCode 读取项目根目录或全局配置目录中的 opencode.json(OpenCode 文档,2026 年 8 月):
json1{ 2 "$schema": "https://opencode.ai/config.json", 3 "provider": { 4 "atlas": { 5 "npm": "@ai-sdk/openai-compatible", 6 "name": "Atlas Cloud", 7 "options": { 8 "baseURL": "https://api.atlascloud.ai/v1", 9 "apiKey": "{env:ATLAS_API_KEY}" 10 }, 11 "models": { 12 "deepseek-ai/deepseek-v4-flash-0731": { 13 "name": "DeepSeek V4 Flash 0731", 14 "limit": { "context": 1048576, "output": 393216 } 15 } 16 } 17 } 18 }, 19 "model": "atlas/deepseek-ai/deepseek-v4-flash-0731" 20} 21
使用 @ai-sdk/openai-compatible,而不是 @ai-sdk/openai,因为这个端点服务于 /v1/chat/completions。将 limit 值设置为真实的上下文和输出数量,因为 OpenCode 使用它们来决定何时进行摘要,错误的限制会严重扭曲你的 Token 比较。
第 2 步:在 DeepSeek Harness 中运行基准测试任务
选择一个任务,它要足够大,需要多次工具调用,又要足够小,可以客观地进行评分。涉及多个文件,并且必须有一个实际通过的测试套件。两次运行都使用相同的代码仓库状态,因此先提交或暂存更改。
这是确切的任务提示。将其逐字粘贴到两个工具链中:
text1在这个代码仓库中,为 src/server.js 中的 Express 应用添加一个令牌桶速率限制器中间件。将每个 IP 限制为每分钟 60 个请求。拒绝时,返回 HTTP 429,JSON 正文为 {"error":"rate_limited","retryAfter":<seconds>}。将中间件连接到所有 /api/* 路由。在 test/rate-limit.test.js 中添加单元测试,涵盖三种情况:低于限制的请求被允许,超过限制的请求被阻止并返回 429,以及计数器在窗口过期后重置。运行测试套件并修复失败,直到通过。不要修改 src/ 和 test/ 之外的任何文件。 2
从你的项目目录启动 Harness:
bash1cd /path/to/your/repo 2npx @deepseek-ai/dsh web 3
这会提供 Web UI 在 http://127.0.0.1:3080。选择 atlas 提供商和 deepseek-ai/deepseek-v4-flash-0731 模型,粘贴任务,让它运行完成。不要干预,不要用提示回答澄清问题。你给一个工具链的任何帮助,如果不给另一个,都会使比较失效。
完成后,打开轨迹(Trajectory)视图。那是会话记录,Token 数字就在那里。
第 3 步:在 OpenCode 中重复运行,进行公平的 DeepSeek Harness 与 OpenCode 测试
将代码仓库重置到完全相同的起始状态。这一步是大多数非正式比较悄悄失效的地方,因为第二个工具链是在第一个已经部分修复的代码仓库上启动的。
bash1git checkout -- . && git clean -fd 2
然后针对相同的模型运行 OpenCode:
bash1opencode --model atlas/deepseek-ai/deepseek-v4-flash-0731 2
粘贴第 2 步中相同的任务提示。使用默认的 build 智能体,因为它具有完整的文件和 Shell 访问权限。同样,没有提示,没有纠正,相同的放手处理。
让它完成,然后像审查任何 PR 一样验证两次运行:
bash1npm test 2
如果运行后测试套件仍然失败,那就不算通过,无论摘要听起来多么自信。像 Composio 方法论一样,以二进制方式评分。一个半工作的速率限制器就是失败。
第 4 步:读取 DeepSeek Harness 与 OpenCode 的 Token 使用情况
现在收集数据。两个工具链都跟踪使用情况,但它们呈现的方式截然不同,这是它们之间最大的日常差异。
DeepSeek Harness 默认挂载了一个 Token 计数器。它暴露了三个你可以直接读取的会话预测:tokenUsage 用于运行总数,contextPressure 用于你离窗口有多近,以及 contextBreakdown 用于 Token 实际去了哪里。最后那个很有用,因为它告诉你你的账单是系统提示、工具描述、文件读取还是对话重放。该计数器使用一个固定的启发式方法,大约每四个字符一个 Token,而不是真正的分词器,所以把它当作一个强有力的估计,而不是发票。
Harness 还以不同的方式处理上下文溢出。它不是截断,而是使用它的压缩引擎进行折叠:它用摘要替换模型可见的表面,而完整日志保留在持久层中。你丢失的是提示中的 Token,而不是记录中的历史记录。
OpenCode 在每个会话中跟踪 Token 和成本,并在你工作时在状态行中打印它们。TUI 内的分解信息故意很少,这也是为什么存在一个小型的外部分析器生态系统,它们直接读取 OpenCode 的会话数据库,按工具和缓存命中率分解使用情况。如果你想要每个工具的属性,你需要安装一些东西。
对于比较本身,不要相信任何一个工具自己的计数器作为最终依据。使用提供商端的数据,因为那才是你实际支付的费用:
| 比较什么 | 从哪里获取 |
|---|---|
| 总输入 Token 数 | 提供商使用情况仪表板,按 API 密钥 |
| 总输出 Token 数 | 提供商使用情况仪表板,按 API 密钥 |
| 模型调用次数 | Harness 轨迹视图 / OpenCode 会话日志 |
| 实际运行时间 | 秒表,从开始到最后一个文件写入 |
| 通过或失败 | npm test 退出代码 |
最清晰的方法是创建两个单独的 API 密钥,一个命名为 harness-test,另一个命名为 opencode-test,每个密钥只用于一次运行。然后,提供商自己的使用情况页面会给你一个无可争辩的并排对比,没有估计误差。这个技巧只需要两分钟,并消除了关于哪个计数器正确的一切分歧来源。
DeepSeek Harness Token 使用情况:真正影响账单的是什么
一旦你有了实际数据,这些是值得调整的杠杆。它们适用于两个工具链,并且比你选择了哪一个重要得多。
对话重放通常是最大的一项。 智能体在每一步都会重新发送不断增长的对话。一个 40 步的任务成本不是 40 个提示,而是接近 40 个越来越长的提示的总和。这就是为什么基准测试的差异在相同的工作上从 192,000 到 1,400,000 Token 不等。积极进行摘要的工具链落在该范围的底部。
缓存命中是可用的最便宜的优化。 DeepSeek V4 Flash 缓存命中的价格约为每百万 Token 0.0028 美元,而缓存未命中为每百万 Token 0.14 美元,便宜了大约 98%。缓存仅在请求前缀字节完全相同时才有效,这正是 DeepSeek Harness 强制执行严格的 {{variable}} 插值并带有失败大声语义,并保持稳定请求头的原因。一个在调用之间打乱系统提示的工具链会悄悄地将每次命中变成未命中。
工具描述会伴随每次调用。 连接了 20 个 MCP 服务器意味着提示中永远有 20 套描述,无论任务是否触及它们。在基准测试之前,断开此任务不需要的内容,否则你衡量的是你的 MCP 配置,而不是你的工具链。
过大的工具结果会污染上下文。 一个 cat 的 3000 行文件,或者一个冗长的测试运行器转储完整的堆栈跟踪,会留在对话中,直到运行结束。Harness 有一个可选的结果修剪助手,在摘要之前重写过大的工具结果。值得开启。
重试是看不见的,直到你计算调用次数。 一个重试失败测试三次的工具链会花费三倍。比较调用次数列,而不仅仅是总 Token 数,否则你会将重试循环误诊为昂贵的模型。
在成本方面,一旦你有了 Token 数量,算法就很简单了。按照 Atlas Cloud 对 DeepSeek V4 Flash 的定价,一个 692,000 Token 的任务(偏向输入)落在个位数美分。这是整个类别的好消息:模型足够便宜,以至于工具链浪费是一个效率问题,而不是预算紧急情况。只有当乘以一个团队,全天候运行时,它才变成一个真正的数字。如果你想针对第二个模型运行相同的测试,并分离模型效应和工具链效应,请浏览完整的模型目录。
一个应该比任何 Token 数字更能影响你决策的注意事项:DeepSeek Harness 明确处于开发者预览版阶段,其自述文件用大写字母警告将会有兼容性破坏性更改。这是一个值得基准测试的好东西,但本月要让团队标准化使用它是有风险的。OpenCode 是无聊的选择,而当它针对你的生产代码仓库运行时,无聊是一种优点。
常见问题
DeepSeek Harness 比 OpenCode 更好吗?
对大多数人来说,还没有。OpenCode 成熟、终端原生,在 GitHub 上约有 19.8 万个星标,拥有庞大的供应商目录,并且今天就能工作。DeepSeek Harness 上线仅两周,处于开发者预览版,并警告会有破坏性更改。Harness 在架构上更有趣,因为每个组件,包括智能体循环,都是可替换的插件。如果你想重写智能体内部,Harness 就是为此而构建的。如果你想本周就发布代码,用 OpenCode。
DeepSeek Harness 只能与 DeepSeek 模型一起使用吗?
不是。它与模型无关。它随附了 DeepSeek、Anthropic、OpenAI、Bedrock、Vertex、Azure 和 Codex 的目录提供商,你可以通过向 $DSH_HOME/settings.yaml 添加一个块,来添加任何支持 openai-completions、openai-responses 或 anthropic-messages 的自定义提供商。第 1 步中的配置将其指向一个第三方兼容 OpenAI 的端点,无需适配器代码。
如何查看 DeepSeek Harness 的 Token 使用情况?
使用内置的 Token 计数器,它默认挂载,并暴露 tokenUsage、contextPressure 和 contextBreakdown 预测,在轨迹视图中可见。请注意,它使用一个固定的启发式方法(大约每四个字符一个 Token)进行估计,而不是运行真正的分词器。为了计费准确性,请改为读取你的提供商的使用情况仪表板,理想情况下每个运行使用专用 API 密钥。社区插件,如 Token 使用情况仪表板,会在其基础上添加持久的每个会话记录。
哪个工具链使用更少的 Token,DeepSeek Harness 还是 OpenCode?
目前还没有公布的一对一数据。在 DeepSeek V4 Flash 上的 8 工具链基准测试测得 OpenCode 每个任务平均 692,000 Token,但它在 DeepSeek Harness 发布前两天运行,因此 Harness 未包含在内。任何引用该基准测试中 Harness 数据的人,都是在引用不存在的东西。在你的代码仓库上运行第 2 步到第 4 步的测试,因为 Token 使用量在很大程度上取决于你的代码库大小、MCP 配置和任务形状。
我可以针对同一个 API 密钥运行 DeepSeek Harness 和 OpenCode 吗?
是的,对于非正式测试来说没问题。为了进行干净的测量,请使用两个独立的密钥,每个工具链一个。这样,你的提供商的使用情况仪表板会自动将每个 Token 归因到正确的运行,你永远不需要将两个不同的内部估算器与一张发票进行核对。
智能体和工具链有什么区别?
DeepSeek 自己的框架是:智能体 = 模型 + 工具链。模型进行推理。工具链是将模型与现实连接起来的一切:读写文件、运行 Shell 命令、调用工具、管理会话、处理批准以及驱动决定下一步做什么的循环。相同的模型加上不同的工具链,会给你一个明显不同的智能体,这正是这个比较的全部意义所在。






