如何为Langchain的PandasDataFrameAgent添加GoogleSearch工具
解决方案:让LangChain Agent同时支持DataFrame查询与谷歌搜索
要实现「DataFrame无法回答时自动调用谷歌搜索」的需求,不能直接修改create_pandas_dataframe_agent返回的单工具Agent,需要手动构建多工具集合,让Agent根据问题自主选择工具。
核心思路
create_pandas_dataframe_agent本质是封装了PythonAstREPLTool的单工具Agent,只能处理DataFrame相关查询。我们需要:
- 把DataFrame查询逻辑封装为独立工具
- 添加谷歌搜索工具
- 用
initialize_agent创建支持多工具的Agent
完整代码实现
from langchain.agents import initialize_agent, AgentType from langchain.tools import Tool from langchain.utilities import GoogleSearchAPIWrapper from langchain.tools.python.tool import PythonAstREPLTool from langchain.llms import AzureOpenAI # 1. 初始化Azure OpenAI模型 model = AzureOpenAI( deployment_name="text-davinci-003", openai_api_version="2023-05-15", openai_api_key=MY_KEY, openai_api_base=MY_LINK, openai_api_type="azure", temperature=0, ) # 2. 获取你的DataFrame数据 data = get_data() # 替换为你的DataFrame获取逻辑 # 3. 创建DataFrame查询工具:用PythonAstREPLTool处理DataFrame操作 # 将DataFrame以全局变量`df`传入,方便代码中直接调用 dataframe_tool = PythonAstREPLTool(globals={"df": data}) # 4. 创建谷歌搜索工具 search_wrapper = GoogleSearchAPIWrapper() google_tool = Tool( name="Google Search", description="当问题无法通过DataFrame回答时使用,例如查询食谱、实时资讯、外部知识等不在本地数据中的内容", func=search_wrapper.run, ) # 5. 定义工具集合,每个工具的描述要精准,引导Agent选择 tools = [ Tool( name="DataFrame查询", description="用于回答关于本地DataFrame中事件、数据的问题,必须通过编写Python代码查询名为`df`的DataFrame来获取答案", func=dataframe_tool.run, ), google_tool ] # 6. 初始化多工具Agent agent = initialize_agent( tools, model, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True, handle_parsing_errors=True # 可选,处理代码解析/执行时的错误 ) # 7. 运行查询 response = agent.run(MY_QUESTION)
关键说明
- 工具描述的重要性:Agent完全依赖工具的
description判断何时使用哪个工具,所以要明确区分两类工具的适用场景,避免混淆。 - 替代
create_pandas_dataframe_agent:我们用PythonAstREPLTool直接实现DataFrame查询逻辑,这也是create_pandas_dataframe_agent内部使用的核心工具,功能一致但更灵活。 - 错误处理:添加
handle_parsing_errors=True可以避免Agent因代码解析错误直接崩溃,提升鲁棒性。
为什么你的原有写法不可行
你之前把create_pandas_dataframe_agent作为工具的func是错误的——这个函数是用来创建Agent的,不是执行具体查询的函数。正确的做法是直接使用底层的PythonAstREPLTool来封装DataFrame查询逻辑,再和谷歌搜索工具组合。
内容的提问来源于stack exchange,提问作者perly
相关产品推荐
相关产品推荐

