凡人AI AI 咨询 · 定制开发 · 开发框架 把 AI 从 demo 做到敢商用
← 全部技术洞察
厂商横评 AI Agent 上下文缓存系列 ③ 2026-07-20

同样的缓存,三家三种玩法:DeepSeek、Qwen、豆包 Prompt 缓存机制横评

同样的缓存,三家三种玩法:DeepSeek、Qwen、豆包 Prompt 缓存机制横评

AI Agent 上下文缓存系列第三篇。逐家扒官方 API 文档:机制、代码、坑,以及大家最关心的——命中价格对比表。所有数字截至 2026-07-13,来源全部为官方文档,文末附链接。

系列前两篇讲的是"你这一侧"的功课:把 prompt 前缀做稳、让工具集只增不减。这一篇换到桌子对面——服务商那一侧的缓存规则到底长什么样。

规则值得逐家精读,因为三家的设计哲学完全不同:DeepSeek 走"全自动、不给你任何开关",Qwen 走"隐式保底 + 显式精控双轨",豆包走"缓存即资源、按小时收存储费"。同一套 Agent 代码换个供应商,缓存行为和账单结构都会变。

先给赶时间的人上结论:

DeepSeek Qwen(百炼) 豆包(火山方舟)
隐式缓存 ✅ 默认开、不可关 ✅ 默认开、不可关 ✅ 默认开、不可关(seed-2.0 起)
显式缓存 ❌ 无(仅支持自动缓存) cache_control 标记 ✅ Session 缓存 + 前缀缓存
隐式命中价 输入价的 ≈0.8%-2%(flash:0.02 vs 1 元/M;pro:0.025 vs 3 元/M,官方 2026-04 已将命中价降至首发价 1/10) 输入价的 20% 输入价的 20%(旗舰档)
显式命中价 输入价的 10%(创建 125%) 同隐式,另收存储费
缓存存储费 0.017 元/百万 token/小时
最小缓存长度 未公开(按单元落盘) 隐式 256 / 显式 1024 1024
缓存寿命 几小时到几天 显式 5 分钟(命中重置) 显式 TTL 可配,最长 7 天
命中字段 prompt_cache_hit_tokens prompt_tokens_details.cached_tokens prompt_tokens_details.cached_tokens

下面逐家拆。

DeepSeek:全自动派,便宜到不像话

DeepSeek 的哲学最极端:上下文硬盘缓存对所有用户默认开启,没有开关、没有标记、不需要改一行代码。 官方文档里连"如何开启"这一节都不存在。

机制:缓存前缀单元

值得注意的是,DeepSeek 现在的命中规则不是朴素的"逐字节最长前缀匹配"。受 Sliding Window Attention 影响,每条缓存前缀是一个独立的完整单元,后续请求必须完整匹配某个缓存前缀单元才能命中。落盘时机有三个:

  1. 请求结束位置落盘:每次请求的用户输入结束位置和模型输出结束位置,各产生一个缓存前缀单元;
  2. 公共前缀检测落盘:系统发现多次请求存在公共前缀时,把公共前缀单独落盘成一个单元;
  3. 固定 token 间隔落盘:长输入/长输出按固定 token 间隔切单元,避免超长前缀迟迟等不到"结束位置"而完全无法缓存。

这带来一个和直觉不同的行为:第一轮发 A+B、第二轮发 A+C,第二轮不命中A+C 无法完整匹配单元 A+B)——但系统此时会检测到公共前缀 A 并落盘,第三轮发 A+D 就能命中 A 了。也就是说,"改了中段"的第一次请求是教学成本,同样的分叉点出现第二次才开始省钱。 对多分支 Agent(同一个长文档、不同任务分叉)这是个值得知道的细节。

DeepSeek 缓存前缀落盘:第二次教学,第三次命中

代码:零配置,只需要读账单

from openai import OpenAI

client = OpenAI(api_key="sk-xxx", base_url="https://api.deepseek.com")

resp = client.chat.completions.create(
    model="deepseek-v4-flash",
    messages=[
        {"role": "system", "content": "你是一位资深财报分析师……"},
        {"role": "user", "content": f"{report_text}\
\
请总结这份财报的关键信息。"},
    ],
)

# DeepSeek 特有的两个 usage 字段
print(resp.usage.prompt_cache_hit_tokens)   # 命中缓存的输入 token
print(resp.usage.prompt_cache_miss_tokens)  # 未命中的输入 token

