关于 redis-semantic-cache
redis-semantic-cache 是面向 LLM 应用开发者的语义缓存指南,介绍 Redis Cloud 的 LangCache 如何通过嵌入匹配相似提示词,并权衡命中率与匹配精度。
主要功能
- 01介绍 LangCache 语义缓存流程
- 02支持 SDK 与 REST 操作
- 03调整相似度阈值
- 04按任务拆分缓存实例
- 05使用自定义属性筛选缓存
适用场景
- 01为 LLM 调用添加缓存以减少重复请求
- 02缓存 RAG 答案或分类结果
- 03根据误匹配风险调整命中率
- 04隔离不同任务类型的缓存
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ redis/ agent-skills --skill redis-semantic-cache安装后在 Claude Code 中输入/redis-semantic-cache确认已加载。
附带文件references/best-practices.mdreferences/langcache-usage.md
详细介绍
Redis 语义缓存
借助 Redis Cloud 的 LangCache 服务,对大模型响应进行语义缓存。将提示词存储为嵌入向量;之后遇到语义相似的提示词时,直接返回缓存的响应,无需再次调用模型。
LangCache 目前在 Redis Cloud 上处于 预览 阶段。功能和行为可能会发生变化。
适用场景
- 为大模型调用(OpenAI、Anthropic 等)添加缓存层,以降低成本和延迟。
- 缓存 RAG 答案、分类结果或任何具有确定性的大模型工作负载。
- 调整语义缓存的精确度与命中率之间的权衡。
- 将一个应用的大模型工作负载分配到多个缓存实例。
1. 缓存旁路流程
LangCache 可作为标准的缓存旁路模式,置于任何大模型调用之前:
- 将用户的提示词发送到 LangCache 的
search。 - 缓存命中 — 直接返回已存储的响应。
- 缓存未命中 — 调用大模型,然后使用
set存储响应,以便后续相似提示词命中缓存。
from langcache import LangCache
import os
lang_cache = LangCache(
server_url=f"https://{os.getenv('HOST')}",
cache_id=os.getenv("CACHE_ID"),
api_key=os.getenv("API_KEY"),
)
result = lang_cache.search(prompt="What is Redis?", similarity_threshold=0.9)
if result:
response = result[0]["response"]
else:
response = llm.generate("What is Redis?")
lang_cache.set(prompt="What is Redis?", response=response)
如果无法使用 SDK,也可以通过 REST 执行相同操作(POST /v1/caches/{cacheId}/entries/search 和 POST /v1/caches/{cacheId}/entries)。
完整的 SDK 和 REST 示例,以及基于属性的存储方法,请参阅 references/langcache-usage.md。
2. 调整相似度阈值
阈值决定新提示词与缓存提示词的嵌入余弦距离需要多接近,才算命中。阈值越高,匹配越严格,误报越少;阈值越低,命中越多,但返回不相关答案的风险也越高。
| 阈值 | 行为 | 适用场景 |
|---|---|---|
| 0.95+ | 需要近乎完全匹配 | 面向客户的答案;错误响应代价高 |
| 0.9 | 均衡的默认值 | 大多数工作负载——从这里开始 |
| 0.8 | 宽松的语义匹配 | 内部工具、探索性查询、FAQ 去重 |
# Stricter — fewer false positives
result = lang_cache.search(prompt="What is Redis?", similarity_threshold=0.95)
# Looser — higher hit rate
result = lang_cache.search(prompt="What is Redis?", similarity_threshold=0.8)
通过观察实际缓存命中率并抽查返回的答案是否仍然相关,来调整阈值。
请参阅 references/best-practices.md。
3. 按任务类型拆分缓存
不同的大模型工作负载不应共用一个缓存——“代码问题”提示词在语义上与其他代码问题相近,却与密码重置支持查询毫无关系;混用会返回无用内容。
support_cache = LangCache(server_url=..., cache_id="support-cache-id", api_key=...)
code_cache = LangCache(server_url=..., cache_id="code-cache-id", api_key=...)
在 Redis Cloud 中为每项任务创建不同的缓存 ID,并将每次调用路由到相应的缓存。更细粒度的替代方案是使用自定义属性(例如 {"category": "database"})进行存储和搜索,以通过属性筛选器隔离同一缓存中的任务——当相同的提示词格式涵盖多个子主题时,这种方式很有用。