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,
)

异步方法#

图向量存储有以a为前缀的异步版本方法:

docs = [
    doc
    async for doc in store.atraversal_search(
        "What did the president say about Ketanji Brown Jackson?"
    )
]

图向量存储检索器#

图向量存储可以转换为检索器。 它与向量存储检索器类似,但它还具有遍历搜索方法 例如 traversalmmr_traversal

retriever = store.as_retriever(search_type="mmr_traversal")
docs = retriever.invoke("What did the president say about Ketanji Brown Jackson?")

函数