Skip to content

DeepSeek API 的 KV Cache(上下文硬盘缓存)默认开启,无需修改代码。当请求前缀与之前完全一致时,命中缓存,价格从 3元/M 降至 0.025元/M(pro 模型)。适合有固定 system prompt 的 Agent、多轮对话、文档问答等场景。

DeepSeek API KV Cache(上下文硬盘缓存)

什么是 KV Cache

KV Cache 将最近请求的上下文前缀缓存到服务器磁盘。当后续请求的开头与缓存内容完全一致时,直接读取缓存,跳过重新计算,速度更快、价格更低。

自动开启,无需配置

typescript
// 无需任何额外参数,KV Cache 自动工作
const response = await client.chat.completions.create({
  model: "deepseek-v4-pro",
  messages: [
    { role: "system", content: longSystemPrompt }, // 这部分会被缓存
    { role: "user", content: "这份文档的核心结论是什么?" },
  ],
});

查看缓存命中情况

每次响应的 usage 字段包含缓存统计:

typescript
console.log(response.usage);
// {
//   prompt_tokens: 8500,
//   completion_tokens: 200,
//   total_tokens: 8700,
//   prompt_cache_hit_tokens: 8000,    // 命中缓存的 token(低价)
//   prompt_cache_miss_tokens: 500,    // 未命中缓存的 token(正常价)
// }

成本计算(pro 模型):

  • 8000 命中 token × 0.025元/M = 0.0002元
  • 500 未命中 token × 3元/M = 0.0015元
  • 200 输出 token × 6元/M = 0.0012元
  • 合计 ≈ 0.0029元(如果没有缓存,同样请求约 0.027元,节省约 89%

命中条件

KV Cache 以缓存前缀单元为基本单位,只有完整匹配才能命中:

条件说明
前缀完全一致messages 数组开头部分内容完全相同(包括 role、content)
内容不能修改修改任何历史消息都会破坏缓存
尽力而为缓存不保证 100% 命中(服务器策略决定)
不影响输出命中缓存不改变模型输出逻辑或随机性

最大化缓存命中率

实践 1:固定 system prompt,只在末尾追加新消息

typescript
// ✅ 好的做法:system prompt 固定,每轮只追加
const messages = [
  { role: "system", content: FIXED_SYSTEM_PROMPT },  // 永远不变
  ...conversationHistory,                              // 历史消息追加
  { role: "user", content: userInput },               // 最新消息
];

实践 2:文档问答将文档内容放在前缀

typescript
// ✅ 文档内容放在 system 或早期 user 消息,保持稳定
const messages = [
  {
    role: "system",
    content: `你是文档助手。以下是文档内容:\n\n${documentContent}`,
  },
  // 后续问题追加
  ...questions.map((q) => ({ role: "user" as const, content: q })),
];

实践 3:batch 处理时复用相同前缀

typescript
// ✅ 相同 system prompt 的批量请求,第一次 miss 后续全部 hit
const SHARED_SYSTEM = "你是数据分析专家...";

await Promise.all(
  items.map((item) =>
    client.chat.completions.create({
      model: "deepseek-v4-pro",
      messages: [
        { role: "system", content: SHARED_SYSTEM }, // 共享前缀
        { role: "user", content: `分析:${item}` },
      ],
    })
  )
);

适用场景

场景预期命中率节省效果
固定 system prompt 的 Agent显著
长文档 Q&A(多个问题)显著
多轮对话(对话历史稳定)中-高明显
每次完全不同的独立请求有限

常见问题

Q: KV Cache 缓存多久过期?

A: DeepSeek 没有公开具体的缓存 TTL。缓存是"尽力而为"策略,不保证永久有效,每次请求都应以 miss 做兜底计算成本。

Q: 怎么确认缓存是否真的在生效?

A: 查看 usage.prompt_cache_hit_tokens。如果连续相同前缀的请求中,第二次开始出现 prompt_cache_hit_tokens > 0,说明缓存在生效。

Q: 流式请求也能命中缓存吗?

A: 可以,缓存机制与流式/非流式无关,命中条件相同。