如何在Redis Vector Database存储OpenAI Embeddings及Azure部署方案
问题解答
一、术语澄清
- Redis:基础开源键值对数据库,主打高性能缓存、会话存储等场景,原生不支持向量存储与查询,需通过扩展模块实现向量能力。
- Redis Vector Database:并非独立产品,指启用了Redis Stack(包含RedisSearch & Query、RedisJSON等模块)的Redis实例,具备向量存储、相似度检索、混合查询(向量+结构化数据)能力。
- Azure Cache for Redis:Azure托管的标准Redis服务,提供基础/标准/高级三层。仅高级层支持启用Redis Stack,从而具备向量数据库功能,适合中小规模场景。
- Azure Redis Enterprise:Azure上的企业级Redis托管服务,默认集成Redis Stack全部功能,支持更高吞吐量、低延迟、全球分布式部署,适合生产级大规模向量应用场景。
二、存储OpenAI Embeddings到Redis向量库的步骤
前提:确保你的Redis实例已启用Redis Stack(云版免费试用账户通常默认开启),且已能通过Python连接数据库。
- 安装依赖
pip install redis openai numpy
- Python代码实现
import openai import redis import numpy as np from redis.commands.search.field import VectorField, TextField from redis.commands.search.indexDefinition import IndexDefinition, IndexType # 配置OpenAI API密钥 openai.api_key = "你的OpenAI API密钥" # 配置Redis连接参数 REDIS_HOST = "你的Redis主机地址" REDIS_PORT = 你的端口号 REDIS_PASSWORD = "你的Redis密码" INDEX_NAME = "embeddings_index" VECTOR_DIM = 1536 # OpenAI text-embedding-ada-002的向量维度 # 连接Redis客户端 r = redis.Redis( host=REDIS_HOST, port=REDIS_PORT, password=REDIS_PASSWORD, decode_responses=False ) # 创建向量索引(仅首次运行需要) try: r.ft(INDEX_NAME).create_index( fields=[ TextField("content"), VectorField("embedding", "FLAT", {"TYPE": "FLOAT32", "DIM": VECTOR_DIM, "DISTANCE_METRIC": "COSINE"}) ], definition=IndexDefinition(prefix=["doc:"], index_type=IndexType.HASH) ) except Exception as e: print("索引已存在或创建失败:", e) # 获取OpenAI Embedding def get_openai_embedding(text): response = openai.Embedding.create( input=text, model="text-embedding-ada-002" ) return response['data'][0]['embedding'] # 存储向量到Redis text_content = "需要生成向量的文本内容" embedding = get_openai_embedding(text_content) embedding_bytes = bytes(np.array(embedding, dtype=np.float32)) r.hset( "doc:1", # 文档唯一标识,可自定义 mapping={ "content": text_content, "embedding": embedding_bytes } ) # 相似度查询示例 query_text = "查询的文本" query_embedding = get_openai_embedding(query_text) query_embedding_bytes = bytes(np.array(query_embedding, dtype=np.float32)) results = r.ft(INDEX_NAME).search( f"*=>[KNN 5 @embedding $query_embedding AS score]", query_params={"query_embedding": query_embedding_bytes}, return_fields=["content", "score"] ) for doc in results.docs: print(f"内容: {doc.content}, 相似度得分: {doc.score}")
注意:代码中需替换你的API密钥、Redis连接信息;若使用其他OpenAI embedding模型,需调整VECTOR_DIM对应维度。
三、在Azure上部署Redis向量数据库
方法1:通过Azure Cache for Redis(高级层)部署
- 登录Azure门户,搜索并创建「Azure Cache for Redis」实例。
- 在「定价层」选择高级层(仅高级层支持Redis Stack),按需选择节点大小。
- 在「高级」配置页,启用「Redis Stack」选项,确认包含RedisSearch模块。
- 完成网络、访问策略等配置后,创建实例。实例运行后,在「访问密钥」页获取连接字符串,用于后续连接。
方法2:通过Azure Redis Enterprise部署
- 登录Azure门户,搜索并创建「Azure Redis Enterprise」集群。
- 配置集群的区域、节点大小、副本数等基础参数,完成集群创建。
- 在集群页面创建新数据库,启用「向量搜索」功能(默认已包含在企业级数据库中)。
- 配置数据库的访问密钥、网络规则,获取数据库连接字符串即可使用。
内容的提问来源于stack exchange,提问作者Surya
相关产品推荐
相关产品推荐

