> ## Documentation Index
> Fetch the complete documentation index at: https://langchain-docs-zh.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Redis 集成

> 使用 LangChain Python 与 Redis 向量存储集成。

> [Redis](https://redis.io/docs/latest/) 是一个具有向量搜索、全文搜索和语义缓存功能的内存数据平台，专为实时 AI 应用而设计。

本笔记本展示了如何使用与 `RedisVectorStore` 相关的功能。

## 设置

要使用 `RedisVectorStore`，您首先需要安装合作伙伴包，以及本笔记本中使用的其他包。

```bash theme={null}
pip install -qU langchain-redis langchain-openai
```

您需要一个运行中的 Redis 实例，并启用 Redis 搜索功能。我们推荐 Redis 8.4+。您可以使用 Docker 本地启动一个：

```bash theme={null}
docker run -d --name redis -p 6379:6379 redis:8.4
```

或者使用 [Redis Cloud](https://redis.io/cloud/) 进行托管部署。

（可选）下载 [RedisInsight](https://redis.io/insight/) — 一个基于浏览器的 GUI，用于检查您的数据和索引。

```bash theme={null}
docker run -d --name redisinsight -p 5540:5540 redis/redisinsight:latest
```

### 凭证

通过设置以下环境变量来配置您的 Redis 连接：

```bash theme={null}
export REDIS_URL="redis://localhost:6379"
```

对于带认证的 Redis：

```bash theme={null}
export REDIS_URL="redis://username:password@localhost:6379"
```

对于 Redis Cloud，使用来自您的数据库控制面板的连接字符串：

```bash theme={null}
export REDIS_URL="redis://default:<password>@<host>:<port>"
```

此包还支持 SSL/TLS (`rediss://`) 和高可用性 Redis Sentinel 部署 (`redis+sentinel://`)。有关完整的连接选项，请参阅 [langchain-redis README](https://github.com/langchain-ai/langchain-redis/blob/main/libs/redis/README.md#redis-connection-options)。

设置您的 OpenAI API 密钥：

```bash theme={null}
export OPENAI_API_KEY="your-api-key-here"
```

> [!TIP]
>
> [`langchain-redis`](https://github.com/langchain-ai/langchain-redis/blob/main/libs/redis/README.md) 包还提供 `RedisChatMessageHistory` 用于对话记忆和 `RedisSemanticCache` 用于 LLM 响应缓存 — 所有这些都由与您的向量存储相同的 Redis 实例支持。

## 初始化

```python theme={null}
import os
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
```

```python theme={null}
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)
```

> [!NOTE]
>
> `metadata_schema` 参数告诉 Redis 要索引哪些元数据字段。此处未列出的字段不能用于过滤器。使用 `"tag"` 处理分类字符串值，使用 `"numeric"` 处理数字。

## 管理向量存储

### 向向量存储添加项

```python theme={null}
texts = ["foo", "bar"]
metadatas = [{"baz": "bar"}, {"foo": "baz"}]
vector_store.add_texts(texts, metadatas=metadatas)
```

您还可以使用自定义键添加文档：

```python theme={null}
custom_keys = ["doc1", "doc2"]
vector_store.add_texts(texts, metadatas=metadatas, keys=custom_keys)
```

或者使用 `add_documents` 与 LangChain `Document` 对象：

```python theme={null}
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)
```

### 从向量存储删除项

```python theme={null}
vector_store.delete(ids=["3"])
```

## 查询向量存储

一旦您的向量存储创建完成，并且相关文档已添加，您很可能希望在您的链或智能体运行期间查询它。

### 直接查询

执行简单的相似度搜索如下：

```python theme={null}
query = "foo"
docs = vector_store.similarity_search(query, k=2)
for doc in docs:
    print(f"* {doc.page_content} [{doc.metadata}]")
```

#### 带分数的相似度搜索

```python theme={null}
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}]")
```

#### 带过滤的相似度搜索

```python theme={null}
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}]")
```

#### 最大边际相关性搜索

```python theme={null}
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`]\[RedisVectorStore]。

> [!TIP]
>
> Redis 支持混合搜索，结合向量相似度和全文搜索。有关 `similarity_search` 参数，包括 `return_all` 和 `distance_threshold`，请参阅 @\[`API reference`]\[RedisVectorStore]。

### 将其转换为检索器进行查询

您还可以将向量存储转换为检索器，以便在您的链中更轻松地使用。

```python theme={null}
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) 的指南，请参阅以下部分：

* [检索文档](https://langchain-docs-zh.mintlify.site/langchain/oss/deepagents/retrieval.md)
* [使用 LangChain 构建 RAG 应用](https://langchain-docs-zh.mintlify.site/langchain/oss/deepagents/rag.md)
* [智能体 RAG](https://langchain-docs-zh.mintlify.site/langchain/oss/langgraph/agentic-rag.md)

有关使用 `langchain-redis` 的完整 RAG 演示，请参阅此 [示例笔记本](https://github.com/redis-developer/redis-ai-resources/blob/main/python-recipes/RAG/02_langchain.ipynb)。

***

## API 参考

有关 `RedisVectorStore` 功能和配置的详细文档，请访问 @\[`API reference`]\[RedisVectorStore]。

***

> 官方原文：[src/oss/python/integrations/vectorstores/redis.mdx](https://github.com/langchain-ai/docs/blob/main/src/oss/python/integrations/vectorstores/redis.mdx) · 非官方翻译，译文由 AI 生成，以英文原文为准。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.