You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Langchain的PandasDataFrameAgent添加GoogleSearch工具

解决方案:让LangChain Agent同时支持DataFrame查询与谷歌搜索

要实现「DataFrame无法回答时自动调用谷歌搜索」的需求,不能直接修改create_pandas_dataframe_agent返回的单工具Agent,需要手动构建多工具集合,让Agent根据问题自主选择工具。

核心思路

create_pandas_dataframe_agent本质是封装了PythonAstREPLTool的单工具Agent,只能处理DataFrame相关查询。我们需要:

  1. 把DataFrame查询逻辑封装为独立工具
  2. 添加谷歌搜索工具
  3. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 22:37:04