>Redis 是一个内存数据平台,具有向量搜索、全文搜索和语义缓存功能,专为实时 AI 应用而设计。
本笔记本展示了如何使用与 RedisVectorStore.
设置
要使用 RedisVectorStore ,您首先需要安装合作伙伴包,以及本笔记本中使用的其他包。
pip install -qU langchain-redis langchain-openai
您需要一个运行中的 Redis 实例,并启用 Redis Search 功能。我们推荐 Redis 8.4+。您可以使用 Docker 在本地启动一个:
docker run -d --name redis -p 6379:6379 redis:8.4
或使用 Redis Cloud 进行托管部署。
(可选)下载 RedisInsight — 一个用于检查数据和索引的浏览器图形界面。
docker run -d --name redisinsight -p 5540:5540 redis/redisinsight:latest
凭证
通过设置以下环境变量来配置 Redis 连接:
对于需要认证的 Redis:
对于 Redis Cloud,请使用数据库仪表板中的连接字符串:
This package also supports SSL/TLS (rediss://)和高可用性 Redis Sentinel 部署(redis+sentinel://)。请参阅 langchain-redis README 获取完整的连接选项。
设置您的 OpenAI API 密钥:
初始化
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
from langchain_redis import RedisConfig, RedisVectorStore
config = RedisConfig(
index_name="my_vectors",
redis_url=os.getenv("REDIS_URL", "redis://localhost:6379"),
distance_metric="COSINE", # Options: COSINE, L2, IP
metadata_schema=[
{"name": "baz", "type": "tag"},
{"name": "foo", "type": "tag"},
]
)
vector_store = RedisVectorStore(embeddings=embeddings, config=config)
管理向量存储
向向量存储添加项目
texts = ["foo", "bar"]
metadatas = [{"baz": "bar"}, {"foo": "baz"}]
vector_store.add_texts(texts, metadatas=metadatas)
您也可以使用自定义键添加文档:
custom_keys = ["doc1", "doc2"]
vector_store.add_texts(texts, metadatas=metadatas, keys=custom_keys)
或与 LangChain 一起使用 add_documents Document objects:
from langchain_core.documents import Document
document_1 = Document(page_content="foo", metadata={"baz": "bar"})
document_2 = Document(page_content="bar", metadata={"foo": "baz"})
document_3 = Document(page_content="to be deleted")
documents = [document_1, document_2, document_3]
ids = ["1", "2", "3"]
vector_store.add_documents(documents=documents, ids=ids)
从向量存储删除项目
vector_store.delete(ids=["3"])
查询向量存储
一旦您的向量存储创建完成并添加了相关文档,您很可能希望在链或代理运行期间对其进行查询。
直接查询
执行简单的相似性搜索可以如下进行:
query = "foo"
docs = vector_store.similarity_search(query, k=2)
for doc in docs:
print(f"* {doc.page_content} [{doc.metadata}]")
带评分的相似性搜索
docs_and_scores = vector_store.similarity_search_with_score(query, k=2)
for doc, score in docs_and_scores:
print(f"* [SIM={score:.3f}] {doc.page_content} [{doc.metadata}]")
带过滤的相似性搜索
from redisvl.query.filter import Tag
results = vector_store.similarity_search(
query="foo",
k=1,
filter=Tag("baz") == "bar"
)
for doc in results:
print(f"* {doc.page_content} [{doc.metadata}]")
最大边际相关性搜索
docs = vector_store.max_marginal_relevance_search(query, k=2, fetch_k=10)
for doc in docs:
print(f"* {doc.page_content} [{doc.metadata}]")
其他搜索方法
本笔记本未列出更多搜索方法,要查找所有方法,请务必阅读 API reference。
通过转换为检索器进行查询
您还可以将向量存储转换为检索器,以便在链中更轻松地使用。
retriever = vector_store.as_retriever(
search_type="mmr",
search_kwargs={"k": 1, "fetch_k": 2, "lambda_mult": 0.5},
)
retriever.invoke("your query here")
用于检索增强生成
有关如何使用此向量存储进行检索增强生成 (RAG) 的指南,请参阅以下部分:
有关使用 langchain-redis的完整 RAG 演练,请参阅此 示例笔记本.
API 参考
有关详细文档 RedisVectorStore 功能和配置的详细信息,请访问 API reference。