先看一个真实数字。2026 年 5 月 1 日,一个 Reasonix 用户晒出当天 DeepSeek 用量:输入 4.35 亿 token,其中缓存命中 435,033,856,未命中 767,616——命中率 99.82%。当天总花费 $1.38。同样工作量,如果缓存全不命中,价格是 $61.06。一天省 $59.68,省了 97.7%。

这不是模型的能力,这是客户端的工程。DeepSeek 的 prefix caching 是默认开的,但命中率是客户端的事——你的请求每一轮是不是带着一模一样的字节前缀过去,决定了 API 是收你 $0.0028/M 还是 $0.14/M。差 50 倍。

我在这台机器上把 reasonix 装起来实测了一圈,下面说清楚它到底做了什么、为什么能做到这个数字、以及我踩到的坑。

它是什么

DeepSeek-Reasonix(npm 包名 reasonix)是一个终端 Coding Agent,最初是 DeepSeek 专属,现在的主线(Go 重写版 v1.x)已经是多模型——DeepSeek 只是内置预设。仓库 34,935 Star,MIT 协议,4 月 21 日建仓,4 个月长出来的,昨天还在推代码,npm 最新版 v1.31.0 是 3 小时前发布的。

项目口号是 "A coding agent you can leave running"——一个你舍得一直挂着的 Agent。这个口号背后是整个项目的核心信念:一个后台项目每月悄悄烧掉 $200 的工具,是没人会用的。所以它所有子系统都为一个目标服务:让长会话便宜到可以不管。

为什么大多数 Agent 的缓存命中率这么惨

DeepSeek 的自动 prefix caching 有个苛刻条件:请求的字节级前缀必须和上一次完全一致,才能命中。但大多数 agent 框架每一轮都在干破坏前缀的事:

结果就是官方给出的对比:DeepSeek 自家网页版单会话内命中 60-80%,但换个新会话直接归零;Cherry Studio / Open WebUI 这类通用 SDK 长会话 30-60%;Cline / Continue 这类 XML 工具调用客户端更低——每个工具结果都内联进对话,缓存键对不上。

怎么做到的:把上下文切成三个区

Reasonix 的缓存优先循环(cache-first loop)把上下文分区,像冰箱分格一样各管各的:

┌─────────────────────────────────────────┐
│ IMMUTABLE PREFIX(不可变前缀)           │ ← 会话内固定
│   system + 工具定义 + few-shots          │   每次请求都命中
├─────────────────────────────────────────┤
│ APPEND-ONLY LOG(只追加日志)            │ ← 只增不改
│   [assistant₁][tool₁][assistant₂]...     │   保住上一轮的前缀
├─────────────────────────────────────────┤
│ VOLATILE SCRATCH(易失草稿区)            │ ← 每轮重置
│   思维链、临时计划状态                    │   永远不进上游请求
└─────────────────────────────────────────┘

三条铁律:前缀每会话算一次、哈希固定;日志只追加、不重排不改写;草稿区的内容在进日志前先被「提炼」。加上每轮结束把超过 3000 token 的工具结果自动压缩成摘要——模型当时看过全文,之后的轮次只看摘要,需要再单独读一次。一次 read_file 的成本,远低于让 12KB 结果跟着每一轮请求跑。

这四个机制(不可变前缀、只追加日志、易失草稿、轮末压缩)就是 99.82% 的来源。DeepSeek 提供可缓存的字节,Reasonix 负责让字节保持可缓存。

成本账

按 v4-flash 的计价(命中 $0.0028 / 未命中 $0.14 / 输出 $0.28,每百万 token):

这位用户(99.82% 命中)同样工作量、0% 缓存
命中输入$1.22—
未命中输入$0.11$61.01
输出$0.05$0.05
当天合计$1.38$61.06

如果换成 v4-pro 跑同样的活,$2.07 vs $189.73,省 98.9%。一天省下 97.7% 的输入成本——这就是「缓存优先」四个字的含金量。

除了缓存,还有两层保险

老架构文档里有两套机制值得抄作业,它们解决的是 DeepSeek 的实测翻车模式:

工具调用修复(tool-call repair)。DeepSeek 模型有四个已知毛病:工具调用 JSON 被吐在 <think> 里、参数超过 10 个或嵌套太深时丢参数、同一工具带相同参数反复调用(调用风暴)、max_tokens 截断导致 JSON 半截。Reasonix 对应四道工序:schema 超限自动拍平成点号记法(调用前再还原)、从 reasoning_content 里打捞被吞的工具调用、补全截断的括号、窗口内重复调用直接抑制并注入一轮反思。

成本控制(v0.6 起)。flash-first 默认:普通轮次跑 v4-flash,遇到硬问题模型自己吐一个 <<<NEEDS_PRO>>> 标记,系统中止当前调用、用 pro 重试这一轮——升级是自我上报的,不是失败计数硬凑的;所有辅助调用(子 agent、摘要、修复重试)强制 flash,绝不为「把工具结果复述成散文」付 pro 的钱。

