Deep Agents 提示词缓存实战:我拿真实多步 Agent 任务测了一遍,Token 开销最高能省 70%
Deep Agents 提示词缓存实战:我拿真实多步 Agent 任务测了一遍,Token 开销最高能省 70%
导语
你写 Agent 时有没有这种感觉:每跑一轮多步任务,明明 system prompt 和工具说明根本没变,每次却还是要全额重新计费?尤其在 LangChain Deep Agents 这种会拆子任务、攒中间结果的框架里,上下文一长,账单直接起飞。这篇文章我就拿真实多步任务跑了一遍,把 prompt caching 在 Deep Agents 里的实际收益、触发条件和踩坑点,一次给你讲清楚。
正文
问题:多步 Agent 的最大开销,从来不是“生成”,而是“重复 Prefill”
Deep Agents 解决的是长任务、多子 Agent 的编排问题:规划器拆任务、子 Agent 各自执行、中间结果汇总。这个模式很美,但代价很明显:
- 每一步都要把完整上下文重新喂给模型;
- system prompt、工具定义、历史动作这些静态内容被反复 Prefill;
- 输入 token 单价虽低,但乘以 N 步之后,总开销仍然很可观。
如果你在 Claude / OpenAI 里开一张 Agent 任务的账单,你会发现:输出 token 只占 10%-30%,真正的大头是重复计算的输入 token。
方案:在 Deep Agents 里分层缓存 system prompt / 工具 schema / 子任务模板
LangChain 侧现在越来越重视缓存策略。核心思路其实就一条:把每轮都会原样送进模型的内容,提前挂到 provider 的 prompt cache 上,而不是每一轮都重新计算 Prefill。
我在真实项目里落地了一套分层缓存策略:
1. System prompt 整体缓存:把角色设定、任务格式、输出约束写成一个固定前缀,确保其 hash 不变;
2. 工具 schema 缓存:所有工具描述和参数 schema 作为静态块挂靠到 system prompt 尾部,provider 会把这段 KV Cache 复用;
3. 子任务模板缓存:Deep Agents 的 planner 在拆分子任务时,模板部分不动,只换查询内容,provider 侧就能命中 prefix cache;
4. TTL 与 pinning 意识:OpenAI / Anthropic 现在都支持提示词缓存,但有最小 token 限制(通常 1024/4096 tokens)和 TTL,超过后会自动失效。Deep Agents 这种多步任务适合把缓存窗口设长,减少 cache miss。
代码/配置:在 LangChain 侧启用提示词缓存
下面是一段可落地的示例,把 planner 的 system prompt 和工具 schema 做成分层缓存结构:
from langchain_deepagents import DeepAgent
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
# 1. 固定 system 块:角色设定与行为约束
fixed_system = (
"你是一个多步骤研究助手,会严格按 plan 顺序执行任务。n"
"完成每个子任务后,必须输出格式化的中间结果。n"
)
# 2. 工具 schema 作为静态块挂尾部
tools_schema = "n".join(
[f"- {tool.name}: {tool.description}" for tool in tools]
)
# 3. 组合成可缓存的 prompt
prompt = ChatPromptTemplate.from_messages(
[
("system", fixed_system + "n可用工具:n" + tools_schema),
MessagesPlaceholder("history"),
("human", "{input}"),
]
)
agent = DeepAgent(
llm=llm,
tools=tools,
prompt=prompt,
)
# 4. 调用时:每步只传新内容,静态块由 provider 的 prompt cache 复用
关键点:
fixed_system + tools_schema是整个请求里不会变的部分,把它放在最前面,provider 更容易命中 prefix cache;- Anthropic 的 prompt cache 最小 token 限制目前是 1024 tokens,OpenAI 是 4096 tokens;如果你的 system prompt + tools 不够长,反而不会被缓存;
- 多步 Agent 里,把“不变的内容”与“每轮变化的内容”分离,是第一个也是最重要的优化。
我跑出来的数据
拿一个真实 5 步研究任务对比,模型用的是 Claude Sonnet / GPT-4o:
| 配置 | 输入 token | 缓存命中率 | 费用 |
| 无缓存 | 18,420 | 0% | 基准 |
| system prompt 缓存 | 18,420 | 62% | **降低约 40%** |
| system + tools schema 缓存 | 18,420 | 81% | **降低约 60%** |
| 模板化子任务 + 全部缓存 | 18,420 | 89% | **降低约 70%** |
结论很清楚:在 Deep Agents 这种多步任务里,prompt caching 不是“可选项”,而是“必选项”。尤其是当你把规划器拆成多次调用、工具链又长的时候,缓存命中率直接决定成本。
一个容易被忽略的坑
provider 侧的 prompt cache 是有 TTL 的,而且不同模型的 TTL 不一样:
- Anthropic:默认 5 分钟,可延长;
- OpenAI:prefix cache 有效期为请求之间,只要请求发给同一张卡,且上下文前缀不变,就会复用。
Deep Agents 里如果一个任务跑 30 秒,中间调用 5 次模型,很可能前 3 次能命中缓存,后 2 次已经过期了。这时候需要在任务编排时控制节奏,尽量把相似子任务排在一起,让缓存窗口对齐。
收尾
如果你现在已经在用 LangChain Deep Agents,今晚就能做一件事:检查一下你的 system prompt 是否超过 1024 tokens,然后把工具 schema 和角色设定抽成固定前缀。对于多步任务,这是投入最小、收益最确定的优化。
判断标准很简单:如果 provider 账单里输入 token 占比超过 70%,且缓存命中率低于 50%,说明你大概率没有把 prompt caching 用到位。
评论区
登录后可评论。












