本指南介绍 Graph RAG。如需了解所有 支持的功能和配置,请参阅 Graph RAG 项目页面.
概述
GraphRetriever 中的 langchain-graph-retriever 包提供了一个 LangChain 检索器 ,它将 **非结构化** 向量相似性搜索 与 **结构化** 元数据属性遍历相结合。这使得基于图谱的 检索能够针对 **现有的** 向量存储进行。
集成详情
| 检索器 | 来源 | PyPI 包 | 最新版本 | 项目页面 |
|---|---|---|---|---|
GraphRetriever | github.com/datastax/graph-rag | langchain-graph-retriever | !PyPI - 版本 | Graph RAG |
优势
* **基于现有元数据进行链接:** 无需额外处理即可使用现有元数据字段。从 现有向量存储中获取更多信息!
* **按需更改链接:** 边可以动态指定,允许根据问题遍历不同的关系 。
* **可插拔的遍历策略:** 使用内置遍历策略(如 Eager 或 MMR),或定义自定义逻辑来选择 要探索的节点。
* **广泛的兼容性:** 适配器可用于多种向量存储,并可轻松添加更多 存储支持。
设置
安装
此检索器位于 langchain-graph-retriever package.
pip install -qU langchain-graph-retriever
uv add langchain-graph-retriever
实例化
以下示例将展示如何对一些示例 动物文档执行图遍历。
前提条件
<details> <summary>点击查看详情</summary> 1. 确保已安装 Python 3.10+
1. 安装提供示例数据的以下包。
pip install -qU graph_rag_example_helpers
1. 下载测试文档:
from graph_rag_example_helpers.datasets.animals import fetch_documents
animals = fetch_documents()
1. </details>
填充向量存储
本节展示如何使用示例数据填充各种向量存储。
如需帮助选择以下向量存储之一,或为您的 向量存储添加支持,请参阅关于 适配器和支持的存储.
AstraDB
安装 langchain-graph-retriever 使用以下命令安装包 astra extra:
pip install "langchain-graph-retriever[astra]"
然后创建一个向量存储并加载测试文档:
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 向量存储指南.
:::note 为了更快地进行初始测试,请考虑使用 **内存中** 向量存储。 :::
Chroma
安装 langchain-graph-retriever 包,使用 chroma extra:
pip install "langchain-graph-retriever[chroma]"
然后创建一个向量存储并加载测试文档:
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 向量存储指南.
:::note Chroma 不支持在嵌套元数据中搜索。因此 在这种情况下,有必要使用 ShreddingTransformer 来插入文档。 :::
InMemory
安装 langchain-graph-retriever package:
pip install "langchain-graph-retriever"
然后创建一个向量存储并加载测试文档:
from langchain_core.vectorstores import InMemoryVectorStore
vector_store = InMemoryVectorStore.from_documents(
documents=animals,
embedding=embeddings,
)
:::tip 使用 InMemoryVectorStore 是开始使用 Graph RAG 的最快方式 但不建议用于生产环境。建议改用 **AstraDB** or **OpenSearch**. :::
图遍历
此图检索器从与查询最匹配的一个动物开始,然后 遍历到具有相同 habitat and/or origin.
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 and/or origin.
results = traversal_retriever.invoke("what animals could be found near a capybara?")
for doc in results:
print(f"{doc.id}: {doc.page_content}")
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时,图遍历检索器的行为类似于标准检索器:
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)。在这种情况下,边定义 会被忽略。
这基本上与以下相同:
standard_retriever = vector_store.as_retriever(search_kwargs={"k":5})
对于这两种情况,调用检索器会返回:
results = standard_retriever.invoke("what animals could be found near a capybara?")
for doc in results:
print(f"{doc.id}: {doc.page_content}")
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 参考
要了解所有可用参数和高级配置,请参阅 Graph RAG API 参考.