你可能不知道为什么用AI写小说那么烧钱—缓存命中率,差出120倍

2026-06-30 16:58:34 0点赞 0收藏 0评论

上个月我查DeepSeek账单,发现写一本15万字的小说花了将近40块。同一个软件切到Goink,下一本10万字只用了不到2块。不是因为模型降价了——是我终于搞懂了KV-Cache这件事。


那张让我血压飙升的API账单

事情是这样的。

我用某AI写作工具写了三个月,前两个月还好,每月七八块。第三个月写到一本30万字的长篇,账单直接飙到60多块。

我第一反应是「DeepSeek涨价了?」查了一下没有。又怀疑「是不是模型偷偷切成了贵的?」也不是。

最后翻了整整一晚上的账单明细,发现了三个烧钱的黑洞。

第一个黑洞:每轮动态生成工具集。 有的工具为了所谓「绝对安全」,每轮对话都根据当前上下文动态拼装可用的函数列表,作为system prompt的一部分发出去。设计上确实更安全——但这意味着每轮对话的system prompt都是的。KV-Cache从第一个token就开始miss。看似在为安全加固,实际上一行代码就毁掉了整个缓存周期。

第二个黑洞:流水线多Agent独立上下文。 这类工具把创作拆成几个阶段——大纲Agent、正文Agent、编辑Agent、润色Agent——每个Agent有自己独立的system prompt和工具集。看起来十几个Agent协作很专业,但你仔细想:每个Agent的上下文都是全新的,没有前缀复用。每次Agent交接,就是一次缓存冷启动。所谓的「多Agent协作」,其实是把一次便宜的长对话拆成了N次昂贵的短对话。

第三个黑洞:全量覆写文件。 有些工具写章节不是编辑差异部分,而是每次把整章内容重新输出一遍。一章3000字,修个标点也是3000字。输出token的价格可是输入的2倍(V4 Flash输出¥2/百万token,而缓存命中的输入只要¥0.02)。全量覆写等于在输出端再加一道重税。

三个黑洞一叠加,账单不炸才怪。


一个你可能从没听过的词,决定了你90%的API账单

大模型API的计费不是「输入一个价,输出一个价」那么简单。

以DeepSeek V4 Pro为例(2026年7月即将执行的新定价):

计费类型 平时价格(元/百万token) 高峰价格(元/百万token) 输入 — 缓存命中 0.025 0.05 输入 — 缓存未命中 3 6 输出 6 12

看到那个差距了吗?

同样是一个输入token,缓存命中时只要 0.025 元,缓存未命中时要 3 元。差了整整 120 倍。

V4 Flash 也一样:

计费类型 平时价格(元/百万token) 输入 — 缓存命中 0.02 输入 — 缓存未命中 1 输出 2

50 倍的差距。


什么是KV-Cache?说人话版本

你不用理解它的数学原理。只需要知道一个直观的比喻:

KV-Cache 就像大模型做的一道「阅读理解标记」。

假设你给AI发了一大段系统指令 + 前文摘要 + 角色设定,总共10万token。如果这些内容和上一条消息的前缀一模一样,大模型就不需要重新「读」这部分——它直接复用上次的计算结果。这部分token按缓存命中计费,便宜120倍。

但如果每次发送时,前面的内容变了一丁点——比如多了一句「请继续写作」,或者消息格式发生了细微变化——缓存就全部失效。10万token全部按全价计费。

关键不是你的上下文有多长,而是前缀有多稳定。

Goink是怎么把缓存命中率干到95%以上的

知道了原理,答案其实很简单:让AI每次看到的系统级前缀保持绝对不变。

大多数AI写作工具的做法是这样的:每次用户发消息,把「系统提示词 + 对话历史 + 用户新消息」拼成一个大字符串,发给模型。对话历史每轮都在增长,所以前缀永远在变。缓存命中率接近零。

Goink的设计完全不同。这得从它的Append-Only架构说起。

Append-Only:消息只追加,永不修改

Goink的消息表是严格append-only的——每轮对话的消息只追加,不删除、不修改、不重新排列。

当你压缩上下文时,通用工具的做法是把旧的对话历史删掉,换成一段摘要。Goink不删——它在数据库里保留所有消息,只是在查询时通过 version 字段过滤出当前活跃的消息集合。

