如何为pandas_dataframe_agent添加ConversationBufferMemory对话记忆
Pandas DataFrame Agent 添加对话记忆失败的解决方案
问题分析
你尝试给create_pandas_dataframe_agent添加ConversationBufferMemory时遇到两个核心问题:
- 构造函数传入
memory参数无报错,但agent无法记住历史问题——因为默认的pandas agent提示模板未包含记忆变量,记忆内容无法注入到对话上下文里; - 直接给
llm_chain.memory赋值触发ValueError——因为agent的LLM链包含input和agent_scratchpad两个输入键,而默认的ConversationBufferMemory只支持单个输入键,需要明确指定对应输入键。
解决方案
需要自定义包含记忆变量的提示模板,同时配置记忆组件的输入键和记忆键,确保记忆能被正确注入和存储。
完整代码示例
from langchain.chat_models import ChatOpenAI from langchain.agents import create_pandas_dataframe_agent from langchain.memory import ConversationBufferMemory from langchain.prompts import PromptTemplate from langchain.agents import AgentType # 自定义提示模板,加入聊天历史变量 prompt_template = """ 你是专业的数据分析助手,基于提供的DataFrame回答问题。 聊天历史: {chat_history} 当前问题:{input} 请按以下思路分析: {agent_scratchpad} """ # 构建带记忆的提示模板 custom_prompt = PromptTemplate( input_variables=["chat_history", "input", "agent_scratchpad"], template=prompt_template ) # 配置对话记忆,指定输入键为用户问题的key(input),记忆键对应模板中的变量 memory = ConversationBufferMemory( memory_key="chat_history", input_key="input" ) # 初始化LLM llm = ChatOpenAI(temperature=0, model_name="gpt-4-0613") # 创建带记忆的Pandas DataFrame Agent pd_agent = create_pandas_dataframe_agent( llm=llm, df=df, verbose=True, agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION, prompt=custom_prompt, memory=memory ) # 测试对话 pd_agent.run("查看步骤12中的数据,有没有异常模式?关于这部分数据集能得出什么结论?") pd_agent.run("我之前的问题是什么?") # 现在agent能记住历史问题
关键说明
- 自定义提示模板:必须加入
{chat_history}变量,让agent能读取历史对话内容; - 记忆组件配置:
memory_key要和模板中的记忆变量名一致,input_key指定为用户输入的键名(input),避免多输入键冲突; - Agent类型指定:使用
ZERO_SHOT_REACT_DESCRIPTION类型,确保agent能正确使用提示模板中的变量。
内容的提问来源于stack exchange,提问作者Jakub Szlaur
相关产品推荐
相关产品推荐

