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
我在探索时遇到了同样的想法和问题。请参考这个文档:
只要 DataFrame 与 AgentExecutor 的要求兼容,您就可以将 pandas DataFrame 传递给 AgentExecutor 类。AgentExecutor 类有几个参数可以接受不同类型的输入,包括 pandas DataFrame。
看起来您可以将 DataFrame 作为元数据参数的一部分传递,元数据参数是一个可选字典,允许您向代理执行提供附加数据。