语义缓存
语义缓存让 AISIX 在新请求与先前请求含义相同、措辞不同时也能返回缓存的响应。它是响应缓存的扩展:精确匹配层始终先被检查,语义层负责处理精确层未命中的请求。
在本指南中,你将为缓存策略添加语义配置块,验证精确命中与语义命中,并清空缓存条目。你还将了解跨网关实例共享语义条目所需的 Redis 要求。
语义缓存的工作原理
配置了 semantic 块的缓存策略会对每个符合条件的请求依次运行两个匹配层:
- **精确层。**首先查找请求指纹——模型别名、规范化后的 messages、采样参数以及其他影响响应的选项。完全相同的重复请求在此命中,无需任何 embedding 调用。
- **语义层。**精确层未命中时,AISIX 使用策略配置的 embedding 模型将请求的消息文本向量化,并与已存储的条目比较。相似度达到或超过阈值的最近条目会被返回;否则请求继续发往上游,响应连同其向量一起被存储。
只有 messages 内容参与相似度匹配。模型别名和其他指纹字段仍必须匹配。如果存在 temperature 和 top_p,则以 0.001 的精度比较,因此同一千分位区间内的显式值视为相等。省略字段与显式设置该字段仍视为不同。消息中包含图片、音频或工具结果的请求永远不会做相似度匹配,它们只使用精确层。
语义命中也不会刷新条目:条目与精确条目一样按策略 TTL 过期。
Embedding 失败时放行
语义匹配是一种优化,绝不是一道闸门。如果 embedding 调用失败或超时,请求会不经缓存直接发往上游,失败会计入缓存指标。如果 embedding 模型被删除或配置错误,策略会记录一条警告并继续只提供精确匹配。
准备工作
开始之前,请准备以下内容:
- 一套可用的响应缓存环境:缓存策略管理路径(AISIX Cloud 或声明式资源文件)、模型别名和调用方 API Key。
- 同一环境中的一个 embedding 模型。在 AISIX Cloud 中这是 kind 为
embedding的模型;在资源文件中则是带embedding块的模型条目。它负责将请求文本向量化以做相似度比较;其dimensions值固定了该策略条目的向量维度。 - 使用 Redis 后端的策略还需要支持向量检索的 Redis 部署——见使用 Redis 共享语义条目。
导出共用的连接变量:
# AISIX_PROXY 不含尾部斜杠或 /v1 等端点路径
# 本地快速入门使用 http://127.0.0.1:3000
export AISIX_PROXY="YOUR_AISIX_GATEWAY_URL"
export AISIX_API_KEY="YOUR_CALLER_API_KEY"
export AISIX_MODEL="gpt-4o-mini"