LangChain CHAT_ZERO_SHOT_REACT代理内存访问问题咨询
问题解决:LangChain CHAT_ZERO_SHOT_REACT_DESCRIPTION代理无法访问内存
核心问题原因
你对AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION的定位没错,它属于聊天类代理,但默认配置下,你添加的ConversationBufferMemory没有被正确注入到代理的prompt模板中——这类聊天代理需要接收消息对象列表而非纯字符串历史,你的内存配置没有匹配代理prompt的要求。
正确配置方法
修改内存初始化参数,让内存返回适配聊天代理的消息格式,即可实现历史访问:
llm = ChatOpenAI(model_name="gpt-4", temperature=0) tools = load_tools(["llm-math", "wolfram-alpha", "wikipedia"], llm=llm) # 关键配置:添加return_messages=True,让内存返回ChatMessage对象列表 memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) agent_test = initialize_agent( tools=tools, llm=llm, agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, handle_parsing_errors=True, memory=memory, verbose=True )
修改后重新测试,代理就能正确读取聊天历史:
>>> agent_test.run("What is the height of the empire state building?") 'The Empire State Building stands a total of 1,454 feet tall, including its antenna.' >>> agent_test.run("What was the last question I asked?") 'You asked: What is the height of the empire state building?'
补充说明
CHAT_ZERO_SHOT_REACT_DESCRIPTION的核心是结合ReAct工具调用逻辑和聊天能力,但它不会自动适配字符串类型的内存数据。只有当内存返回ChatMessage对象列表时,代理的prompt才能正确解析并注入历史上下文,实现多轮对话关联。
内容的提问来源于stack exchange,提问作者BBrooklyn
相关产品推荐
相关产品推荐

