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

LangChain+GPT-4构建Pandas代理时自定义Prompt不生效问题求助

问题解决:LangChain Pandas Agent自定义Prompt不生效(OPENAI_FUNCTIONS类型)

核心原因

当使用AgentType.OPENAI_FUNCTIONS创建pandas dataframe代理时,create_pandas_dataframe_agent的prompt_template参数无法直接覆盖默认提示架构。这类Agent依赖固定的对话结构(系统消息+用户输入+函数调用历史),直接传入自定义prompt会被忽略。

解决方案

方案1:修改默认系统消息

直接替换pandas agent的默认系统提示内容,保留原有工具调用逻辑:

import pandas as pd
from langchain.chat_models import ChatOpenAI
from langchain.agents.agent_toolkits import create_pandas_dataframe_agent
from langchain.agents.agent_types import AgentType
from langchain.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate

# 定义数据框
df1 = ...
df2 = ...

# 自定义系统消息,包含数据框信息和输出要求
CUSTOM_SYSTEM_MESSAGE = """
你现在需要处理2个pandas数据框,分别是df1和df2。以下是每个数据框的前5行内容:
{df_head}

请用中文回答所有问题,并且如果需要返回文件相关内容,统一使用JSON格式,文件类型标记为"type": "csv"。
"""

# 构建Prompt模板
system_prompt = SystemMessagePromptTemplate.from_template(CUSTOM_SYSTEM_MESSAGE)
human_prompt = HumanMessagePromptTemplate.from_template("{input}")
prompt = ChatPromptTemplate.from_messages([system_prompt, human_prompt])

llm = ChatOpenAI(temperature=0, model="gpt-4")

# 创建代理,传入自定义prompt
agent = create_pandas_dataframe_agent(
    llm,
    [df1, df2],
    agent_type=AgentType.OPENAI_FUNCTIONS,
    prompt=prompt,  # 注意使用prompt参数而非prompt_template
    verbose=True,
    max_iterations=5,
    early_stopping_method='generate',
)

方案2:手动构建OpenAI Functions Agent

如果需要更灵活的控制,可以手动创建工具和代理:

import pandas as pd
from langchain.chat_models import ChatOpenAI
from langchain.agents import AgentExecutor, OpenAIFunctionsAgent
from langchain.agents.agent_toolkits.pandas.toolkit import create_pandas_dataframe_toolkit
from langchain.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate

# 定义数据框
df1 = ...
df2 = ...

llm = ChatOpenAI(temperature=0, model="gpt-4")
# 创建pandas工具集
toolkit = create_pandas_dataframe_toolkit(llm=llm, df=[df1, df2])
tools = toolkit.get_tools()

# 生成数据框前几行的展示文本
df_heads = "\n".join([f"### {df_name} 前5行:\n{df.head().to_markdown()}" for df_name, df in zip(["df1", "df2"], [df1, df2])])

# 自定义系统提示
CUSTOM_SYSTEM_PROMPT = f"""
你可以使用以下工具处理pandas数据框:
{[tool.name for tool in tools]}

数据框基础信息:
{df_heads}

输出要求:
1. 所有回答必须用中文
2. 涉及文件输出的内容,必须用JSON格式,且包含"type": "csv"字段
"""

# 构建Prompt
system_message = SystemMessagePromptTemplate.from_template(CUSTOM_SYSTEM_PROMPT)
human_message = HumanMessagePromptTemplate.from_template("{input}")
prompt = ChatPromptTemplate.from_messages([system_message, human_message])

# 创建代理执行器
agent = OpenAIFunctionsAgent(llm=llm, tools=tools, prompt=prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, max_iterations=5, early_stopping_method='generate')

关键注意事项

  • 使用AgentType.OPENAI_FUNCTIONS时,必须通过prompt参数传入自定义模板,而非prompt_template
  • 自定义prompt必须包含数据框的基础信息(如前几行内容),否则Agent无法理解数据结构
  • 系统消息中需明确指定输出语言和格式规则,确保Agent严格遵循要求

内容的提问来源于stack exchange,提问作者Flo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:40:54