一个正在发生的重写故事

这里有个必须知道的背景:项目正处在 TypeScript → Go 的迁移中。GitHub main 分支的 README 已经过期——它还停留在 0.x 老线,写着「DeepSeek-only」「reasonix code 子命令」「config.json」。但 npm 上实际发布的 v1.31.0 是 Go 重写版:单静态二进制(CGO_ENABLED=0,交叉编译六平台)、配置改成 reasonix.toml、从 DeepSeek 专属变成多模型(DeepSeek 是预设,任意 OpenAI 兼容端点都能配)、还多了 ACP 编辑器协议接入、VS Code 扩展、Wails 桌面版、每轮 checkpoint 可回退。

我实测的正是这个新线。照着 GitHub main 分支的 README 操作,第一步就会撞墙——没有 reasonix code 这个子命令。

上手

npm install -g reasonix        # 装的是 Go 二进制,npm 包只是薄壳
reasonix setup                 # 配置 provider 和模型
reasonix                       # 交互式会话(TUI)
reasonix run "实现 main.go 里的 TODO"   # 一次性跑任务
reasonix doctor                # 体检:Node、key、MCP、沙箱
echo "解释这段代码" | reasonix run       # 管道输入

有意思的细节:默认模型叫 deepseek-flash,走的是 Anthropic 兼容协议打 api.deepseek.com(reasonix doctor 里 provider 一行写得明明白白:anthropic api.deepseek.com)。配置解析顺序是 flag > ./reasonix.toml > ~/.reasonix/config.toml > 内置默认;密钥不写进配置文件,走环境变量(api_key_env,默认 DEEPSEEK_API_KEY)。

实测踩的坑

坑一:文档分裂,照 README 操作必踩空。main 分支 README 还写着 0.x 的 reasonix code / chat / run、config.json、DeepSeek-only——全是旧世界。实际装出来是 1.31.0 的 reasonix run / web / serve / acp、config.toml、多模型。看文档请认准 npm 包内自带的 README 或 main-v2 分支,别信 GitHub 默认分支首页。

坑二:沙箱默认 enforce,无 bwrap 直接拒跑 bash。在服务器/容器里(比如我这台)没有 bubblewrap,reasonix doctor 明确告诉你:"bash execution is refused. Install bubblewrap (bwrap) or set [sandbox] bash = "off""。我这环境没 root 装不了 bwrap,只能改配置关沙箱。这设计是好的——默认安全,但如果你在 CI 或无特权容器里跑,第一步就是处理这个。

坑三:开箱自带两个坏 skill。reasonix doctor 报两个 warning:内置的 review 和 security-review skill 的 allowed-tools 引用了 use_capability,但当前工具注册表里根本没有这个工具。也就是默认配置下这两个 skill 一调用就会坏。装完先跑一遍 doctor,别等到用的时候才发现。

坑四:没 key 时报错倒是很干净。reasonix run "say hi" 直接给出 error: provider "deepseek-flash": missing env DEEPSEEK_API_KEY——不废话、不重试循环、不假装干活。这点比很多 agent CLI 强。但代价是第一次用必须走 reasonix setup 或手动设环境变量,没有「先跑起来再说」的余地。

坑五:桌面版还是 prerelease。官方下载页的桌面应用(Wails 壳)未代码签名,macOS 首启要手动过 Gatekeeper,Windows 会弹 SmartScreen「未知发布者」。CLI 才是正统入口,桌面版适合尝鲜不适合上生产。

跟同类比

ReasonixClaude CodeAiderQwen Code
后端DeepSeek 预设 + 任意 OpenAI 兼容Anthropic任意(OpenRouter)Qwen / 多模型
许可MIT闭源Apache-2.0Apache-2.0
缓存命中率工程化保证(99%+)不适用(自家 API)顺带的未强调
成本定位单任务极低偏贵视模型视模型
编辑器集成ACP + VS Code 扩展原生生态IDE 插件IDE 插件

如果只认 DeepSeek API、想省到极致,Reasonix 是目前把 prefix cache 吃透的唯一一个——别的工具要么是「顺带命中」,要么根本不把字节稳定性当一回事。如果你已经重度用 Claude Code,Reasonix 不是替代品,是互补品:后台长跑、批量任务、成本敏感的场景扔给它,需要最强推理的活留在 Claude。

谁该试

DeepSeek API 的重度用户第一优先——一天几百万 token 的用量下,命中率差 30 个点就是每月几百美金的差别。其次是喜欢「Agent 挂后台自己跑」的人:per-turn checkpoint 可回退、plan mode、权限系统、workspace 沙箱,这些是为无人值守设计的。成本敏感的个人开发者也能算清这笔账:v4-flash 命中价 $0.0028/M,是未命中价的五十分之一。

项目地址:github.com/esengine/DeepSeek-Reasonix

npm:npmjs.com/package/reasonix

官网:reasonix.io