为什么这不删很重要?

因为「删掉旧消息再插入摘要」这个操作,会改变整个消息序列的前缀结构。KV-Cache全部作废。

Goink的做法是:递增 active_version,SQL查询自然跳过旧消息。消息本身的位置和前缀结构始终保持不变。 系统提示词(System Prompt)在两次压缩之间也是完全静态的——它是一个常量字符串,从不修改。

结果是什么?

每次调用大模型时,消息列表是这样的:

[System Prompt — 始终保持不变,缓存命中 ✓] [压缩摘要 — 上次压缩时产生,在两次压缩之间不变,缓存命中 ✓] [System Context Snapshot — 本次对话创建时生成,不变,缓存命中 ✓] [最近的最近几轮对话 — 只有这部分是新的,缓存未命中] [用户新消息 — 缓存未命中]

在一个写了80章的长篇写作session中,cache hit的部分可以占到95%以上。每轮对话只有尾部新增的几百到几千token按全价输入计费,其余十几万token全部按0.025元/百万token的缓存命中价走。

这就是「把价格打下来」的核心逻辑。


不止缓存——Goink还有三道省钱防线

KV-Cache友好设计是第一道防线,但Goink在成本控制上还有三层叠加。

第二道防线:80%阈值智能压缩

Goink在上下文窗口用量达到80%时自动触发压缩——不会等到满了才被动截断。压缩由LLM生成结构化摘要,保留「已完成事项、进行中断点、用户偏好、关键决策、待办事项」五个维度的创作关键信息。

压缩后生成新的摘要,开始新的缓存周期。压缩时机精确控制,最大化每次压缩之间的有效创作轮数。

第三道防线:子Agent上下文隔离

审稿和记忆检索这些辅助任务,Goink用子Agent独立执行。子Agent的上下文是轻量的:只有精简版的系统提示 + 当前小说状态 + 用户指令,不携带完整的对话历史。

而且子Agent的压缩是纯内存操作,不触发数据库版本递增,不割裂主Agent的缓存周期。审稿的内部推理过程完全隔离,不污染主写作上下文的token预算。

第四道防线:故障自停,不乱烧token

  • 同一工具连续失败3次,系统自动禁用该工具并注入提醒——防止AI在死胡同里反复尝试

  • 检测到工具调用模式重复(最近6次中出现循环),自动中断并反馈——防止写作Agent进入「读→改→再读→再改」的死循环

  • 审稿子Agent最大50轮,超过自动终止——防止审稿失控

这些机制加在一起,在你不知道的情况下默默拦截了大量的无效API调用。


算一笔真实的账

场景:写一本20万字的网文,用DeepSeek V4 Flash(平时价格)。

未优化的通用AI写作工具(缓存命中率≈0%)

  • 平均上下文长度:8万token(系统提示 + 对话历史)

  • 每次对话消耗输入token:8万(每次都是全新,缓存全部miss)

  • 输出token:平均每轮2000 token

  • 每轮成本:80K × 1元/百万 + 2K × 2元/百万 = 0.08 + 0.004 = 0.084元

  • 写20万字大约需要200轮对话:200 × 0.084 = 16.8元

Goink(缓存命中率≈95%)

  • 同样8万token上下文,其中7.6万缓存命中,4千缓存未命中

  • 每轮成本:(76K × 0.02 + 4K × 1) / 百万 + 2K × 2元/百万 = 0.00152 + 0.004 + 0.004 = 0.00952元

  • 200轮:200 × 0.00952 = 1.9元

同样是20万字,16.8元 vs 1.9元。接近9倍的差距。

如果用V4 Pro写(推理能力更强):

  • 未优化:200轮 × (80K × 3 + 2K × 6) / 百万 = 200 × 0.252 = 50.4元

  • Goink:200轮 × (76K × 0.025 + 4K × 3 + 2K × 6) / 百万 = 200 × 0.0259 = 5.18元

差距拉到接近10倍。 而且书越长,上下文越大,差距越悬殊。


这不是一个收费功能——它是架构的副产品

有意思的地方来了。

KV-Cache友好不是Goink的一个「功能」。没有开关,没有设置项,不需要你手动优化。它是整个系统的架构选择——append-only消息存储、versioned rebase压缩、静态system prompt——带来的自然结果。

