LangChain中CSV Agent结合对话记忆功能报错的解决方案咨询
解决方案:给CSV分析ChatBot添加对话记忆
问题根源
你之前的尝试错误在于:
ConversationChain是为纯文本对话场景设计的,仅接受LLM实例作为参数,无法直接兼容CSV Agent这类具备工具调用能力的Agent,因此传入CSV Agent会触发参数不匹配的报错。- 替换为纯ChatOpenAI实例后,Bot失去了绑定的CSV分析工具,自然无法处理数据查询请求。
正确实现方式
直接通过create_csv_agent结合对话记忆组件实现,无需依赖ConversationChain。具体步骤如下:
1. 导入依赖模块
from langchain.agents import create_csv_agent from langchain.chat_models import ChatOpenAI from langchain.memory import ConversationBufferMemory from langchain.agents.agent_types import AgentType
2. 创建对话记忆组件
这里使用ConversationBufferMemory保存完整对话上下文,适合短对话场景;如果对话较长,可替换为ConversationSummaryMemory自动总结历史:
# 初始化对话记忆,指定记忆键为"chat_history"并返回消息格式 memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
3. 创建带记忆的CSV Agent
通过agent_type指定聊天型Agent,并传入记忆组件:
agent = create_csv_agent( ChatOpenAI(temperature=0, model='gpt-4'), 'csv_pat.csv', verbose=True, agent_type=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, memory=memory )
4. 测试连续对话
现在Bot可以记住历史对话内容,完成连贯的CSV分析请求:
# 第一次查询 agent.run("What's the best performing month in terms of sales?") # 基于历史的后续查询 agent.run("How does that compare to the worst performing month?") # 基于历史趋势的预测请求 agent.run("Can you predict future sales based on this trend?")
关键说明
AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION类型的Agent会自动将对话历史纳入思考过程,确保Bot能结合上下文处理后续请求。- 记忆组件的
memory_key必须与Agent期望的上下文键匹配,默认情况下聊天型Agent使用"chat_history"作为记忆键。
内容的提问来源于stack exchange,提问作者lincolnab
相关产品推荐
相关产品推荐