价格:命中价是全价的 1/50 甚至更低

模型 输入(未命中) 输入(命中) 命中/未命中 输出
deepseek-v4-flash 1 元/M 0.02 元/M 2% 2 元/M
deepseek-v4-pro 3 元/M 0.025 元/M ≈0.8% 6 元/M

官方在 2026 年 4 月把全系命中价降到了首发价的 1/10,才有了这个夸张的折扣率。在 DeepSeek 上,缓存命中的部分约等于免费——这也意味着前缀稳定性优化在 DeepSeek 上的杠杆是三家里最大的:命中与不命中之间差着 50 倍价差。

两个注意点:缓存是"尽力而为",官方明确不保证 100% 命中;缓存寿命为几小时到几天,自动清理,无法手动管理。

Qwen(阿里云百炼):双轨制,隐式保底、显式精控

Qwen 提供两种模式,单次请求二选一、互斥

显式缓存是 Anthropic 风格的断点式设计,几条硬规则:

Qwen 隐式缓存与显式缓存双轨机制

代码:cache_control 标记

from openai import OpenAI
import os

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)

def ask(question: str):
    return client.chat.completions.create(
        model="qwen3.7-max",
        messages=[
            {
                "role": "system",
                "content": [{
                    "type": "text",
                    "text": long_code_repo,  # 超过 1024 token 的稳定大块
                    # 从 messages 开头到此处的内容将创建为缓存块,TTL 5 分钟
                    "cache_control": {"type": "ephemeral"},
                }],
            },
            {"role": "user", "content": question},
        ],
    )

first = ask("这段代码的内容是什么")
print(first.usage.prompt_tokens_details.cache_creation_input_tokens)  # 创建:1605
print(first.usage.prompt_tokens_details.cached_tokens)                # 命中:0

second = ask("这段代码可以怎么优化")
print(second.usage.prompt_tokens_details.cache_creation_input_tokens)  # 创建:0
print(second.usage.prompt_tokens_details.cached_tokens)                # 命中:1605

Agent 开发者最该划线的一段

官方文档里藏着一条对 Agent 至关重要的说明:Function Calling 场景下,tools 参数会被序列化为 JSON 作为 system 消息的一部分参与缓存计算,且工具定义不支持独立打标记。官方给出的三条纪律——工具列表顺序一致、字段顺序一致、字段结构一致——和本系列第二篇"工具集只增不减 + 排序冻结"的结论完全同源。厂商文档亲自确认:tools 就是前缀,抖一下就整条失效。

价格(qwen3.7-max,2026-07 挂牌价 12 元/M 输入、36 元/M 输出,限时 5 折中)

场景 单价系数 按原价折算
输入(无缓存) 100% 12 元/M
隐式命中 20% 2.4 元/M
显式命中 10% 1.2 元/M
显式创建 125% 15 元/M

显式比隐式便宜一半,代价是 125% 的创建溢价和 5 分钟 TTL。官方经济账很清楚:同一块前缀 5 分钟内复用 ≥2 次才回本,高频复用越多越赚;低频、间隔长的场景老实用隐式。

豆包(火山方舟):缓存即资源,按小时收租

豆包的体系最复杂,也最"云厂商":缓存不是计费折扣,而是一种你显式持有的资源——有 ID、有 TTL、有存储费。

三种缓存:

  1. 隐式缓存:doubao-seed-2.0 及之后系列 + seed-code 支持,自动开启不可关,1024 token 起,命中按缓存价计费,存储不计费。官方特别提示:不保证命中,也不保证命中的是最长前缀(系统会权衡资源和收益选一段命中)。
  2. 显式·前缀缓存:把静态内容(系统提示词、规则模板、超长文档)创建成一个缓存对象,拿到 ctx- 开头的 ID,后续请求引用 ID,这块内容根本不再随请求发送。支持并发,TTL 1 小时~7 天。
  3. 显式·Session 缓存:会话级缓存,每轮对话自动把新内容更新进去——相当于平台替你托管了对话历史,每轮只发新消息。不支持对同一 Session 并发请求,有 last_history_tokens(滚动窗口,FIFO 淘汰旧消息)和 rolling_tokens(触顶删一段重算)两种截断策略。

如果你读过本系列第一篇会心一笑:豆包的前缀缓存就是"把稳定前缀搬出请求体"的平台级实现——我们在应用层手工做的事,它做成了 API。

豆包 Context API:缓存成为可管理资源

代码:Context API 两步走

