Documentation Index
Fetch the complete documentation index at: https://langchain-zh.cn/llms.txt
Use this file to discover all available pages before exploring further.
本指南介绍了 Graph RAG。有关所有支持的功能和配置的详细文档,请参阅
Graph RAG 项目页面。
langchain-graph-retriever 包中的 GraphRetriever 提供了一个 LangChain
retriever,它将向量上的非结构化相似性搜索
与元数据属性的结构化遍历相结合。这实现了在现有向量存储上进行基于图的
检索。
集成详情
-
基于现有元数据链接:
使用现有的元数据字段而无需额外处理。从现有向量存储中检索更多内容!
-
按需更改链接:
边可以即时指定,允许根据问题遍历不同的关系。
-
可插拔的遍历策略:
使用内置的遍历策略(如 Eager 或 MMR),或定义自定义逻辑来选择要探索的节点。
-
广泛的兼容性:
提供了多种向量存储的适配器,并易于添加对其他存储的支持。
此检索器位于 langchain-graph-retriever 包中。
pip install -qU langchain-graph-retriever
实例化
以下示例将展示如何对关于动物的示例文档执行图遍历。
先决条件
填充向量存储
本节展示如何使用示例数据填充各种向量存储。
如需帮助选择下面的向量存储之一,或添加对您向量存储的支持,请查阅有关
适配器和支持的存储 的文档。
AstraDB
Apache Cassandra
OpenSearch
Chroma
InMemory
使用 astra 扩展安装 langchain-graph-retriever 包: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
为了更快的初始测试,建议使用 InMemory 向量存储。
::: 使用 cassandra 扩展安装 langchain-graph-retriever 包:pip install "langchain-graph-retriever[cassandra]"
然后创建向量存储并加载测试文档:from langchain_community.vectorstores.cassandra import Cassandra
from langchain_graph_retriever.transformers import ShreddingTransformer
vector_store = Cassandra.from_documents(
documents=list(ShreddingTransformer().transform_documents(animals)),
embedding=embeddings,
table_name="animals",
)
如需帮助创建 Cassandra 连接,请参阅
Apache Cassandra 向量存储指南:::note
Apache Cassandra 不支持在嵌套元数据中搜索。因此
在插入文档时必须使用 ShreddingTransformer
::: 使用 opensearch 扩展安装 langchain-graph-retriever 包:pip install "langchain-graph-retriever[opensearch]"
然后创建向量存储并加载测试文档:from langchain_community.vectorstores import OpenSearchVectorSearch
vector_store = OpenSearchVectorSearch.from_documents(
documents=animals,
embedding=embeddings,
engine="faiss",
index_name="animals",
opensearch_url=OPEN_SEARCH_URL,
bulk_size=500,
)
如需帮助创建 OpenSearch 连接,请参阅
OpenSearch 向量存储指南。 使用 chroma 扩展安装 langchain-graph-retriever 包: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
::: 安装 langchain-graph-retriever 包: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 或 OpenSearch。
:::
图遍历
此图检索器从与查询最匹配的一个动物开始,然后
遍历具有相同 habitat 和/或 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 和/或 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 参考。