Goink做这些设计的初衷不是为了省钱。Append-Only是为了完整的操作审计和turn级回退能力。Versioned Rebase是为了压缩时不丢失历史信息。固定System Prompt是为了让AI的行为保持在创作框架内。

省钱是这些设计叠在一起之后涌现出来的副产品。 这一点让我觉得这个架构特别优雅——不是为了优化而优化,而是正确的设计自然带来了正确的经济性。


那Goink作为写作工具到底怎么样?

好了,成本讲完了。如果你已经动心了,这里简单说说Goink的核心能力(详细的功能介绍可以参考之前的文章):

  • 六维结构化记忆:角色(有向关系图)、伏笔(自动追踪回收)、弧线(泳道可视化)、地点(拓扑图)、读者认知(已知/悬念/误解面板)、创作偏好——全SQLite持久化,跨对话永久记忆

  • 30+AI工具全自动协同:AI自主决定调哪个工具、传什么参数、下一步做什么。写完正文后强制自查角色变化、伏笔回收、弧线推进

  • 本地语义搜索:ONNX + sqlite-vec,50万字全文秒级定位。搜「关于玉佩的线索」能找到暗示玉佩但没写那俩字的段落

  • Git版本管理:每章自动commit,Diff审批确认,一键回退任意版本

  • 技能热重载:Markdown文件就是写作方法论,创建即生效。支持文风提取——导入旧稿,AI反向生成「模仿你自己」的技能

  • 7大国产模型全兼容:DeepSeek/GLM/MiniMax/Kimi/Qwen/豆包/MiMo,填Key即用

  • 安装包 < 60MB,Windows/macOS/Linux全平台,MIT开源协议永久免费

演示图

你可能不知道为什么用AI写小说那么烧钱—缓存命中率,差出120倍

你可能会问

Q:缓存命中率95%是真的吗?我怎么验证?

A:Goink前端实时显示当前session的缓存命中率(prompt_cache_hit_tokens / total_tokens),你可以在使用中直接看到。在长篇写作场景下,只要不发生上下文压缩,每一轮之间的system prompt和对话框前缀确实是完全不变的,物理上就是cache hit。

Q:缓存命中率这么高,是不是只有DeepSeek支持?

A:KV-Cache是几乎所有主流大模型API都支持的能力(包括DeepSeek、Anthropic Claude、OpenAI GPT系列等),只是各家对缓存命中的定价策略不同。DeepSeek的120倍价差让优化效果最明显,但换成其他模型同样能省。

Q:上下文压缩会不会丢重要信息?

A:压缩是LLM驱动的结构化摘要,保留五个维度的创作关键信息,不是机械截断。而且Goink的append-only设计意味着旧消息不删除——如果AI确实需要查更早的信息,可以用语义搜索直接搜原文,不依赖摘要的保真度。

Q:真的免费吗?API费用呢?

A:Goink本身MIT开源,永久免费。API费用是你自己去DeepSeek等平台申请的Key,钱直接付给模型厂商,Goink不抽成、不中转、不代收。充值5块钱够写几十万字。

Q:适合什么类型的写作?

A:长篇网文(起点/番茄/晋江)最能发挥价值——结构化记忆和KV-Cache优化在长篇场景下效果最明显。短篇也能用,核心优势一样不少。

Q:不会编程能用吗?

A:下载安装包 → 申请DeepSeek API Key → 填Key → 开写。不需要Python、Node.js、数据库,不需要配环境。五分钟上手。


立即开始

  1. github.com/sigpanic/goink 下载安装包(< 60MB)

  2. 去 DeepSeek 官网申请 API Key,支付宝充 5 块

  3. 打开 Goink,填 Key,开写

5块钱API费用 + 0元软件费 = 几十万字的创作自由。而且写的时候你知道:每句话的输入成本,大部分只花了全价的1/120。

觉得好用记得点个 Star——开源项目的生命力来自社区的认可。


大部分人只关心大模型的价格。少部分人知道,真正省钱的关键不在价格表上,在你的输入token走了哪一列。

GitHub:sigpanic/goink | MIT开源 | 永久免费 | 全平台

展开 收起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
0
扫一下,分享更方便,购买更轻松