Prompt 缓存的四种策略:从精确匹配到语义检索

简介: 本文详解Prompt缓存四大策略(精确匹配、规范化、语义相似、分层架构),直击LLM应用成本痛点——重复调用导致API费用飙升。代码示例+架构图,助你低成本提升命中率,降本30%–90%,延迟同步优化。

自然语言理解、摘要生成、代码编写、逻辑推理,OpenAI 等厂商的模型把这些事情做得相当好。但是只有一个问题,那就是 “贵".尤其是在应用上了规模之后,API 调用费用的增长速度会让人心跳加速。

Prompt 缓存是应对这个问题最直接也最容易被忽视的手段。本文会从原理讲到实践,覆盖四种不同层级的缓存策略,配有代码示例和架构图。

LLM 的成本为什么涨得这么快

LLM API 的定价模型就三个维度:输入 Token 数(也就是 Prompt 长度)、输出 Token 数(响应长度)、调用次数。

比如FAQ 机器人、聊天式新人引导助手、内部开发者工具、AI 仪表板——这些应用有一个共同特征:大量重复或高度相似的 Prompt 被反复发送,而期望得到的回答几乎一样。

如果不做缓存的话,每次调用都要按量计费,那费用肯定就爆炸了。

Prompt 缓存是什么

一句话概括:

当相同或等价的 Prompt 再次出现时,直接复用之前的 LLM 响应,而不是重新调用 API。

先查缓存,命中就直接返回;没命中再去调 LLM,拿到结果后存入缓存。

就这一个改动,成本就能降低 30%–90%,具体数字取决于工作负载的重复程度。

策略 1:精确匹配缓存

这是最基础的方案。逻辑非常简单:完全相同的 Prompt 字符串出现时,直接返回缓存结果。

适用场景包括静态 FAQ、政策说明文档、"解释 X"这一类 Prompt,以及聊天机器人中反复出现的 system prompt。

下面是 Node.js 的实现:

 import crypto from "crypto";  

const cache = new Map();  

function hashPrompt(prompt) {  
  return crypto.createHash("sha256").update(prompt).digest("hex");  
}  

async function getLLMResponse(prompt) {  
  const key = hashPrompt(prompt);  

  // Step 1: Cache lookup  
  if (cache.has(key)) {  
    return cache.get(key);  
  }  

  // Step 2: Call LLM API  
  const response = await callLLM(prompt);  

  // Step 3: Store in cache  
  cache.set(key, response);  

  return response;  
 }

为什么要对 Prompt 做哈希?因为 Prompt 本身可能很长,哈希之后得到固定长度的 key,查找速度快,SHA-256 的碰撞概率也低到可以忽略。

内存缓存的优点是极快,单实例或小规模系统用起来非常合适。但是这样做也进程重启缓存就没了,多实例之间也无法共享。

策略 2:规范化缓存

精确匹配有一个很容易遇到的问题:Prompt 里多一个空格、少一个换行、大小写不同,就被当成不同的 key 了。实际上这些差异对语义毫无影响。

解决办法是在缓存前先做规范化处理。举个例子:

规范化之前:

  "Explain REST APIs"  
 "Explain REST APIs "  
 "Explain  REST APIs"

规范化之后全部变成:

  "explain rest apis"

代码实现:

 function normalizePrompt(prompt) {  
  return prompt  
    .toLowerCase()  
    .replace(/\s+/g, " ")  
    .trim();  
}  

function getCacheKey(prompt) {  
  return hashPrompt(normalizePrompt(prompt));  
 }

不必要的 cache miss 减少了,命中率明显上升,同时整个过程依然是确定性的、安全的。

策略 3:语义缓存

"What is REST?" 和 "Explain REST architecture" 说的其实是同一件事,但无论精确匹配还是规范化匹配都会把它们当作两个完全不同的请求。

所以思路是引入向量嵌入。把 Prompt 编码成向量,通过余弦相似度之类的指标判断两个 Prompt 是否"足够接近"。如果相似度超过阈值,直接返回缓存结果。

语义缓存流程

