← 返回 Tony's Lab

DSCode 深度拆解

DeepSeek 编程 Agent —— 从 README 到源码

开源项目 TypeScript DeepSeek MIT
发布于 2026-08-01 · 基于源码实测(dev 分支 @ v0.3.4)
一句话 DSCode 是一个主打 DeepSeek 的本地优先(local-first)编程 Agent 运行时,MIT 开源。 类似 Claude Code / Codex 的终端 AI 编程助手,但默认模型是 DeepSeek V4 Flash,把「本地可控 + 省钱」当核心卖点。仓库 github.com/thinkany-ai/dscode,当前 12 stars,属于很早期的项目。

#它是什么

DSCode 是「有主见的」编程 Agent 运行时:默认 DeepSeek V4 Flash(经济型),同时内置支持 OpenAI Codex、OpenAI、Anthropic、OpenRouter、Z.AI、Kimi、MiniMax、xAI/Grok 八家供应商。核心是 provider-aware 模型路由 + 本地会话 + 安全打补丁 + 并行 Agent + OS 沙箱 + 透明的用量报告。

它不追求功能上碾压通用 Agent,而是把运行时保持本地、可审计,让每个仓库任务用上它真正需要的模型能力。

核心特点

#对 DeepSeek 的优化(源码级)

这些优化不是玄学,是实打实的适配层。核心逻辑集中在 packages/core/src/deepseek.ts(整个文件只有 58 行),由 optimizeDeepSeekResponsesPayload() 完成。

1. Responses 请求裁剪

DeepSeek 走 OpenAI Responses API 兼容层,但它无状态、自动管理前缀缓存。所以适配器把 OpenAI 特有字段直接删掉:

deepseek.ts — 删掉 DeepSeek 静默忽略的字段
// DeepSeek manages prefix caching automatically and is stateless at the
// Responses API layer. These OpenAI-specific hints are silently ignored...
delete next.prompt_cache_key;
delete next.prompt_cache_retention;
delete next.prompt_cache_options;
delete next.include;

if (isRecord(next.reasoning)) {
  next.reasoning = { effort: next.reasoning.effort };
  // Sampling controls do not take effect while thinking is enabled.
  delete next.temperature;
  delete next.top_p;
}

开着 thinking 模式时 temperature / top_p 根本不生效,传了白传,删掉让请求日志诚实、好调试。

2. apply_patch 走原生 custom 工具

把补丁工具转成 DeepSeek 的 free-form custom tool 格式,避免大 diff 走 JSON 转义,省转义开销和出错率。

3. 前缀缓存友好

README 明确要求 prompt 和工具顺序保持稳定,让 DeepSeek 的自动前缀缓存命中可复用前缀——这是直接省 token 钱的设计。命中率会在 /status 里显示(cache read/write、命中百分比)。

4. 无状态 API 的本地回放

Responses API 无状态,DSCode 把消息、reasoning items、工具结果存在本地会话树里,每次请求完整回放,保证上下文连续。

5. 智能压缩(compaction)

compaction.ts — 90% 触发、保留最近 60k
const AUTO_COMPACT_AT = 0.9;
const KEEP_RECENT_TOKENS = 60_000;
const SUMMARY_RESERVE_TOKENS = 32_000;

上下文用到 90% 自动压缩:保留最近 60k token 不动,更早的用低 effort 模型总结成摘要,且摘要包在 <compacted_session_history> 标签里防提示注入。摘要明确要求保留目标、决策、文件路径、命令、测试结果、未完成工作——对 1M 上下文的 DeepSeek,这能把钱花在刀刃上。

6. 安全兜底

7. 默认配置针对 DeepSeek 调优

新装默认运行时
model     deepseek-v4-flash
transport responses
thinking  max
harness   minimal
permission auto
sandbox   workspace-write
network   blocked

thinking max + minimal harness(只暴露沙箱命令、后台交互、自由补丁、并行委托几个高杠杆工具),省掉不必要的工具调用开销。

关键点 以上转换只在 provider 是 deepseek 时生效;换其他模型走各自原生实现,互不干扰。这些是「适配层优化」,不是模型能力提升。

