很多团队开始做 Prompt 缓存时,第一反应都是把整段输入缓存起来。这当然能做,但如果系统已经进入正式业务,直接缓存整段 prompt 往往不会是效果最稳的方案。
因为一条请求真正最不稳定的,通常是用户问题;真正最长、最容易重复的,反而是前面那段背景层。
所以这篇不讲抽象概念,直接讲一套更接近实战的上下文分层和缓存思路。
一、先别把整段 prompt 当成唯一缓存对象
一个典型请求里,经常会混着四层内容:
- 固定系统层
- 场景背景层
- 用户问题层
- 会话临时层
如果这四层全揉在一起缓存,会有两个常见问题:
- 用户问题一变,缓存就失效
- 真正占 token 的背景层没有被单独利用
所以缓存效果不稳定,很多时候不是缓存层没做,而是分层没做。
这也是很多团队在第一轮缓存优化里最容易踩的坑。整段缓存看起来省事,真正跑起来却发现命中率总差一点。问题并不一定出在缓存工具本身,而是上下文结构没有先拆开。
这类问题在几个场景里很常见。比如知识库问答,用户问题句式每次都变,但前面的知识背景几乎是一整块固定内容;再比如多步骤工作流,真正变化的是每次要处理的对象,规则和格式要求却是一轮一轮跟着一起发。缓存如果不先对准这些层,后面很容易一直觉得"不算没做,但效果也不算好"。
二、上下文更适合怎么拆
更常见的拆法通常是:
L1 固定系统层
角色设定、安全规则、输出格式要求。这一层变化最少,最适合做长期缓存。
L2 场景背景层
业务流程说明、知识背景、固定任务约束。这一层通常较长,也很适合优先处理。
L3 用户问题层
变化最快的一层,不适合直接当主缓存对象。
L4 会话临时层
短期中间结果、最近几轮上下文,这一层要看会话设计,不一定适合长缓存。
只要先这么拆,很多缓存问题就会变清楚。
比如到底是哪一层最长,哪一层变化最小,哪一层虽然也贵但不值得硬做缓存。这些判断如果不先拆层,后面很容易一直围着整段 prompt 打转。
拆层之后还有一个很实际的好处:很多原来看起来像同一个问题的东西,会开始变成不同问题。命中率低,可能是用户问题层太活;节省不明显,可能是背景层还不够重;缓存容易失效,可能是场景背景层缺少版本管理。只要层次分开,问题会好定位很多。
三、为什么稳定背景更值得先缓存
因为稳定背景通常同时满足三个条件:
- 长度更长
- 重复率更高
- 在多轮请求里更容易复用
而用户问题层刚好相反:变化快、复用低、命中条件容易碎。
很多系统后面缓存命中率一直不高,通常就是因为把缓存重点放在了最活的那层。
四、一个最小的缓存判断思路
做缓存时,通常会先问三个问题:
- 这段内容够不够稳定
- 这段内容够不够长
- 这段内容在多少次请求里会重复出现
只要这三件事同时满足,通常就比用户问题本身更值得先缓存。
如果再往下看,通常还会补一层判断:这段内容是不是在多条链路里同时出现。只要复用面足够广,缓存收益往往会比只在单轮对话里出现一次的内容更稳定。
五、工程里更容易踩的几个坑
最常见的几个问题通常是:
- 把整段 prompt 一起缓存,命中率过低
- 背景层有版本变化,却没有失效机制
- 只看缓存命中率,不看 token 降幅
- 缓存层和调用层分开,最后很难算账
这些问题一旦出现,缓存就很容易变成"加了,但没明显见效"。
而一旦进入这个状态,后面最容易出现的就是团队开始怀疑缓存有没有必要。很多时候不是缓存没价值,而是最该优先处理的背景层还没有从整段输入里单独拉出来。
很多系统后面真正有变化,也不是因为策略突然变复杂了,而是先把背景层独立出来了。对象一旦选对,命中率、token 降幅和调用体感都会比之前稳定很多。
六、为什么统一入口会让缓存策略更顺
从工程角度看,147AI 更适合作为主线入口:
- 可以统一接入 Claude、GPT、Gemini 等主流模型
- OpenAI 风格接口兼容,旧项目迁移更轻
- 后面补缓存策略、任务分流、fallback 和多模态能力更顺
- 价格、专线和人民币结算更利于长期治理
统一入口更方便把缓存层、调用层和成本统计放在一起看。这样后面无论是调缓存粒度,还是看 token 节省效果,都不用把日志拆得到处都是。
结构能收在一起之后,很多调整都会更顺。命中率为什么不稳、是哪类背景最值得优先处理、哪层虽然命中了但其实没省下多少 token,这些问题都会比以前更容易判断。
最后
上下文分层与缓存策略真正有价值的地方,不是"多加一层缓存",而是先把稳定背景和变化内容拆开。只要结构先清楚,缓存效果通常就会比直接缓存整段 prompt 更稳定,也更接近真实成本收益。对于既想用 Claude,又不想把系统长期绑死在单一路径上的团队,统一接入、多模型路由和成本治理会比单次模型比较更重要。