工具选型方面,Embedding 可以用 OpenAI 的接口,向量存储可以选 Pinecone、Weaviate 这类专门的向量数据库,小规模场景下在内存里做相似度搜索也够用。

伪代码如下:

 const SIMILARITY_THRESHOLD = 0.90;  

async function getSemanticResponse(prompt) {  
  const embedding = await getEmbedding(prompt);  

  const match = await vectorDB.findClosest(embedding);  

  if (match && match.score > SIMILARITY_THRESHOLD) {  
    return match.response;  
  }  

  const response = await callLLM(prompt);  

  await vectorDB.store({  
    embedding,  
    response  
  });  

  return response;  
 }

语义缓存的风险

语义缓存的核心风险在于阈值设定。设得太低会把不相关的 Prompt 混为一谈,返回错误结果;设得太高又和精确匹配没什么区别。0.90 是一个比较常见的起步值,具体数字需要根据业务场景调优。

策略 4:分层缓存架构

生产环境一般不会只用单一缓存策略,而是按层级组合。典型的三层架构长这样:

 L1 Cache (In-memory, per instance)  
    |  
 L2 Cache (Redis / Shared Cache)  
    |  
 L3 Semantic Cache (Vector DB)  
    |  
 LLM Provider

每一层的定位不同。L1 是进程内存缓存,速度最快但作用域最小;L2 一般用 Redis,多个实例可以共享同一份缓存;L3 是语义缓存层,处理那些文本不同但意思相近的 Prompt。只有三层都没命中的情况下,请求才会打到 LLM Provider。

缓存过期与失效

Prompt 缓存不能"设了就忘"。以下几种情况必须主动失效:模型版本升级了,Prompt 模板改了,或者缓存的内容涉及时效性信息。

最简单的做法是设 TTL:

 cache.set(key, response, {  
   ttl: 60*60*24// 24 hours  
 });

成本影响

缓存带来的收益是双重的——成本下降,延迟也降低了。对于重复率高的工作负载,这两个指标的改善都非常可观。

总结

在 LLM 系统的各种优化手段中,Prompt 缓存的投入产出比可能是最高的。入手门槛低,可以渐进式迭代,而且到了一定规模之后几乎是刚需。

可以先从精确缓存做起,这是成本最低、风险最小的方案。规范化处理应该尽早加上,代码量很小但效果明显。语义缓存只在业务确实需要时才引入,因为它带来了额外的复杂度和向量计算开销。TTL 和版本控制是必须配套的机制。最后缓存命中率要持续监控,因为这是判断缓存策略是否有效的核心指标。

如果正在生产环境跑 AI 系统却没做 Prompt 缓存,可以试试上面的方法,肯定会为你省钱。

https://avoid.overfit.cn/post/10623b71c58d425dae471f5333a54e4c

作者: Vasanthan K

