graph_vectorstores
#
图向量存储#
有时嵌入模型无法捕捉文档之间的所有重要关系。 图向量存储是向量存储和检索器的扩展,允许文档之间显式连接。
图向量存储检索器使用向量相似性和链接来查找与非结构化查询相关的文档。
图表允许文档之间的链接。 每个文档标识了链接到它和从它链接的标签。 例如,一段文本可能根据其内容中的锚标签链接到URL,并从其发布的URL链接。
链接提取器
示例:
graph_vector_store = CassandraGraphVectorStore()
link_extractor = HtmlLinkExtractor()
links = link_extractor.extract_one(HtmlInput(document.page_content, "http://mysite"))
add_links(document, links)
graph_vector_store.add_document(document)
另请参阅
开始使用#
我们将国情咨文文本分块并将其分割成文档:
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter
raw_documents = TextLoader("state_of_the_union.txt").load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
documents = text_splitter.split_documents(raw_documents)
可以手动将链接添加到文档中,但使用LinkExtractor
更容易。有几种常见的链接提取器可用,你也可以构建自己的。在本指南中,我们将使用KeybertLinkExtractor
,它使用KeyBERT模型为文档标记关键词,并使用这些关键词在文档之间创建链接:
from langchain_community.graph_vectorstores.extractors import KeybertLinkExtractor
from langchain_community.graph_vectorstores.links import add_links
extractor = KeybertLinkExtractor()
for doc in documents:
add_links(doc, extractor.extract_one(doc))
创建图向量存储并添加文档#
我们将以Apache Cassandra或Astra DB数据库为例。
我们从文档和一个CassandraGraphVectorStore
创建一个OpenAIEmbeddings
模型:
import cassio
from langchain_community.graph_vectorstores import CassandraGraphVectorStore
from langchain_openai import OpenAIEmbeddings
# Initialize cassio and the Cassandra session from the environment variables
cassio.init(auto=True)
store = CassandraGraphVectorStore.from_documents(
embedding=OpenAIEmbeddings(),
documents=documents,
)
相似性搜索#
如果我们不遍历图,图向量存储的行为就像常规的向量存储。
因此,向量存储中所有可用的方法在图向量存储中也可用。
similarity_search()
方法返回与查询相似的文档,而不考虑文档之间的链接:
docs = store.similarity_search(
"What did the president say about Ketanji Brown Jackson?"
)
遍历搜索#
traversal_search()
方法返回与查询相似的文档,同时考虑文档之间的链接。它首先进行相似性搜索,然后遍历图以找到链接的文档:
docs = list(
store.traversal_search("What did the president say about Ketanji Brown Jackson?")
)
异步方法#
图向量存储有以a
为前缀的异步版本方法:
docs = [
doc
async for doc in store.atraversal_search(
"What did the president say about Ketanji Brown Jackson?"
)
]
图向量存储检索器#
图向量存储可以转换为检索器。
它与向量存储检索器类似,但它还具有遍历搜索方法
例如 traversal
和 mmr_traversal
:
retriever = store.as_retriever(search_type="mmr_traversal")
docs = retriever.invoke("What did the president say about Ketanji Brown Jackson?")
类
函数
|
|
返回与文档对应的networkx有向图。 |
|