1. Intro
传统缓存的核心逻辑是精确字符串匹配:将查询作为 key完全一致时命中缓存。这种机制在静态内容分发、API 响应缓存等场景下运作良好,但在AI应用领域的表现较差,相似意图的Query无法精准命中。语义缓存(Semantic Caching)是一种利用Embedding向量化和向量相似度搜索来实现基于语义相似进行缓存匹配的机制。
语义缓存的工作流程可以概括为四个阶段:
用户查询 → [1. Embedding 向量化] → [2. 向量相似度搜索] → Hit? → [3. 返回缓存结果]
↓ Miss
[4. 调用 LLM → 缓存结果]
- Embedding 向量化:将用户的自然语言查询通过 Embedding 模型映射为高维向量。这一向量编码了查询的语义信息,使得含义相近的文本在向量空间中彼此接近。
- 向量相似度搜索 :将新查询的向量与向量数据库中已存储的缓存向量进行比较,使用余弦距离(Cosine Distance)等度量方式计算语义距离,找出最近邻。
- 缓存命中判定 :若最近邻的距离小于预设阈值(如 0.15),则判定为缓存命中,直接返回对应的 LLM 响应。
- 缓存未命中处理 若无满足阈值条件的缓存结果,则将查询发送至 LLM 获取响应,并将该查询的 Embedding 向量与 LLM 响应一起写入缓存,供后续请求复用。
语义缓存在客服聊天机器人、企业内部知识库等场景中能够发挥显著价值,此类场景大量Query集中在少数高频问题中,使用语意缓存可以显著降低AI应用的token成本。
2. 基于RedisVL实现语义缓存
2.1. RedisVL介绍
RedisVL(Redis Vector Library) 是 Redis 官方提供的 Python 客户端库,专为 AI 应用场景设计。它在 Redis 核心的高性能数据存储能力之上,封装了向量索引管理、多种 Embedding 模型集成、向量相似度搜索等功能,使开发者无需直接操作底层的 RediSearch 命令即可构建向量检索应用。在语义缓存领域,RedisVL 提供了 SemanticCache 类作为核心抽象,将索引创建、Embedding 向量化、KNN 搜索、阈值判定、TTL 管理等操作封装为简洁的 check() / store() API。同时,RedisVL 内置了对 OpenAI、HuggingFace、Cohere 等主流 Embedding Model的适配,并支持 Tag 和 Numeric 过滤实现多租户缓存隔离。
2.2. 缓存实例创建
RedisVL 将索引创建、向量化、向量序列化、KNN搜索等底层细节全部封装在内部。开发者只需指定缓存名称、Redis 连接地址、距离阈值和Embedding模型即可完成初始化。
from redisvl.extensions.cache.llm import SemanticCache
from redisvl.utils.vectorize import OpenAITextVectorizer, HFTextVectorizer
def create_cache() -> SemanticCache:
if EMBEDDING_TYPE == "local":
vectorizer = HFTextVectorizer(model=EMBEDDING_MODEL)
else:
vectorizer = OpenAITextVectorizer(
model=EMBEDDING_MODEL,
api_config={"api_key": OPENAI_API_KEY, "base_url": OPENAI_BASE_URL},
)
cache = SemanticCache(
name="llmcache",
redis_url=REDIS_URL,
distance_threshold=DISTANCE_THRESHOLD,
vectorizer=vectorizer,
)
cache.set_ttl(TTL_SECONDS)
return cache
2.3. 缓存查询与存储
def answer_question(openai_client, cache, question):
results = cache.check(prompt=question, return_fields=["prompt", "response"])
if results:
return results[0]["response"]
# 缓存未命中,调用 LLM 并存入缓存
llm_response = ask_llm(openai_client, question)
cache.store(prompt=question, response=llm_response)
return llm_response
3. 总结
语义缓存通过将 Embedding 向量化与向量相似度搜索引入缓存匹配流程,从根本上解决了传统缓存在自然语言场景下命中率低的问题。其技术架构由三个核心组件构成——Embedding 模型、向量数据库和缓存存储,在实际生产项目中需要选取合适的距离阈值和Embeddind模型。