本文介绍如何利用 Redis Stack 的向量搜索能力 ,为大模型应用构建高性能的语义缓存(Semantic Cache),减少大模型调用次数,降低成本并提升响应速度。
一、为什么大模型需要缓存?
在大模型应用中,经常出现:
用户问题高度重复,但表达不同
例如:
退款流程是什么?
如何申请退款?
我要退货怎么操作?
语义一致,但文本不同。
如果每次都调用 LLM:
- 成本高
- 延迟高
- GPU资源浪费
解决思路
利用 向量相似度 判断问题是否重复:
新问题 -> 转为向量
↓
与历史问题计算相似度
↓
相似度 > 0.95
↓
直接返回缓存答案
这就是:
✅ Semantic Cache(语义缓存)
二、为什么选择 Redis Stack?
传统 Redis 只能做:
Key-> Value
无法高效做向量搜索。
而 Redis Stack 新增能力:
Redis + 搜索 +JSON + 向量索引
适合:
- 大模型缓存
- RAG 检索
- embedding 存储
- 语义搜索
Redis Stack 版本要求
建议版本:
RedisStack>=7.2
包含模块:
| 模块 | 功能 |
|---|---|
| RediSearch | 全文搜索 + 向量索引 |
| RedisJSON | JSON存储 |
| RedisBloom | 去重 |
| RedisTimeSeries | 时序数据 |
三、Redis 向量搜索核心能力
Redis Stack 支持:
1)向量存储
可存储:
FLOAT32 向量
例如:
768维 embedding
2)向量索引(HNSW)
Redis 使用:
HNSW 图索引
特点:
- 近似最近邻搜索
- 查询复杂度 O(logN)
- 毫秒级搜索
3)KNN 搜索
可执行:
找最相似的K 个问题
四、缓存数据结构设计
每个问题存储:
question:{hash}
结构:
| 字段 | 含义 |
|---|---|
| text | 原始问题 |
| vector | embedding向量 |
| answer | LLM回答 |
| metadata | 业务信息 |
示例:
bash
HSET question:1001
text"退款流程是什么"
answer"退款流程如下..."
vector <embedding bytes>
五、创建向量索引
创建索引:
bash
FT.CREATE question_idx ON HASH PREFIX 1 question:
SCHEMA
text TEXT
answer TEXT
vector VECTOR HNSW 6
TYPE FLOAT32
DIM 768
DISTANCE_METRIC COSINE
参数说明:
| 参数 | 说明 |
|---|---|
| HNSW | 向量索引类型 |
| DIM | 向量维度 |
| COSINE | 余弦距离 |
六、查询流程(缓存命中流程)
用户提问:
退款怎么操作?
流程:
Step 1:生成 embedding
python
vector = embedding(query)
Step 2:向量搜索
bash
FT.SEARCH question_idx
"*=>[KNN 3 @vector $vec]"
PARAMS 2 vec <query_vector>
SORTBY __vector_score
DIALECT 2
返回:
最相似的3个问题
Step 3:判断相似度
python
if similarity >0.95:
return cached_answer
else:
call_llm()
七、缓存写入流程
未命中时:
调用 LLM
↓
生成答案
↓
生成向量
↓
写入 Redis
bash
HSET question:1002 ...
八、系统整体架构
真实生产架构:
用户问题
↓
embedding
↓
Redis 向量缓存
↓
命中? ------ 是 → 返回缓存
↓否
Milvus/ES知识库
↓
命中? ------ 是 → 返回答案
↓否
调用 LLM
↓
结果写入缓存
九、线上优化经验
1)只缓存高频问题
避免缓存污染。
2)设置 TTL
bash
EXPIRE question:xxx 7d
3)相似度阈值
推荐:
0.92 - 0.97
十、Redis vs 向量数据库
| 特性 | Redis | Milvus |
|---|---|---|
| 延迟 | 极低 | 较低 |
| 容量 | 中 | 大 |
| 使用场景 | 缓存 | 知识库 |
推荐:
Redis 做热缓存
Milvus 做长期知识库
十一、总结
利用 Redis Stack 的向量能力,可以:
- 减少 LLM 调用
- 提升响应速度
- 降低成本
- 提升用户体验
Redis 从:
KV缓存
升级为:
AI语义缓存