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 用到位

评论区

0 条评论

登录后可评论。

查看完整榜单
查看完整榜单
查看完整榜单