mcpField
R
redis-semantic-cache

redis-semantic-cache

github.com/redis数据与数据库1711.9k 次安装7 周前更新
代码仓库

关于 redis-semantic-cache

redis-semantic-cache 是面向 LLM 应用开发者的语义缓存指南,介绍 Redis Cloud 的 LangCache 如何通过嵌入匹配相似提示词,并权衡命中率与匹配精度。

主要功能

  1. 01介绍 LangCache 语义缓存流程
  2. 02支持 SDK 与 REST 操作
  3. 03调整相似度阈值
  4. 04按任务拆分缓存实例
  5. 05使用自定义属性筛选缓存

适用场景

  1. 01为 LLM 调用添加缓存以减少重复请求
  2. 02缓存 RAG 答案或分类结果
  3. 03根据误匹配风险调整命中率
  4. 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 可作为标准的缓存旁路模式,置于任何大模型调用之前:

  1. 将用户的提示词发送到 LangCache 的 search。
  2. 缓存命中 — 直接返回已存储的响应。
  3. 缓存未命中 — 调用大模型,然后使用 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"})进行存储和搜索,以通过属性筛选器隔离同一缓存中的任务——当相同的提示词格式涵盖多个子主题时,这种方式很有用。

参考资料

评论

支持 Markdown