Skip to main content

Vectorstore Agent

这个笔记本展示了一个设计用于从一个或多个向量存储中检索信息的代理。

创建向量存储

from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter
from langchain import OpenAI, VectorDBQA

llm = OpenAI(temperature=0)
from langchain.document_loaders import TextLoader

loader = TextLoader("../../../state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)

embeddings = OpenAIEmbeddings()
state_of_union_store = Chroma.from_documents(
texts, embeddings, collection_name="state-of-union"
)
    使用直接本地API运行Chroma。
使用DuckDB内存数据库。数据将是临时的。
from langchain.document_loaders import WebBaseLoader

loader = WebBaseLoader("https://beta.ruff.rs/docs/faq/")
docs = loader.load()
ruff_texts = text_splitter.split_documents(docs)
ruff_store = Chroma.from_documents(ruff_texts, embeddings, collection_name="ruff")
    使用直接本地API运行Chroma。
使用DuckDB内存数据库。数据将是临时的。

初始化工具包和代理

首先,我们将创建一个只有一个向量存储的代理。

from langchain.agents.agent_toolkits import (
create_vectorstore_agent,
VectorStoreToolkit,
VectorStoreInfo,
)

vectorstore_info = VectorStoreInfo(
name="state_of_union_address",
description="最近的国情咨文",
vectorstore=state_of_union_store,
)
toolkit = VectorStoreToolkit(vectorstore_info=vectorstore_info)
agent_executor = create_vectorstore_agent(llm=llm, toolkit=toolkit, verbose=True)

示例

agent_executor.run(
"拜登在国情咨文中对凯坦吉·布朗·杰克逊说了什么?"
)
    

> 进入新的AgentExecutor链...
我需要在国情咨文中找到答案
动作:state_of_union_address
动作输入:拜登在国情咨文中对凯坦吉·布朗·杰克逊说了什么
观察: 拜登说凯坦吉·布朗·杰克逊是全国顶级法律人才之一,她将继续布雷耶法官的卓越传统。
思考:我现在知道最终答案
最终答案:拜登说凯坦吉·布朗·杰克逊是全国顶级法律人才之一,她将继续布雷耶法官的卓越传统。

> 完成链。






"拜登说凯坦吉·布朗·杰克逊是全国顶级法律人才之一,她将继续布雷耶法官的卓越传统。"
agent_executor.run(
"拜登在国情咨文中对凯坦吉·布朗·杰克逊说了什么?列出来源。"
)
    

> 进入新的AgentExecutor链...
我需要使用state_of_union_address_with_sources工具来回答这个问题。
动作:state_of_union_address_with_sources
动作输入:拜登在国情咨文中对凯坦吉·布朗·杰克逊说了什么
观察:{"answer": "拜登提名了巡回上诉法院法官凯坦吉·布朗·杰克逊进入美国最高法院,并表示她是全国顶级法律人才之一,将继续布雷耶法官的卓越传统。\n", "sources": "../../state_of_the_union.txt"}
思考:我现在知道最终答案
最终答案:拜登提名了巡回上诉法院法官凯坦吉·布朗·杰克逊进入美国最高法院,并表示她是全国顶级法律人才之一,将继续布雷耶法官的卓越传统。来源:../../state_of_the_union.txt

> 完成链。






"拜登提名了巡回上诉法院法官凯坦吉·布朗·杰克逊进入美国最高法院,并表示她是全国顶级法律人才之一,将继续布雷耶法官的卓越传统。来源:../../state_of_the_union.txt"

多个向量存储

我们还可以轻松地使用多个向量存储来初始化代理并使用代理在它们之间进行路由。为此,我们需要使用优化了路由的代理工具包和初始化器。

from langchain.agents.agent_toolkits import (
create_vectorstore_router_agent,
VectorStoreRouterToolkit,
VectorStoreInfo,
)
ruff_vectorstore_info = VectorStoreInfo(
name="ruff",
description="关于Ruff Python代码检查库的信息",
vectorstore=ruff_store,
)
router_toolkit = VectorStoreRouterToolkit(
vectorstores=[vectorstore_info, ruff_vectorstore_info], llm=llm
)
agent_executor = create_vectorstore_router_agent(
llm=llm, toolkit=router_toolkit, verbose=True
)

示例

agent_executor.run(
"拜登在国情咨文中对凯坦吉·布朗·杰克逊说了什么?"
)
    

> 进入新的AgentExecutor链...
我需要使用state_of_union_address工具来回答这个问题。
动作:state_of_union_address
动作输入:拜登在国情咨文中对凯坦吉·布朗·杰克逊说了什么
观察: 拜登说凯坦吉·布朗·杰克逊是全国顶级法律人才之一,她将继续布雷耶法官的卓越传统。
思考:我现在知道最终答案
最终答案:拜登说凯坦吉·布朗·杰克逊是全国顶级法律人才之一,她将继续布雷耶法官的卓越传统。

> 完成链。






"拜登说凯坦吉·布朗·杰克逊是全国顶级法律人才之一,她将继续布雷耶法官的卓越传统。"
agent_executor.run("Ruff使用什么工具来运行Jupyter Notebooks?")
    

> 进入新的AgentExecutor链...
我需要找出Ruff用什么工具来运行Jupyter Notebooks
动作:ruff
动作输入:Ruff使用什么工具来运行Jupyter Notebooks?
观察: Ruff集成到nbQA中,nbQA是一个用于在Jupyter Notebooks上运行代码检查器和代码格式化器的工具。安装了Ruff和nbqa之后,您可以像这样在笔记本上运行Ruff:> nbqa ruff Untitled.html
思考:我现在知道最终答案
最终答案:Ruff集成到nbQA中,nbQA是一个用于在Jupyter Notebooks上运行代码检查器和代码格式化器的工具。安装了Ruff和nbqa之后,您可以像这样在笔记本上运行Ruff:> nbqa ruff Untitled.html

> 完成链。






'Ruff集成到nbQA中,nbQA是一个用于在Jupyter Notebooks上运行代码检查器和代码格式化器的工具。安装了Ruff和nbqa之后,您可以像这样在笔记本上运行Ruff:> nbqa ruff Untitled.html'
agent_executor.run(
"Ruff使用什么工具来运行Jupyter Notebooks?总统在国情咨文中提到了那个工具吗?"
)
    

> 进入新的AgentExecutor链...
我需要找出Ruff使用了什么工具,并且总统是否在国情咨文中提到了它。
动作:ruff
动作输入:Ruff使用什么工具来运行Jupyter Notebooks?
观察: Ruff集成到nbQA中,nbQA是一个用于在Jupyter Notebooks上运行代码检查器和代码格式化器的工具。安装了Ruff和nbqa之后,您可以像这样在笔记本上运行Ruff:> nbqa ruff Untitled.html
思考:我需要找出总统是否在国情咨文中提到了nbQA。
动作:state_of_union_address
动作输入:总统是否在国情咨文中提到了nbQA?
观察: No, the president did not mention nbQA in the state of the union.
思考:我现在知道最终答案。
最终答案:No, the president did not mention nbQA in the state of the union.

> 完成链。






'No, the president did not mention nbQA in the state of the union.'