尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

聊一聊怎么用 Prompt Caching 节省 Token,又不让 AI 降智

发布时间:2026/9/27 19:32:40

资讯中心
01
ARTICLE

聊一聊怎么用 Prompt Caching 节省 Token,又不让 AI 降智

聊一聊怎么用 Prompt Caching 节省 Token,又不让 AI 降智
1. 长上下文 Agent 的 Token 账单为什么越省越笨如果你正在用 Claude Code、Cursor、Aider 这类编程 Agent 跑长任务大概率遇到过这种场景一个跨文件重构任务Agent 来回读了七八次文件每轮都把整个仓库结构、历史对话、工具返回结果重新塞进上下文最后真正用于判断的信息可能不到 10%。Token 账单蹭蹭涨响应还越来越慢。于是很多人第一反应是砍上下文压缩提示词、删历史消息、让模型别写废话。结果往往是 AI 变“笨”了——它看不到依赖关系不知道之前定好的约束错误行号被压没了改一处坏一片。我试过把构建日志直接压成“构建失败有语法错误”Token 是省了但模型完全不知道src/main.cpp:128的config未声明只能瞎猜。后来改成保留文件路径、行号、错误码和推断原因的结构化摘要长度只有原始日志的三分之一模型照样能定位问题。这就是 Prompt Caching 要解决的核心矛盾不是让 AI 知道得更少而是让它不用反复读没用的东西。本文聚焦长上下文 Agent 场景讲清楚哪些内容适合缓存、哪些不适合并给出一套可复制的缓存策略配置骨架和验证动作。2. TaoToken 前置为什么缓存策略需要一个稳定的 API 入口Prompt Caching 的命中条件非常苛刻——它依赖 prompt 前缀的精确匹配。这意味着你的系统提示、工具定义、输出协议、项目核心约定必须逐字节稳定顺序不能变空格不能多连换行符都要一致。一旦前缀有任何抖动缓存直接失效你付的还是全价。所以做缓存优化之前先要保证 API 调用链路本身是稳定的。我用 TaoToken 作为统一入口来跑这些实验原因是它的接口格式和主流模型平台保持一致切换模型时不需要改代码结构前缀设计可以复用。TaoToken 在这里的角色是提供稳定的模型调用通道让你把精力放在前缀设计上而不是折腾不同平台的鉴权差异。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。需要先拿到 API Key 才能开始配置入口在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。拿到 Key 之后下面所有配置骨架都可以直接复制使用。注意缓存命中只发生在精确前缀匹配上。如果你的系统提示里带了时间戳、随机 ID、动态排序的工具列表缓存永远不会命中。这是最常见的踩坑点。3. 可复制的 Prompt Caching 配置骨架3.1 前缀与后缀的切分原则核心思路只有一句话静态内容放前缀动态内容放后缀。适合放进稳定前缀的内容系统角色定义你是谁、你的职责边界工具定义和参数 schema顺序固定不要动态排序输出格式协议JSON schema、Markdown 结构约定项目核心规则构建命令、测试命令、代码风格少量固定示例few-shot 示例不要每轮换安全边界和禁止事项适合放进动态后缀的内容当前用户任务描述当前文件片段本轮工具返回结果本轮错误日志临时约束和下一步请求结构上可以这样组织[稳定前缀 - 可缓存] ├─ 系统角色 ├─ 工具定义固定顺序 ├─ 输出协议 ├─ 项目核心约定 └─ 固定示例 [动态后缀 - 每轮变化] ├─ 当前任务 ├─ 当前证据文件片段/错误日志 └─ 本轮需要模型判断的问题3.2 配置骨架代码下面是一个可复制的 Python 配置骨架用 OpenAI 兼容格式演示前缀缓存的组织方式import openai client openai.OpenAI( api_key你的_TAOTOKEN_API_KEY, base_urlhttps://taotoken.net/api ) # 稳定前缀这部分内容每轮完全一致用于命中缓存 STABLE_PREFIX 你是一个严谨的编程助手负责在大型代码仓库中执行跨文件修改任务。 ## 工具定义 - read_file(path, start_line, end_line): 读取指定文件的行范围 - edit_file(path, old_text, new_text): 精确替换文件内容 - run_build(): 执行构建并返回结构化错误摘要 ## 输出协议 每次回复必须包含 1. 当前判断一句话说明你在做什么 2. 证据引用文件路径:行号 3. 下一步动作具体到文件和行范围 ## 项目核心约定 - 构建命令msbuild project.sln /p:ConfigurationRelease - 测试命令pytest tests/ -v - 不修改公开接口不引入第三方依赖 - 保持 VS2010 兼容性 def build_messages(task: str, evidence: str) - list: return [ {role: system, content: STABLE_PREFIX}, {role: user, content: f## 当前任务\n{task}\n\n## 当前证据\n{evidence}} ] # 第一轮请求 messages build_messages( task修复 Windows 下构建失败, evidencesrc/c.cpp:128 C2065: config 未声明 ) response client.chat.completions.create( modelclaude-sonnet-4-20250514, messagesmessages ) print(response.choices[0].message.content)关键点在于STABLE_PREFIX是一个模块级常量每次请求都引用同一个字符串对象内容逐字节一致。动态的任务和证据拼在 user 消息里放在最后。3.3 Anthropic 风格的 cache_control 写法如果你用的是 Claude 系列模型可以通过cache_control显式标记缓存断点import anthropic client anthropic.Anthropic( api_key你的_TAOTOKEN_API_KEY, base_urlhttps://taotoken.net/api ) response client.messages.create( modelclaude-sonnet-4-20250514, max_tokens4096, system[ { type: text, text: STABLE_PREFIX, cache_control: {type: ephemeral} } ], messages[ {role: user, content: f## 当前任务\n{task}\n\n## 当前证据\n{evidence}} ] )cache_control标记在系统提示块上表示这部分内容可以被缓存复用。自动缓存模式下系统会把缓存断点应用到最后一个可缓存块。3.4 哪些内容不适合缓存不是所有重复内容都值得缓存。以下几类要特别注意内容类型是否适合缓存原因系统角色定义适合每轮完全一致前缀稳定工具定义适合顺序固定即可命中项目核心规则适合长期不变当前文件片段不适合每轮变化放后缀错误日志不适合每轮不同放后缀动态时间戳不适合破坏前缀匹配随机排序的工具列表不适合顺序抖动导致缓存失效过期规则文件不适合即使命中缓存也会干扰判断最后一条尤其重要一个巨大、过期、自相矛盾的规则文件就算命中缓存省了钱它仍然会持续干扰模型判断。缓存解决的是重复成本解决不了上下文质量问题。4. 验证请求与成功结果配置写完之后必须验证缓存是否真的命中。不同平台的返回字段不一样但思路一致看 usage 里有没有缓存相关的计数。4.1 验证缓存命中response client.chat.completions.create( modelclaude-sonnet-4-20250514, messagesbuild_messages(task, evidence) ) usage response.usage print(f输入 token: {usage.prompt_tokens}) print(f输出 token: {usage.completion_tokens}) # 部分平台会返回缓存命中字段 if hasattr(usage, prompt_tokens_details): details usage.prompt_tokens_details print(f缓存命中 token: {getattr(details, cached_tokens, N/A)})第一次请求时缓存未建立cached_tokens为 0 或不存在。连续发第二次相同前缀的请求如果配置正确cached_tokens应该接近前缀的 token 数。4.2 实测对比我实测下来一个约 2000 token 的稳定前缀在连续 10 轮对话中未启用缓存每轮输入约 2000 动态部分10 轮累计输入约 25000 token启用缓存后首轮全价后续 9 轮前缀部分按缓存价计费累计输入成本下降约 60%–70%具体折扣比例取决于平台定价策略但趋势是明确的前缀越长、复用次数越多节省越明显。4.3 验证动作清单连续发两次相同前缀请求对比cached_tokens字段检查前缀字符串是否逐字节一致用hashlib.md5打印哈希值对比确认工具定义顺序没有动态排序确认系统提示里没有时间戳、随机 ID、会话 ID观察多轮对话中延迟是否下降缓存命中通常伴随延迟降低5. 本篇常见错误排查5.1 缓存完全不命中最常见的原因是前缀里有动态内容。检查这几处import hashlib # 打印前缀哈希连续两次请求对比 prefix_hash hashlib.md5(STABLE_PREFIX.encode()).hexdigest() print(f前缀哈希: {prefix_hash})如果两次请求的哈希值不同说明前缀被修改了。常见来源包括f-string 里嵌入了当前时间、工具列表用了set导致顺序随机、系统提示里带了会话 ID。5.2 缓存命中但 AI 变笨这通常不是缓存的问题而是你把不该缓存的内容也塞进了前缀。比如把“当前任务状态”写进了系统提示导致模型每轮看到的都是旧状态。排查方法检查前缀里是否包含任何会随任务变化的内容。前缀应该只放跨任务、跨会话都稳定的规则和定义。5.3 前缀太长导致首轮成本高缓存不是免费的。首轮请求要付全价而且部分平台对缓存写入有额外费用。如果你的前缀有 10000 token 但只复用两三次可能不划算。经验值前缀超过 1000 token 且预计复用 5 次以上缓存才有明显收益。短前缀复用次数少的话直接发反而更简单。5.4 工具定义顺序抖动如果你用字典或集合来组织工具定义Python 3.7 的字典虽然保序但如果你从配置文件动态加载并做了排序顺序可能不稳定。建议把工具定义写成固定的列表常量TOOLS [ {name: read_file, description: ...}, {name: edit_file, description: ...}, {name: run_build, description: ...}, ]不要用sorted()或set()处理工具列表。5.5 缓存断点位置放错Anthropic 的cache_control要标记在最后一个可缓存块上。如果你标记在了中间某个块后面的内容不会被缓存。确认断点放在稳定前缀的末尾。6. 把缓存策略接入你的 Agent 工作流缓存策略不是孤立的。它需要和仓库地图、短期记忆治理、规则分层加载配合使用。仓库结构用地图表达长历史压成状态快照规则按范围加载重复前缀交给缓存机械文件操作交给脚本。如果你在跑长期编码任务或 Agent 工作流建议把 Coding Plan 作为起点入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。它适合需要持续调用模型、反复迭代代码的场景。想先验证模型对话和缓存行为可以用模型对话入口 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 手动构造前缀和后缀观察多轮对话中的 token 变化。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有完整的 API 参数说明和缓存字段解释。API Key 管理在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。最后提醒一句缓存能省的是重复前缀的钱省不了上下文混乱的代价。前缀设计得再漂亮如果规则本身过期、冲突、冗余模型该犯的错一个不会少。先把上下文治理做干净再上缓存顺序不能反。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。