如何让LangChain Pandas DataFrame Agent无本地答案时调用谷歌搜索?
实现LangChain Pandas Agent + 谷歌搜索的 fallback 功能
要让Agent优先从Pandas DataFrame取数,找不到答案时自动调用谷歌搜索,你需要把Pandas操作工具和谷歌搜索工具整合进同一个Agent,而不是用单一的create_pandas_dataframe_agent。下面是具体实现步骤:
1. 安装依赖
先确保安装所需的Python包:
pip install langchain langchain-openai pandas langchain-community google-search-results
(注:google-search-results是SerpAPI的客户端,用它调用谷歌搜索更简便,你需要去SerpAPI官网申请免费密钥)
2. 配置API密钥
设置环境变量存储OpenAI和SerpAPI的密钥:
# Linux/macOS export OPENAI_API_KEY="你的OpenAI密钥" export SERPAPI_API_KEY="你的SerpAPI密钥" # Windows(PowerShell) $env:OPENAI_API_KEY="你的OpenAI密钥" $env:SERPAPI_API_KEY="你的SerpAPI密钥"
3. 整合工具并创建Agent
直接用通用工具调用Agent框架,把Pandas工具和谷歌搜索工具组合起来:
import pandas as pd from langchain_openai import OpenAI from langchain_community.agent_toolkits.pandas.pandas import create_pandas_dataframe_toolkit from langchain_community.tools.google_search import GoogleSearchRun from langchain.agents import AgentExecutor, create_tool_calling_agent from langchain_core.prompts import ChatPromptTemplate # 加载你的CSV数据到DataFrame df = pd.read_csv("your_dataset.csv") # 初始化大模型 llm = OpenAI(temperature=1) # 创建操作DataFrame的工具集合 pandas_toolkit = create_pandas_dataframe_toolkit(llm=llm, df=df) pandas_tools = pandas_toolkit.tools # 创建谷歌搜索工具 google_search = GoogleSearchRun() # 合并两个工具列表 tools = pandas_tools + [google_search] # 定义系统提示词,引导Agent的执行逻辑 system_prompt = """你是兼具DataFrame数据分析和网络搜索能力的助手。 处理用户问题时,优先使用Pandas工具从给定的DataFrame中查找答案; 如果DataFrame中没有相关信息,再调用谷歌搜索工具获取网络数据。 最终用自然语言整理结果回复用户。""" # 构建提示模板 prompt = ChatPromptTemplate.from_messages([ ("system", system_prompt), ("user", "{input}"), ("agent_scratchpad", "{agent_scratchpad}") ]) # 创建工具调用Agent agent = create_tool_calling_agent(llm=llm, tools=tools, prompt=prompt) # 创建Agent执行器 agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
4. 测试使用
现在可以用这个执行器处理两种类型的问题:
# 测试从DataFrame取数的问题 result1 = agent_executor.invoke({"input": "数据集中2023年的总销售额是多少?"}) print(result1["output"]) # 测试需要搜索的问题 result2 = agent_executor.invoke({"input": "2024年电商行业的最新监管政策是什么?"}) print(result2["output"])
注意事项
- 如果不想用SerpAPI,也可以用LangChain的
GoogleSearchAPIWrapper,但需要配置谷歌自定义搜索的API密钥和搜索引擎ID,步骤更繁琐。 - 你的
temperature=1设置会让模型输出更随机,如果需要更精准的数据分析结果,可以调低到0.1左右。
内容的提问来源于stack exchange,提问作者zizon
相关产品推荐
相关产品推荐

