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

如何为pandas_dataframe_agent添加ConversationBufferMemory对话记忆

Pandas DataFrame Agent 添加对话记忆失败的解决方案

问题分析

你尝试给create_pandas_dataframe_agent添加ConversationBufferMemory时遇到两个核心问题:

  1. 构造函数传入memory参数无报错,但agent无法记住历史问题——因为默认的pandas agent提示模板未包含记忆变量,记忆内容无法注入到对话上下文里;
  2. 直接给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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:02:48