大模型缓存技术工程指南(下):面向缓存命中的 Prompt 与 Agent 工程实践

大模型缓存技术工程指南(下):面向缓存命中的 Prompt 与 Agent 工程实践

💡 原文中文,约22200字,阅读约需53分钟。
📝

内容提要

本文介绍大模型缓存技术的工程实践,核心是“稳定前缀+动态后缀”原则。通过将固定角色、工具定义等稳定内容前置并版本化,动态信息后置,可提升缓存命中率。文章涵盖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 等指标。区分单请求、平台级加权、模板级命中率,并按场景拆分观察,以量化缓存收益。

🏷️

标签

➡️

继续阅读