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
相关产品推荐
相关产品推荐

