> ## 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.

# Graph RAG 集成

> 使用 LangChain Python 集成 Graph RAG 检索器。

本指南介绍了 Graph RAG。有关所有支持的功能和配置的详细文档，请参阅
[Graph RAG 项目页面](https://datastax.github.io/graph-rag/)。

## 概述

来自 `langchain-graph-retriever` 包的 `GraphRetriever` 提供了一个 LangChain
[检索器](https://langchain-docs-zh.mintlify.site/langchain/oss/deepagents/retrieval.md)，它结合了 **非结构化** 向量相似搜索与 **结构化** 元数据属性的遍历。这使您能够在 **现有** 的向量存储上执行基于图的检索。

### 集成细节

| 检索器 | 来源 | PyPI 包 | 最新 | 项目页面 |
| :- | :- | :-: | :-: | :-: |
| `GraphRetriever` | [github.com/datastax/graph-rag](https://github.com/datastax/graph-rag/tree/main/packages/langchain-graph-retriever) | [`langchain-graph-retriever`](https://pypi.org/project/langchain-graph-retriever/) | ![PyPI - 版本](https://img.shields.io/pypi/v/langchain-graph-retriever?style=flat-square\&label=%20\&color=orange) | [Graph RAG](https://datastax.github.io/graph-rag/) |

## 优势

* [**基于现有元数据建立链接：**](https://datastax.github.io/graph-rag/guide/get-started/)
  使用现有的元数据字段，无需额外处理。从现有向量存储中获取更多信息！

* [**按需更改链接：**](https://datastax.github.io/graph-rag/guide/edges/)
  边缘可以即时指定，允许根据问题遍历不同关系。

* [**可插拔的遍历策略：**](https://datastax.github.io/graph-rag/guide/strategies/)
  使用内置的遍历策略（如 Eager 或 MMR），或定义自定义逻辑来选择要探索的节点。

* [**广泛的兼容性：**](https://datastax.github.io/graph-rag/guide/adapters/)
  提供了适用于各种向量存储的适配器，并可以轻松添加对其他存储的支持。

## 设置

### 安装

此检索器位于 `langchain-graph-retriever` 包中。

```bash pip theme={null}
pip install -qU langchain-graph-retriever
```

```bash uv theme={null}
uv add langchain-graph-retriever
```

## 实例化

以下示例将展示如何对关于动物的示例文档执行图遍历。

### 前置条件

<details>
  <summary>切换详细内容</summary>

  1. 确保已安装 Python 3.10+

  2. 安装提供示例数据的以下包。
     ```bash theme={null}
     pip install -qU graph_rag_example_helpers
     ```

  3. 下载测试文档：
     ```python theme={null}
     from graph_rag_example_helpers.datasets.animals import fetch_documents
     animals = fetch_documents()
     ```

  4.
</details>

### 填充向量存储

本节展示了如何使用示例数据填充各种向量存储。

有关选择以下向量存储之一或为您的向量存储添加支持的说明，请参阅
[适配器和支持存储](https://datastax.github.io/graph-rag/guide/adapters/) 的文档。

> [tab] AstraDB
>
> 使用 `astra` 附加项安装 `langchain-graph-retriever` 包：
>
> ```bash theme={null}
> pip install "langchain-graph-retriever[astra]"
> ```
>
> 然后创建向量存储并加载测试文档：
>
> ```python theme={null}
> from langchain_astradb import AstraDBVectorStore
>
> vector_store = AstraDBVectorStore.from_documents(
>     documents=animals,
>     embedding=embeddings,
>     collection_name="animals",
>     api_endpoint=ASTRA_DB_API_ENDPOINT,
>     token=ASTRA_DB_APPLICATION_TOKEN,
> )
> ```
>
> 对于 `ASTRA_DB_API_ENDPOINT` 和 `ASTRA_DB_APPLICATION_TOKEN` 凭据，
> 请参阅 [AstraDB 向量存储指南](https://langchain-docs-zh.mintlify.site/langchain/oss/python/integrations/vectorstores/astradb.md)。
>
> :::注意
> 为了更快地进行初始测试，请考虑使用 **InMemory** 向量存储。
> :::

> [tab] Chroma
>
> 使用 `chroma` 附加项安装 `langchain-graph-retriever` 包：
>
> ```bash theme={null}
> pip install "langchain-graph-retriever[chroma]"
> ```
>
> 然后创建向量存储并加载测试文档：
>
> ```python theme={null}
> from langchain_chroma.vectorstores import Chroma
> from langchain_graph_retriever.transformers import ShreddingTransformer
>
> vector_store = Chroma.from_documents(
>     documents=list(ShreddingTransformer().transform_documents(animals)),
>     embedding=embeddings,
>     collection_name="animals",
> )
> ```
>
> 有关创建 Chroma 连接的帮助，请参阅 [Chroma 向量存储指南](https://langchain-docs-zh.mintlify.site/langchain/oss/python/integrations/vectorstores/chroma.md)。
>
> :::注意
> Chroma 不支持在嵌套元数据中搜索。由于这个原因，
> 在插入文档时必须使用 [`ShreddingTransformer`](https://datastax.github.io/graph-rag/reference/langchain_graph_retriever/transformers/#langchain_graph_retriever.transformers.shredding.ShreddingTransformer)。
> :::

> [tab] InMemory
>
> 安装 `langchain-graph-retriever` 包：
>
> ```bash theme={null}
> pip install "langchain-graph-retriever"
> ```
>
> 然后创建向量存储并加载测试文档：
>
> ```python theme={null}
> from langchain_core.vectorstores import InMemoryVectorStore
>
> vector_store = InMemoryVectorStore.from_documents(
>     documents=animals,
>     embedding=embeddings,
> )
> ```
>
> :::提示
> 使用 `InMemoryVectorStore` 是开始使用 Graph RAG 最快的方法，
> 但它不推荐用于生产环境。相反，建议使用
> **AstraDB** 或 **OpenSearch**。
> :::

### 图遍历

此图检索器从一个与查询最匹配的动物开始，然后遍历到具有相同 `habitat` 和/或 `origin` 的其他动物。

```python theme={null}
from graph_retriever.strategies import Eager
from langchain_graph_retriever import GraphRetriever

traversal_retriever = GraphRetriever(
    store = vector_store,
    edges = [("habitat", "habitat"), ("origin", "origin")],
    strategy = Eager(k=5, start_k=1, max_depth=2),
)
```

上述代码创建了一个图遍历检索器，它从最近的动物（`start_k=1`）开始，
检索 5 个文档（`k=5`），并将搜索限制在最多与第一个动物相距 2 步的文档（`max_depth=2`）。

`edges` 定义了如何使用元数据值进行遍历。在这种情况下，每个动物都与具有相同 `habitat` 和/或 `origin` 的其他动物相连。

```python theme={null}
results = traversal_retriever.invoke("what animals could be found near a capybara?")

for doc in results:
    print(f"{doc.id}: {doc.page_content}")
```

```text theme={null}
capybara: capybaras are the largest rodents in the world and are highly social animals.
heron: herons are wading birds known for their long legs and necks, often seen near water.
crocodile: crocodiles are large reptiles with powerful jaws and a long lifespan, often living over 70 years.
frog: frogs are amphibians known for their jumping ability and croaking sounds.
duck: ducks are waterfowl birds known for their webbed feet and quacking sounds.
```

图遍历通过利用数据中的结构化关系来提高检索质量。与标准相似搜索（见下文）不同，它为文档的选择提供了明确、可解释的理由。

在这种情况下，文档 `capybara`、`heron`、`frog`、`crocodile` 和 `newt` 都具有相同的 `habitat=wetlands`，如它们的元数据所定义。这应该会增加文档的相关性，并提高 LLM 提供的答案质量。

### 与标准检索的比较

当 `max_depth=0` 时，图遍历检索器表现得像标准检索器：

```python theme={null}
standard_retriever = GraphRetriever(
    store = vector_store,
    edges = [("habitat", "habitat"), ("origin", "origin")],
    strategy = Eager(k=5, start_k=5, max_depth=0),
)
```

这创建了一个检索器，它从最近的 5 个动物（`start_k=5`）开始，并且不进行任何遍历（`max_depth=0`）。在这种情况下，边定义被忽略。

这本质上与以下相同：

```python theme={null}
standard_retriever = vector_store.as_retriever(search_kwargs={"k":5})
```

对于这两种情况，调用检索器返回：

```python theme={null}
results = standard_retriever.invoke("what animals could be found near a capybara?")

for doc in results:
    print(f"{doc.id}: {doc.page_content}")
```

```text theme={null}
capybara: capybaras are the largest rodents in the world and are highly social animals.
iguana: iguanas are large herbivorous lizards often found basking in trees and near water.
guinea pig: guinea pigs are small rodents often kept as pets due to their gentle and social nature.
hippopotamus: hippopotamuses are large semi-aquatic mammals known for their massive size and territorial behavior.
boar: boars are wild relatives of pigs, known for their tough hides and tusks.
```

这些文档仅基于相似性进行连接。存储中存在的任何结构化数据都被忽略。与图检索相比，这可能会降低文档相关性，因为返回的结果有较低的可能性对回答查询有帮助。

## 使用方法

根据上述示例，`invoke`用于在查询上启动检索。

***

## API 参考

要探索所有可用参数和高级配置，请参考
[图 RAG API 参考](https://datastax.github.io/graph-rag/reference/)。

***

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


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