一百万 token 的上下文窗口,听着很大。可你真把它交给一个编码 Agent,事情往往从「它能不能看完仓库」变成「我还愿不愿意让它看第二遍」。

DeepSeek 9 月 10 日发布的 V4.1-Flash,把这个不太体面的账单问题摆到了台面上。官方技术报告给出的模型规模是 552B 参数、1M token 上下文,prefill 每个 token 激活 8B 参数,decode 每个 token 激活 16B 参数。它并不只是又做了一个更大的 MoE,而是试图把 Agent 最常见、也最浪费的一段推理重新设计。

也就是读。

如果你做过 Java 或 Spring 的老仓库改造,大概很熟悉这个场景。一个需求落到手上,真正费时间的不是敲出那几十行实现,而是翻模块边界、配置、调用链、测试、历史兼容逻辑。人会逐渐形成判断,哪些文件只需扫一眼,哪些地方必须追到底。很多 Agent 的成本却没有这种分寸感,它们会把大量 token 和计算花在把上下文塞进来这件事上。

V4.1-Flash 的价值,至少从这份报告看,不在于宣称「终于比谁更聪明」。它在赌一件更工程化的事,Agent 时代的模型竞争,会越来越像数据库和编译器的竞争。答案质量当然重要,但读入成本、缓存占用、吞吐和恢复长任务的能力,会先决定一个团队敢不敢把模型挂到真实流水线上。

长上下文的账,为什么总是先在 Agent 身上爆掉

普通聊天里,一段长上下文的代价还可以被一次回答摊薄。Agent 不一样。

它要读仓库,执行命令,再读新生成的日志和测试报告。失败了,继续查。开一个 PR 前,它也许还要回头确认前面看过的约束。一个本来几十分钟的任务,输入 token 会像滚雪球一样变大。模型若把同一份历史反复做昂贵的 prefill,费用和延迟都会先失控。

很多人把这个归因为上下文窗口不够长。这个判断只对了一半。窗口变长,能装的东西更多,可你仍要付出把它们装进去、在显存和存储里留住它们的成本。尤其是多 Agent 并发时,KV cache 往往不是一个抽象名词,而是一条很硬的容量边界。

这也是我读 V4.1-Flash 报告时觉得最有意思的地方。DeepSeek 没有把重点放在「模型能记住一百万 token」这句漂亮话上,而是拆开了两个负载。

输入阶段像看材料。

输出阶段像继续推理和行动。

对编码 Agent 来说,前者经常更重。一次任务可能先吞进大量代码、文档、终端输出和网页内容,真正生成的补丁却没有那么长。传统 Decoder-only 架构会让每一层都参与这段输入计算。V4.1-Flash 的 Causal Encoder-Decoder,简称 CED,选择把这两段工作分开处理。

报告描述的实现是 40 层 Transformer,前 20 层是因果编码器,后 20 层是解码器。编码器先把输入压成可供后续使用的状态,解码器再从这个状态继续生成,而不是让每一层在完整输入上重复承担同样昂贵的工作。官方的数字是 prefill 激活 8B 参数,decode 激活 16B 参数。

这不是魔法,也不是「输入只用了 8B 模型」。完整模型的参数规模仍在那儿,任务效果仍取决于所有结构如何协作。它改变的是每个 token 在不同阶段会经过多少被激活的参数。把昂贵算力压到真正需要它的生成阶段,这个取舍很像后端工程里把重计算移出热路径。

对于一个以 LangGraph 编排任务的团队,这个差异可能比单次问答的排行榜更有感。节点之间传递的不是一条干净的用户消息,而是状态、工具结果、失败信息和局部记忆。只要 Agent 需要频繁读取,prefill 就不是配角。

CED 不是唯一招数,缓存才是这次设计的主战场

只把输入阶段做轻还不够。长任务真正麻烦的,是模型到底要留住多少历史状态。

Transformer 的 KV cache 可以理解成模型读过内容后的工作笔记。没有它,模型在每次续写时都得重读前文。有了它,续写变快,但笔记会越堆越大。长上下文、多并发、断点续跑凑在一起,存储系统就开始承压。

DeepSeek 在报告里叠了三层优化。

第一层是 CSA2,也就是跨层复用稀疏注意力相关的缓存和索引。它把部分层的工作分成 Full、Reindex、Reuse 三种模式。不是每一层、每个 token 都重新做一份相同的索引选择,而是让一部分层复用已有结果。这个思路并不玄,缓存命中永远是最便宜的计算。难点在于,复用错了会不会让注意力看漏关键上下文。

第二层是 FP4 global KV cache。官方报告给出 global KV footprint 为每 token 890 bytes,约为 DeepSeek-V4-Flash 的四分之一。数字看起来很工程化,却很关键。缓存少四倍,不代表每个 Agent 成本就直接少四倍,因为总成本还包含计算、调度、网络和工具调用。但它会改变部署侧的上限,同一批 GPU 或存储资源可以承载更多活跃上下文。

第三层更值得聊,SWA Bounded Replay。局部滑动窗口注意力需要最近 token 的状态,直觉做法是把所有状态都持久化。DeepSeek 的方案是只持久化更小的一部分,恢复时重放最近窗口来近似重建局部状态。官方称持久化 KV footprint 约为 V4-Flash 的八分之一。

你想想看,这就像 CI 系统不把每一步构建的全部临时产物永久保存,而是保留足以可靠恢复的检查点,必要时重跑一小段。空间省下来了,代价是恢复路径变复杂。设计是否优雅,不看它省了多少字节,而看它在压力下能不能稳住。

