Deep Agents 中的提示词缓存

---
title: "Deep Agents 中的提示词缓存"
author: "Alex Olsen (@its_ao)"
source_url: "https://x.com/its_ao/status/2070556265906917860"
published_at: "2026-06-26T17:14:17.000Z"
fetched_at: "2026-06-26T21:11:57Z"
updated_at: "2026-06-26T21:13:17Z"
language: "zh"
review_status: "draft"
---

![](https://pbs.twimg.com/media/HLvH6uTXUAAg84v.png)

# Deep Agents 中的提示词缓存

在大规模、低成本运行 agent 时,一个很有力的杠杆是**提示词缓存(Prompt Caching)**。这是模型提供商提供的一项功能,可以[把推理的 token 成本降低 41–80%](https://arxiv.org/html/2601.06007v2)。正如 [Manus AI 所说](https://manus.im/blog/Context-Engineering-for-AI-Agents-Lessons-from-Building-Manus):

> *“如果只能选一个指标,我会说 KV-cache 命中率是生产阶段 AI agent 最重要的单一指标。”*

不过,不同模型提供商支持的缓存控制策略各不相同,所以要做出一套不绑定具体提供商的缓存方案,会更棘手一些。

[Deep Agents](https://docs.langchain.com/oss/javascript/deepagents/overview) 是我们通用的、模型无关的 agent 运行框架,支持所有主要提供商的提示词缓存功能。我们接下来会深入看看 [Deep Agents](https://docs.langchain.com/oss/javascript/deepagents/overview) 如何用提示词缓存来降低 API 成本;但在此之前,先看看提示词缓存如何降低聊天模型对话里的 token 成本。

### TL;DR:提示词缓存

![](https://pbs.twimg.com/media/HLtHPEmWgAA3bFT.jpg)

聊天模型对话的 token 成本增长得很快。每出现一条新消息,模型都必须重新处理对话中此前的所有 token,包括:

- 系统提示词
- 工具描述
- 已加载的技能
- 消息历史
- 新消息

当我们选择启用提示词缓存时,提供商会在处理完一段提示词后,把模型状态保存成一个快照:

![](https://pbs.twimg.com/media/HLtHTHCWkAA8MJo.jpg)

下一次请求时,模型会从这个快照继续,只处理新文本。

不过,加载新的技能或工具,可能会修改对话中更*靠前*位置的提示词,从而让缓存失效。有些模型提供商允许我们在提示词的较早位置显式添加缓存断点,这样即使不能命中完整提示词,也能命中其中一部分,而不是整个缓存都失效。不过,并不是所有模型提供商都支持显式缓存断点:

|   | Anthropic  | OpenAI  | Gemini  | Fireworks | Baseten |
| --- | --- | --- | --- | --- | --- |
|  显式断点 | ✅  | ❌  | ✅  | ❌  | ❌  |

显式缓存也只是提示词缓存功能中的一种,而且不同提供商的支持情况差异很大:

|  | **Anthropic** | **OpenAI** | **Gemini** | **Baseten** | **Fireworks** |
| --- | --- | --- | --- | --- | --- |
| **显式断点** | ✅ | ❌ | ✅ | ❌ | ❌ |
| **可配置 TTL** | ✅ | 取决于模型 | ✅ | ❌ | ❌ |
| **缓存预热** | ✅ | ❌ | ❌ | ❌ | ❌ |
| **路由键** | ❌ | ✅ | ❌ | ❌ | ✅ |

*提示词缓存功能的支持情况变化很快。关于功能支持,请务必查看模型提供商的文档。*

由于各家提供商的提示词缓存实现和功能支持不同,要在多个提供商之间实现最大的成本节省,并不容易。

### 我们在 Deep Agents 里是怎么解决的

[Deep Agents](https://docs.langchain.com/oss/javascript/deepagents/overview) 运行框架会尽力利用提示词缓存功能,自动完成以下几件事:

1. 在提供商支持时设置显式缓存断点
2. 在不支持显式断点时,选择启用提供商侧的隐式缓存
3. 组织你的提示词,让缓存读取最大化

这些策略支持**所有主要提供商**,所以你可以随时切换提供商,同时仍然尽可能多地节省 token。为了利用特定提供商的功能,这个框架会检测当前模型提供商,并把缓存交给[提供商专用中间件](https://docs.langchain.com/oss/javascript/langchain/middleware/built-in#provider-specific-middleware)处理。你也可以在自己的 createAgent() 中使用这些中间件,获得提示词缓存带来的节省:

```typescript
// In Deep Agents you get prompt caching for free!
const agent = createDeepAgent({
	model: "gpt-5.5",
});

// In LangChain, opt in via our middleware:
const agent = createAgent({
  model: "claude-haiku-4-5-20251001",
  middleware: [anthropicPromptCachingMiddleware()],
});
```

Deep Agents 运行框架也会组织你的提示词和显式缓存点,尽量减少缓存退化。理想情况下,一次模型调用里的静态前缀(你的工具描述、技能、系统提示词)应保持不变。但在更新记忆或压缩对话等情况下,它*确实可能*发生变化,导致缓存失效。Deep Agents 会通过组织提示词和显式缓存点来缩小影响范围:例如,当一段记忆被更新时,你仍然可以命中提示词中某个子集的缓存。

### 提示词缓存真正能省多少

功能表告诉我们哪些事情是可能的。为了看看提示词缓存到底能省多少,我们让 Deep Agents 的 [eval suite](https://www.langchain.com/blog/how-we-build-evals-for-deep-agents) 分别跑在三家提供商的一款中档模型上:*claude-haiku-4-5*、*gpt-5.4-mini* 和 *gemini-3.5-flash*。结果见下图。在真实 agent 轨迹上,提示词缓存把 token 成本降低了 49–80%。

![](https://pbs.twimg.com/media/HLtKFKXXIAApF-T.png)

- *claude-haiku-4-5*:**-77%**。借助 Anthropic 的显式断点,我们可以让提示词中的很大一部分保持缓存状态。这显著降低了每次请求的 token 成本。
- *gpt-5.4-mini*:**-80%**。OpenAI 的自动最长前缀缓存带来了可观的 80% 成本下降。
- *gemini-3.5-flash*:**-49%**。Gemini 的隐式缓存[不对节省幅度做显式保证](https://ai.google.dev/gemini-api/docs/generate-content/caching),但我们仍然看到了相当大的节省。

还有一点值得注意:对话越长,缓存的收益越高。缓存前缀会在每一轮中复用,所以长周期任务受益最大。

### 用 LangSmith 做可观测性

提示词缓存带来的成本节省,只有在你能衡量它时才真正有意义。[LangSmith](https://docs.langchain.com/langsmith/observability) 可以在单次调用和整条轨迹两个层级上,让你看到 API 成本、缓存读取和 token 用量:

![](https://pbs.twimg.com/media/HLtKVosWAAAGdKQ.jpg)

对每次调用,你都能看到首 token 时间、总输入 token、缓存读取 token 和总输出 token,并汇总到每条轨迹上。因为缓存读取会单独列项,所以你可以准确看到每段提示词里有多少内容是从缓存返回的,而不是重新处理出来的。

这也是我们在这篇文章里得到这些数字的方法:

1. 针对每个 agent 配置运行 Deep Agents eval suite
2. 在 LangSmith 仪表盘里检查 trace 数据,验证运行结果
3. 通过 [LangSmith Client SDK](https://reference.langchain.com/python/langsmith) 拉取运行数据
4. 把数据放进 Jupyter notebook 里计算各提供商的成本差异(或者让 agent 使用 [LangSmith Skills](https://docs.langchain.com/langsmith/skills) 来帮忙)

LangSmith 让我们能够拆分缓存、轨迹长度和更便宜的轮次分别带来的节省,这可以指导我们如何优化自己的 agent。关于如何在 LangSmith 中读取并使用这些数据,[这里](https://www.langchain.com/blog/debugging-deep-agents-with-langsmith)有更多说明。

### 提示词缓存的下一步

模型提供商还没有在提示词缓存上收敛到一套共同的功能集。上面的结果里,显式断点带来了一些节省,但这只是开始。还有少数其他功能——缓存预热、路由键、可配置 TTL——有望进一步释放成本节省和延迟收益。

你现在就可以通过使用 createDeepAgent 来利用目前已支持的功能,不需要额外配置。随着模型提供商增加更多功能支持,我们会继续把它们整合进现有框架里。