目录
相关文章
|
2月前
|
自然语言处理 监控 机器人
深入RAG架构:分块策略、混合检索与重排序的工程实现
本文详解RAG系统从Demo迈向生产需攻克的5个关键层级:基础向量检索(Level 1)、智能分块与元数据增强(Level 2)、混合搜索(语义+关键词,Level 3)、交叉编码器重排序(Level 4),以及生产级护栏、评估与兜底机制(Level 5)。强调“不编造、可验证、易诊断”,聚焦真实故障场景与可落地优化。
274 2
深入RAG架构:分块策略、混合检索与重排序的工程实现
|
2月前
|
机器学习/深度学习 数据采集 人工智能
OpAgent:登顶WebArena的多模态Web GUI Agent
蚂蚁集团自研多模态Web智能体OpAgent,以71.6%的成功率登顶WebArena榜单。该方案通过层次化多任务微调构建基座,利用在线强化学习与混合奖励机制应对环境动态性,并结合模块化架构实现复杂任务的稳健执行与自我修正,刷新了Web智能体领域的SOTA纪录。
276 11
|
2月前
|
机器学习/深度学习 SQL 人工智能
别再群发拜年消息了!三步微调AI,让它学会你的“独家语气”
每逢春节,通用AI祝福总显生硬空洞。本文探讨如何通过微调(LoRA),将“人情世故”转化为结构化数据(称呼/关系/细节/风格等),让AI真正学会你的语气与记忆,生成有温度、带梗、专属的个性化祝福——技术不是替代表达,而是帮你把来不及说的情意,说得恰到好处。(239字)
350 16
别再群发拜年消息了!三步微调AI,让它学会你的“独家语气”
|
30天前
|
存储 人工智能 NoSQL
理解 Agent 记忆:从无状态模型到持久化记忆架构
大语言模型本质无状态,对话历史无法自动留存。Agent需长期记忆支撑连续性任务,但简单堆砌上下文不可行。本文系统阐释Agent记忆的四层架构(工作/情景/语义/程序记忆),及其写入、检索与遗忘机制,并对比Mem0、Letta等主流方案,揭示记忆正成为AI Agent技术栈中独立、标准的关键基础设施。
532 7
理解 Agent 记忆:从无状态模型到持久化记忆架构
|
20天前
|
机器学习/深度学习 算法 搜索推荐
RouteRAG:用特殊 Token 和强化学习构建可学习的 RAG 检索策略
RouteRAG将多轮RAG建模为序列决策过程,模型自主学习何时检索、搜什么、用哪种模式(段落/图/混合),并通过两阶段GRPO强化学习,兼顾答案准确率与检索效率,在多跳问答上显著提升性能。
133 12
RouteRAG:用特殊 Token 和强化学习构建可学习的 RAG 检索策略
|
2月前
|
缓存 人工智能 监控
Prompt Caching终极指南:Claude Code省钱核心+阿里云OpenClaw部署与缓存配置实战教程
在AI编码与智能体开发飞速发展的2026年,成本控制与响应速度成为核心痛点。而Claude Code之所以能实现“低价高效”,其底层核心基础设施——Prompt Caching(提示词缓存)功不可没。这项从设计之初就融入产品架构的技术,能让API调用成本降低90%、响应速度提升85%,彻底改变了AI工具的使用经济性。
2052 1
|
2月前
|
存储 搜索推荐 开发者
RAG 文本分块:七种主流策略的原理与适用场景
分块是RAG系统的基石,直接影响检索质量与LLM推理效果。行业共识:“分块决定RAG质量的70%”。从固定大小、句子/段落级,到语义、递归、滑动窗口及层次化分块,策略需匹配文档类型与任务需求。劣质分块导致上下文断裂、噪声激增、幻觉频发——燃料不行,再强的引擎也徒劳。
273 2
RAG 文本分块:七种主流策略的原理与适用场景
|
2月前
|
Oracle Java 关系型数据库
MavenRunHelper.jar 使用步骤详解(附Maven命令执行与main方法运行)
`MavenRunHelper.jar`是一款轻量级Java工具,专为简化Maven项目构建与运行而设计。支持一键执行`clean`、`install`、运行Main类等操作,无需反复输入冗长命令。纯Java编写,JDK 8+即可运行,兼容Windows/Linux/macOS,适合开发者及自动化脚本使用。(239字)
|
2月前
|
监控 测试技术 持续交付
大模型测试怎么做?从模型评估、幻觉检测到 RAG 系统测试全指南
本指南系统讲解大模型测试全流程:涵盖多维度评估(私有评测集构建、指标选择)、幻觉检测(事实核查、一致性与对抗测试)、RAG分层验证(检索/生成/端到端),以及持续集成实践与避坑指南,助力团队落地可靠评估体系。
|
4月前
|
缓存 监控 测试技术
llama.cpp Server 引入路由模式:多模型热切换与进程隔离机制详解
llama.cpp 于2025年12月11日发布路由模式,支持多模型动态加载与毫秒级切换,无需重启服务。采用多进程隔离架构,兼容OpenAI API,支持自动发现、按需加载、LRU淘汰及手动管理,显著提升本地多模型协作的效率与稳定性,是轻量级推理服务框架的重要升级。
1050 3
llama.cpp Server 引入路由模式:多模型热切换与进程隔离机制详解

热门文章

最新文章

下一篇
开通oss服务