2026-10-23 17:22:05
要高效地在Redis向量数据库中存储和加载自定义嵌入,可通过以下步骤实现:
环境准备与依赖安装确保已安装必要的Python库(langchain、openai、redis-py、tiktoken),并根据需求安装sentence-transformers。启动Redis服务器并安装Redis Stack(包含RediSearch模块),默认连接地址为redis://localhost:6379。
加载与处理自定义文本数据
加载文本文件:使用TextLoader读取本地文本文件(如union.txt),将内容加载为Document对象。from langchain.document_loaders import TextLoaderloader = TextLoader("union.txt", encoding="utf-8")documents = loader.load()
切分文档:通过CharacterTextSplitter将文档切分为小块(chunks),避免超出嵌入模型或LLM的上下文窗口限制。调整chunk_size(如200字符)和chunk_overlap(如20字符)以优化搜索精度。from langchain.text_splitter import CharacterTextSplittertext_splitter = CharacterTextSplitter(chunk_size=200, chunk_overlap=20)docs = text_splitter.split_documents(documents)
生成嵌入并存储到Redis
选择嵌入模型:根据需求选择模型,如OpenAIEmbeddings(需配置API密钥)或SentenceTransformerEmbeddings(本地运行)。from langchain.embeddings import OpenAIEmbeddingsembeddings = OpenAIEmbeddings()
存储到Redis:使用Redis.from_documents方法,将文档块、嵌入模型和Redis连接信息结合,自动完成嵌入生成和数据存储。指定索引名称(如my_custom_embeddings)以便管理。from langchain.vectorstores.redis import Redisredis_url = "redis://localhost:6379"vectorstore = Redis.from_documents(docs, embeddings, redis_url=redis_url, index_name="my_custom_embeddings")
执行相似性搜索使用similarity_search或similarity_search_with_score方法查询与输入文本最相似的文档。后者返回相似度分数(分数越低越相似)。
query_text = "什么是向量数据库?"results = vectorstore.similarity_search(query_text)results_with_score = vectorstore.similarity_search_with_score(query_text)Redis中嵌入的TTL管理
Redis Vector Store的TTL参数:Redis类构造函数支持设置整个索引的过期时间(ttl参数),但无法为单个文档块设置TTL。
手动管理TTL:若需精细控制,可在存储前为每个键生成唯一名称,并通过redis-py的EXPIRE或SETEX命令设置TTL。
常见实践:多数向量搜索应用中,嵌入数据相对稳定,通常通过重新构建索引或外部机制管理生命周期,而非设置短期TTL。
最佳实践
通过以上步骤,可高效利用Redis作为向量数据库,为LLM应用提供灵活的知识检索能力。