#这些优化有用吗?

说实话:有用,但别高估。分两层看。

真有用的部分
✅稳定 prompt/tool 顺序 + 本地回放——最值钱。DeepSeek 自动前缀缓存命中一次就省一大笔钱,把请求顺序锁死、无状态化回放,是实打实的成本优化,别的工具未必会为 DeepSeek 专门做。
✅智能压缩策略——90% 触发、保留 60k、低 effort 摘要、防注入包装,配合 1M 上下文把钱花在刀刃上。
✅成本透明——/status 显示缓存命中率和费用,对控制预算的人真有用。
✅apply_patch 走 custom 工具——大 diff 场景确实省转义开销。
别高估的部分
⚠️删字段属于「做了正确的事」但收益边际很小——DeepSeek 本来就忽略这些,删了只是日志干净,不删也不报错或变贵。
⚠️全是适配层优化,不是能力提升——模型本身没变强,任务成功率该多少还是多少。README 自己也承认要用真实仓库任务的成功率来衡量。
⚠️护城河很浅——这些优化任何竞品花几周都能抄,12 stars 也没有大规模数据证明效果。
结论 用 DeepSeek API 写代码、在乎成本 → 这套优化方向是对的,值得用。但它本质是「DeepSeek 省钱 + 本地可控 + MIT 透明」,别指望它让代码写得更好——真正决定体验的还是 DeepSeek V4 系列模型本身。

#技术栈与代码量

全栈 TypeScript,跑在 Node.js 上。pnpm monorepo 两个包:@thinkany/dscode(CLI/TUI 主程序)+ @thinkany/dscode-core(可复用核心运行时,带 RPC)。测试用 Vitest,VS Code 扩展也是 TS。

有意思的发现:它站在 Pi 框架肩膀上

核心依赖是 @earendil-works/pi-* 系列(pi-agent-core、pi-ai、pi-coding-agent、pi-tui)——DSCode 本质是 Pi 开源框架 + DeepSeek 适配层 + 自己的产品外壳。这解释了它为什么这么快支持这么多 provider,也解释了为什么代码量这么小。

代码量实测(dev 分支 @ v0.3.4)

部分行数说明
核心源码≈ 7,500src/ + packages/core/src/(不含测试)
测试≈ 2,500*.test.ts,占比约 25%
TypeScript 合计≈ 10,000全部 .ts
全仓库合计≈ 12,000含 md / json / mjs 脚本

7,500 行核心代码对编程 Agent 来说非常小——agent 循环、TUI、AI 抽象都复用 Pi 框架了,DSCode 自己写的是定制层(DeepSeek 适配 58 行、provider 管理、沙箱策略、产品外壳)。好处是可审计、易 fork;代价是深度依赖上游框架,pi-* 版本一变就得跟着动。

#有没有 benchmark?

没有。DSCode 官方没发布任何 benchmark 数据。仓库里能找到的只有三处「态度声明」:

12 stars 的早期项目没跑权威 benchmark(SWE-bench 等)很正常。注意信息差:README 引用的 DeepSeek V4 能力要看 DeepSeek 官方评测,而不是 DSCode 这个外壳的评测。工具层的价值(成本、安全、可控)很难用 SWE-bench 数字体现,想验证只能自己拿真实仓库任务跑影子评测。

#快速上手

安装与启动
npm install -g @thinkany/dscode
dscode -C /path/to/project   # 进入 TUI,/login 选供应商

# 无头用法(CI / 脚本)
dscode -C ./project -p "Explain the authentication flow"
dscode -C ./project --mode json -p "Fix lint errors and run tests"

# 不带 key 的环境变量方式
export DEEPSEEK_API_KEY="***"
dscode -C /path/to/project

#当前边界

最终评价 面向 DeepSeek 用户的轻量 Claude Code 替代品:省钱、本地、透明、MIT 全开放。尝鲜可以,生产环境主力工具建议等它长大一点。想验证它到底行不行——自己跑一轮真实仓库的影子评测,比看任何 README 都有说服力。