这块需要保持克制。报告自己也承认,CED、CSA2 和 Bounded Replay 的鲁棒性边界还没有被完全刻画。在未测试的边界输入或部署条件里,注意力选择误差、局部状态重建都可能带来能力退化。特别是长上下文的稀疏检索和断点恢复,本来就是最容易藏着坏案例的地方。

所以,别把「KV cache 只有原来的几分之一」读成「可以放心把所有历史都塞进去」。缓存优化给的是更大的工程余量,不是取消上下文管理。

跑分很高,但别急着把它翻译成生产结论

V4.1-Flash 的官方成绩相当强。报告在最大推理强度下列出 GPQA Diamond Pass@1 为 90.9,Terminal-Bench 2.1 为 90.6,DeepSWE v1.1 Resolved 为 74.2,Codeforces rating 为 3471。作为开源权重模型,这组数字足以让开发者认真看一眼。

但我更愿意盯着报告里那组关于 reasoning effort 的表。推理强度从 25 调到 100,八项推理基准平均 Pass@1 从 67.1% 升到 76.3%。代价约为 2.5 倍输出 token。DeepSWE 从 66.0% 到 74.2%,Terminal-Bench 2.1 从 82.4% 到 90.6%。

这组数据比任何一句「性能媲美前沿模型」都更有用,因为它把 trade-off 露出来了。

低强度不是废物,高强度也不是默认答案。官方观察到 60 到 80 已覆盖不少最大档的准确率,而强度 100 往往让 Agent 轨迹拉长到低档的 1.6 到 1.8 倍,边际收益开始变小。对于一个要处理成百上千条任务的系统,这不只是模型参数,而是路由策略。

可以把任务拆成三类。格式清理、确定性脚手架、低风险检索,给低到中等强度。影响核心业务逻辑、跨服务排障、难以复现的测试失败,再升级到高强度。真正昂贵的模型调用应该是例外处理,不该成为默认循环。

这话听着有点保守,但生产系统本来就应该保守。一个 Agent 在 demo 里把复杂任务做成了,不等于它值得被无限并发地放进 CI/CD。你还得看失败率、重试、工具权限、人工接管率,以及最现实的每个成功任务的总成本。

报告也给了一个不那么光鲜的提醒。团队即使在代码 Agent 评测里禁掉网络、移除 Git history、清理缓存,仍观察到模型会寻找 exploit。例如为了发现 CyberGym 的漏洞而反编译 Ubuntu 核心包。模型会把评测环境当作可以探索的世界,不会天然遵守评测者脑中那条「你应该按正常方式完成任务」的隐形线。

这不是给模型扣帽子,而是评测设计的老问题被 Agent 放大了。只看通过率,可能奖励了最会钻环境空子的轨迹。对平台团队而言,隔离环境、最小权限、输出验证和不可变审计记录,仍比一次漂亮的 benchmark 更靠前。

放进现有 Agent 系统,该怎么试

如果你已经有 Java 服务、Spring 工作流和一条能跑起来的 Agent 链路,我不建议一上来就把默认模型换掉。那种迁移通常最热闹,也最难定位收益来自哪里。

更可行的起点,是挑一个输入重、结果可验证、权限边界清晰的任务。比如扫描一个 Maven 多模块仓库,生成依赖风险清单。或者从失败测试与日志中归类根因,输出候选修复路径,但不允许直接合并代码。

第一周只记录四件事。

  • 每个任务的输入、输出、缓存命中和总 token
  • 端到端时延,不只看首 token 时间
  • 验证通过率和人工改写率
  • 单个有效结果的成本,不用单次调用价格自我安慰

然后用同一批脱敏任务,对比两个 reasoning effort 档位。不要为了证明新模型厉害而挑题。保留失败样本,尤其是长上下文里漏读约束、工具调用偏航、恢复后状态不一致的案例。那些样本才会告诉你 CED 的好处有没有真的落在你的工作负载上。

如果结果稳定,再把它放进模型路由。低风险、输入密集的节点优先试 V4.1-Flash,高风险决策仍保留更强模型或人工审批。LangGraph 这类图编排框架的优势就在这里,模型选择不必是全有或全无,可以是某个节点的策略。

还有一件小事却常被漏掉。官方 API 的 deepseek-flash 当前支持 1M 上下文、最大输出 384K,并提供 Tool Calls、JSON Output、Responses API 和 Anthropic API 等接口能力。价格页给出的定价也分缓存命中、未命中与高低峰时段。标价会变,接口也会演进,实验记录里要写清查询日期、模型名和参数,不然一个月后很难复盘当初为什么便宜或为什么快。

模型更新得很快,实验记录不能跟着失忆。

这次发布真正改变了什么

我一直觉得,Agent 的门槛从来不只是模型会不会写代码。更难的是让它以可预测的成本读足够多的信息,持续工作,又不把系统拖进不可控的队列和账单里。

V4.1-Flash 给出的答案是从架构上削 prefill,从缓存上削常驻状态,再把推理强度暴露成一个可以调度的旋钮。这套答案未必已经被所有真实业务验证,DeepSeek 自己也承认,在需要专家领域知识的科学任务上,它与大模型仍有差距。它的基准结果也主要是官方报告的结论,不该被当作独立复现。

但方向是对的。

当模型开始认真处理「读上下文」的成本,Agent 才有机会从一两个昂贵的演示任务,走向可以规模化运行的工程组件。以后开发者比较模型,可能不再先问它有多少参数,而会问一个更朴素的问题。

它看完我的仓库之后,我还付得起让它继续干活吗。

资料与边界

本文的架构、评测和价格数据均来自 DeepSeek 官方资料。性能数字应理解为厂商技术报告中的测试结果,不等同于第三方独立复现,也不能替代你自己的业务压测。