内容提要
本文介绍大模型缓存技术的工程实践,核心是“稳定前缀+动态后缀”原则。通过将固定角色、工具定义等稳定内容前置并版本化,动态信息后置,可提升缓存命中率。文章涵盖Prompt结构模板、Tools Schema稳定排序、RAG与多轮对话优化、Context Cache权限管理、Prompt Block Registry建设及缓存观测指标,旨在将缓存收益转化为可治理的工程能力。
延伸解读
缓存命中的关键:稳定前缀与动态后缀
文章强调,缓存命中率很大程度上取决于Prompt的组织方式。核心原则是“稳定前缀+动态后缀”:将角色定义、工具定义、项目规范等固定内容前置并版本化,而将时间戳、请求ID、用户问题等动态信息后置。这类似于前端静态资源缓存,稳定内容应具有稳定标识,动态内容应分离,避免因小部分动态内容导致整体缓存失效。
工具定义与Schema的稳定性
工具定义和JSON Schema的稳定性对缓存命中至关重要。工具顺序、JSON key顺序、description内容的变化,即使语义相同,也会导致序列化文本不同,从而无法命中缓存。文章建议对工具按名称排序,并使用稳定序列化方法(如canonical JSON)确保同一组工具在语义不变时,序列化后的文本完全一致。
RAG与多轮对话的缓存优化
RAG场景中,检索结果应放在稳定前缀之后,并控制动态区长度,避免无限塞入。多轮对话中,建议保留最近几轮原文,更早历史压缩成summary,且summary应拆分为稳定部分和易变部分,稳定部分可前置,易变部分放动态区。这些策略旨在减少动态内容对稳定前缀的干扰,提升缓存命中率。
Context Cache的权限与元数据管理
显式Context Cache的管理不能只存cacheId,还需记录tenantId、projectId、accessControl、contentSensitivity等元数据,并设计合理的cacheKey。跨租户共享前需严格检查,保守策略下internal内容仅限同租户复用,confidential和restricted默认不共享。这有助于避免缓存污染和权限问题。
Q&A
如何组织 Prompt 才能提高大模型缓存命中率?
核心原则是“稳定前缀 + 动态后缀”:将固定角色、系统规则、工具定义等稳定内容放在 Prompt 最前面,并保持版本化;将用户问题、时间戳、检索结果等动态内容放在后面。这样可复用的稳定前缀更容易被缓存命中。
为什么时间戳、请求 ID 等动态信息不应放在 Prompt 开头?
因为这些信息每次请求都不同,如果放在开头,会破坏稳定前缀的一致性,导致后续大量固定内容无法复用缓存,降低缓存命中率。应将这些动态信息放在 Prompt 后半部分,或放入日志、metadata 中。
如何对 Tools Schema 进行稳定排序以提升缓存命中?
对工具定义按名称排序,并对 JSON Schema 进行稳定序列化(如按键排序),确保同一组工具在语义不变时序列化后的文本完全一致,从而避免因顺序或格式差异导致缓存不命中。
RAG 场景中如何优化缓存命中?
将固定系统规则、产品背景等稳定内容前置,动态检索结果后置;控制动态区长度,设置 token 预算,进行 topK 限制、rerank、截断、去重等;避免将每次不同的检索结果放在最前面破坏前缀稳定性。
多轮对话中如何设计上下文以提升缓存命中?
采用“固定 system prompt + 历史摘要 + 最近 N 轮原文 + 当前问题”的结构。将稳定摘要前置,易变状态后置;对历史进行摘要压缩,控制 token 预算,避免无限追加原文。
Context Cache 的元数据应包含哪些信息?
除了 cacheId,还应包含 provider、model、sourceType、sourceId、sourceVersion、tenantId、projectId、owner、accessScope、accessControl、contentSensitivity、cachePolicy、createdAt、expiresAt 等,用于权限隔离、版本管理和过期控制。
如何设计 cacheKey 以避免缓存误用?
cacheKey 应包含 provider、model、sourceType、sourceId、sourceVersion、tenantId、projectId、accessScope、cachePolicyHash 等,确保不同版本、模型、租户、策略的缓存不会互相误用。
跨租户共享 Context Cache 前需要检查哪些条件?
需确认缓存内容不包含敏感信息,provider 支持租户隔离,cache id 不会泄露,sourceVersion 变化后重建,TTL 合理,权限变更后能撤销。保守策略下,internal 仅限同租户复用,跨租户需显式升级为 public 并经过审核。
Prompt Block Registry 是什么?有什么作用?
Prompt Block Registry 是将 Prompt 拆分为版本化、可复用的模块(如角色定义、工具定义、代码规范)并进行统一管理的平台能力。它支持缓存策略标记、版本管理、命中率统计、成本分析、灰度实验和变更审计,将 Prompt 从代码字符串升级为平台级上下文资产。
如何建立缓存命中率和成本观测体系?
记录每次调用的 cached_input_tokens、cache_hit_ratio、TTFT、prefill_latency、cost_saving、prompt_template_version 等指标。区分单请求、平台级加权、模板级命中率,并按场景拆分观察,以量化缓存收益。