以编程方式使用文档

>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