LangChain Pandas Dataframe Agent能否添加SerpAPI工具实现混合查询?
问题
作为LangChain新手,已能单独使用Pandas Dataframe Agent分析sales_df数据集,也能通过SerpAPI调用谷歌搜索获取网络信息。现在想整合两者,打造一个优先从数据集查答案、无结果时自动联网搜索的Agent,但添加SerpAPI工具后,Agent不识别该工具,仍只从数据集检索,导致结果错误。
问题分析
create_pandas_dataframe_agent是封装好的专用Agent,默认的prompt和逻辑更偏向仅处理Dataframe查询,即便手动添加工具,也可能因内置prompt未包含工具调用决策逻辑,导致Agent忽略额外工具。另外你提供的整合代码存在变量未定义问题(tools变量未初始化就使用tools + my_tools),也会引发运行异常。
解决方案
放弃直接用create_pandas_dataframe_agent添加工具,改为将Dataframe查询包装成Tool,再和SerpAPI工具一起通过initialize_agent初始化通用Agent,让Agent能根据问题类型自主选择工具。
修正后代码示例
from langchain.agents import initialize_agent, AgentType from langchain.llms import OpenAI from langchain.tools import Tool from langchain import SerpAPIWrapper from langchain.agents.agent_toolkits import create_pandas_dataframe_agent # 初始化LLM llm = OpenAI(temperature=0) # 1. 包装Dataframe查询工具 def df_query_tool(query): agent = create_pandas_dataframe_agent(llm, sales_df, verbose=False) return agent.run(query) df_tool = Tool.from_function( func=df_query_tool, name="Dataframe Query", description="用于查询sales_df数据集中的销售相关信息,比如哪个itemnumber销量最高" ) # 2. 初始化SerpAPI搜索工具 search = SerpAPIWrapper(serpapi_api_key=SERPAPI_API_KEY) search_tool = Tool.from_function( func=search.run, name="Search", description="当需要查找数据集以外的信息时使用,比如某个itemnumber对应的商品描述" ) # 3. 整合所有工具并初始化Agent tools = [df_tool, search_tool] agent = initialize_agent( tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True ) # 测试问题 question = 'Which itemnumber has the most sales and what is the product description of the itemnumber?' agent.run(question)
关键调整说明
- 将Dataframe查询逻辑封装成独立Tool,让通用Agent能识别这是一个可用工具
- 使用
ZERO_SHOT_REACT_DESCRIPTION类型的Agent,它会根据每个工具的描述,判断当前问题应该调用哪个工具 - 明确每个工具的功能描述,帮助Agent做出正确的工具选择决策
内容的提问来源于stack exchange,提问作者Mark von Oven
相关产品推荐
相关产品推荐