# 第 1 步:创建前缀缓存(mode 换成 "session" 即 Session 缓存)
curl https://ark.cn-beijing.volces.com/api/v3/context/create \
  -H "Authorization: Bearer $ARK_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "<YOUR_ENDPOINT_ID>",
    "messages": [
      {"role": "system", "content": "<超长的系统提示词/规则模板/文档>"}
    ],
    "ttl": 3600,
    "mode": "common_prefix"
  }'
# 返回 {"id": "ctx-****", ...}  ← 缓存 ID

# 第 2 步:带 context_id 对话,缓存内容不再出现在请求里
curl https://ark.cn-beijing.volces.com/api/v3/context/chat/completions \
  -H "Authorization: Bearer $ARK_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "context_id": "ctx-****",
    "model": "<YOUR_ENDPOINT_ID>",
    "messages": [{"role": "user", "content": "你好"}]
  }'
# usage.prompt_tokens_details.cached_tokens 即命中量

新一代的 Responses API 也支持同一套能力("caching": {"type": "enabled"} + previous_response_id),且支持缓存多模态内容和工具调用信息,官方现在更推荐那条路。

价格:命中 20% + 存储费

模型 输入 命中 命中/输入 存储 输出
doubao-seed-2.1-pro 6 元/M 1.2 元/M 20% 0.017 元/M/时 30 元/M
doubao-seed-2.1-turbo 3 元/M 0.6 元/M 20% 0.017 元/M/时 15 元/M
doubao-seed-1.8(32K 档) 0.8 元/M 0.16 元/M 20% 0.017 元/M/时 2-8 元/M

有意思的细节:seed-1.8 的命中价在各输入长度分段里恒定 0.16 元/M,而输入价随分段涨到 1.2、2.4 元——长上下文档位里命中折扣实际达到 13%、6.7%,上下文越长,缓存越划算

存储费怎么算:按每自然小时内缓存的最大 token 量 × 0.017 元/M 累加。挂一个 100K token 的前缀缓存,一天成本约 0.04 元——对高频复用微不足道,但低频场景下"挂着不用"的缓存是纯赔钱,TTL 要按业务节奏设。

算一笔账:同一个 Agent 负载,三家各花多少钱

设一个典型 Agent 请求:输入 50K token,其中 40K 是稳定前缀(system + 工具 + 文档)且命中缓存,10K 是新内容。各家旗舰对比(不计输出、不计创建/存储等一次性小头):

无缓存 有缓存 输入成本降幅
deepseek-v4-pro 0.150 元 0.031 元 -79%
qwen3.7-max(隐式,按原价) 0.600 元 0.216 元 -64%
qwen3.7-max(显式,按原价) 0.600 元 0.168 元 -72%
doubao-seed-2.1-pro 0.300 元 0.108 元 -64%

两个观察:

① 折扣率的天花板差异巨大。 20% 命中价(Qwen 隐式/豆包)意味着理论极限省 80%;DeepSeek 的 1%-2% 命中价意味着理论极限省 98%——你在 prompt 工程上抠出的每一个百分点命中率,在 DeepSeek 上值 5 倍的钱。

国产三家缓存命中价占输入价比例

② 基础单价和缓存机制要一起看。 豆包 2.1-pro 输入价是 qwen3.7-max 原价的一半,加上同样 20% 的命中系数,绝对成本占优;但 Qwen 显式缓存 10% 的命中价 + 增量创建计费,在"超长稳定前缀 + 高频复用"场景能反超。没有全场最优,只有匹配你负载形状的最优。

选型小抄

最后回到系列主线。三家的机制细节各不相同,但有一条铁律完全一致,三家官方文档甚至用了几乎相同的措辞:"把重复内容放在提示词开头,把差异内容放在末尾。" 厂商的缓存规则决定了折扣的深度,而你的前缀稳定性决定了折扣的广度——前两篇的功课,在哪家都不白做。


AI Agent 上下文缓存系列: ① 缓存命中率只有一半?你的 Agent 可能正在为一个时间戳买单 ② 给 Agent"卸载"技能,是一次昂贵的洁癖 ③ 同样的缓存,三家三种玩法(本篇)

如果这篇对你有用,欢迎关注 / 在看,系列还会继续。


参考资料(价格截至 2026-07-13,以官方页面实时为准)

这些坑,你的项目正在踩吗?
先聊 30 分钟——免费,不推销,聊完至少带走一条能用的建议。
预约免费诊断