Langchain 工具包可以修改吗?我们可以向 pandas_dataframe_agent 工具包添加工具吗?

Mar*_*ven 6 agent pandas py-langchain

我是 langchain 的新手,所以我猜这是可能的,但这表明我对 langchain 中的组件缺乏充分的了解。我已成功创建并使用 Pandas Dataframe Agent 工具包来分析小型数据框。我还成功地使用 SERPAPI 工具来利用 Google 搜索 API 并从互联网上检索答案。我的目标是将这两件事结合到一个代理中......一个代理可以在数据中存在答案时查询数据以获取答案,而在数据中不存在答案时默认使用互联网。我觉得可能有一种方法可以向现有代理 takeit 添加工具。另一种选择似乎是从头开始创建一个新代理,复制 pandas 数据框代理的功能并添加其他工具......但这超出了我目前的技能范围。

给定一个数据框 sales_df:

from langchain.agents import create_pandas_dataframe_agent
from langchain.llms import OpenAI

question = 'Which itemnumber has the most sales?'
agent = create_pandas_dataframe_agent(OpenAI(temperature=0), 
                                      sales_df,
                                      verbose=True,
                                     )
agent.run(question)
Run Code Online (Sandbox Code Playgroud)

此代码成功返回我的 pandas 数据框问题的正确答案。

鉴于上面的项目编号(出于隐私原因,xxx 已被删除):

from langchain.agents import initialize_agent, load_tools, AgentType
from langchain.llms import OpenAI

llm = OpenAI(temperature=0)
tools = load_tools(['serpapi'], serpapi_api_key=SERPAPI_API_KEY)

agent = initialize_agent(
    tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True
)

agent.run("What is the description of the product which has an itemnumber of XXXXXXXX?")
Run Code Online (Sandbox Code Playgroud)

此代码成功返回产品的描述。

我正在寻找一种将这两件事结合起来的方法 - 这样代理就可以分析数据帧并在网络上搜索答案。

我已经尝试过了......它不会抛出错误,但代理似乎不知道它应该有一个可供使用的搜索工具,因此它继续依赖数据框来尝试找到答案(并返回错误的,因为在那里找不到答案)

from langchain.agents import create_pandas_dataframe_agent
from langchain.agents import load_tools
from langchain.llms import OpenAI
from langchain import SerpAPIWrapper
from langchain.tools import Tool


question = 'Which itemnumber has the most sales and what is the product description of the itemnumber?'
search = SerpAPIWrapper(serpapi_api_key=SERPAPI_API_KEY)
my_tools = [
    Tool.from_function(
        func=search.run,
        name="Search",
        description="useful for when you need to lookup answers outside of the dataset"
    ),
]

agent = create_pandas_dataframe_agent(OpenAI(temperature=0), 
                                      sales_df,
                                      verbose=True,
                                      tools = tools + my_tools,
                                     )
agent.run(question)
Run Code Online (Sandbox Code Playgroud)

小智 0

我在探索时遇到了同样的想法和问题。请参考这个文档:

https://api.python.langchain.com/en/latest/agents/langchain.agents.agent.AgentExecutor.html#langchain.agents.agent.AgentExecutor

只要 DataFrame 与 AgentExecutor 的要求兼容,您就可以将 pandas DataFrame 传递给 AgentExecutor 类。AgentExecutor 类有几个参数可以接受不同类型的输入,包括 pandas DataFrame。

看起来您可以将 DataFrame 作为元数据参数的一部分传递,元数据参数是一个可选字典,允许您向代理执行提供附加数据。