Prompt 缓存 (Cached Tokens)
本文总结了一次围绕 LLM 缓存 token、Agent Prompt 设计、组合 Agent 架构 的完整技术讨论,目标是建立正确、可落地的工程认知,而不是停留在表面“省钱技巧”。
一、什么是 LLM 的缓存 Token(Cached Tokens)
一句话定义:
缓存 token = 模型已经计算过、可以复用中间结果的输入 token,再次使用时计费更低。
它不是: - ❌ 记忆 - ❌ 数据库缓存 - ❌ 对话历史
而是: - ✅ 模型前向计算(Attention / KV Cache)的复用 - ✅ 纯粹的 数学计算结果缓存
二、缓存 Token 的判定条件(非常严格)
是否命中缓存,仅取决于:
同一个模型 + 完全一致的输入 token 前缀
与以下因素无关:
- API Key
- 用户是谁
- 地理位置
- 应用实例
- 是否是同一个 Agent
- 是否是同一个进程或服务器
三、一个容易误解但必须澄清的问题
❓ 不同用户会不会“用到彼此的缓存”?
从计算复用层面:是的。 从数据与安全层面:完全不是你以为的那种“共享”。
关键澄清:
缓存的不是“文本内容”, 而是“模型对这段 token 的数学中间状态”。
只有在 token 序列 100% 一致 的情况下,模型才能安全复用这些中间结果。
- 不会泄露 prompt
- 不会暴露用户
- 不会共享输出
- 也无法被反向推断
四、为什么 Agent 应用天然适合吃缓存?
Agent 的 Prompt 结构通常是:
System Prompt(很长、很稳定)
+ Tool Schema(很长、很稳定)
+ 行为规则(很长、很稳定)
--------------------------------
User Input(短、变化)
这意味着:
- 前缀高度稳定
- 重复率极高
- 成本中最大的一段可以被缓存
📌 缓存机制本质上“奖励”了工程化 Prompt。
五、组合 Agent 是如何“各自命中缓存”的?
关键结论
不是人为划分缓存,也不是靠不同 API Key, 而是每个 Agent 都有自己长期稳定、重复出现的 Prompt 前缀。
例如:
- Planner Agent:任务拆解规则
- Executor Agent:工具调用协议
- Critic Agent:结果校验规则
它们的 system prompt 不同 → token 前缀不同 → 自然形成各自的缓存命中模式。
📌 这是统计意义上的“高频前缀复用”,不是显式配置。
六、真正导致缓存失效的工程雷区(重点)
1️⃣ Prompt 中混入 runtime 信息
当前时间是 {{now}}
request_id: {{uuid}}
👉 每次都不同 → 缓存 0% 命中
2️⃣ Tool Schema / JSON 顺序不稳定(Node 非常常见)
JSON.stringify(schema) // key 顺序可能变化
👉 token 改变 = cache miss
3️⃣ Agent 框架偷偷改 system prompt
- 自动加说明
- 自动拼历史
- 自动注入调试信息
👉 “你以为没变,其实已经变了”
4️⃣ 多语言 / 多模板混用
- 有时中文
- 有时英文
👉 token 完全不同,缓存完全不同
5️⃣ 一个 Agent 多种人格 Prompt
Executor-fast
Executor-safe
Executor-v2
👉 本质是多个 Agent,缓存不会共享
七、Agent 工程的核心心法(比缓存更重要)
1️⃣ Prompt = 程序,不是说明书
Agent 更像:
- 状态机
- 控制器
- 协议解释器
而不是聊天机器人。
2️⃣ 判断 / 分支 / 中止条件必须前置
一个成熟的 Agent Prompt,必须明确:
- 何时调用工具
- 何时重试
- 何时失败
- 何时停止
3️⃣ Tool 设计 > Prompt 设计
高质量 Agent 依赖:
- 严格 schema
- 稳定输出
- 可枚举错误
4️⃣ 不要迷信“超长上下文”
更成熟的做法是:
- LLM 负责决策
- 状态存在外部(DB / KV / Vector)
- Prompt 只保留“最小决策上下文”
5️⃣ 组合 Agent > 单一万能 Agent
拆分为:
- Planner
- Executor
- Critic / Validator
不仅更稳定,也更容易命中缓存。
八、最终正确的心智模型(请记住)
- 缓存的是 计算,不是文本
- 判定标准只有 token 是否完全一致
- 与用户、地区、API Key 无关
- 稳定的 Agent Prompt = 高缓存命中率
- 好 Agent 本质上是“可预测的纯函数”
九、下一期你想看什么?
你更希望深入哪一块?
- 🔹 RAG 的工程设计与常见误区
- 🔹 组合 Agent 之间的调用与编排模式
- 🔹 Agent Tool / MCP 的协议设计最佳实践
- 🔹 如何调试、测试、评估一个 Agent
- 🔹 长期运行 Agent 的状态与记忆管理
- 🔹 单 Agent vs 多 Agent 的真实成本对比
👉 可以直接选编号,或提出你更关心的方向。