如何将Langchain后端ConversationSummaryMemory传递至前端以持久化会话记忆?
解决Langchain ConversationSummaryMemory会话持久化问题
核心逻辑
既然你已经配置好ConversationSummaryMemory,核心就是把会话摘要作为返回JSON的一部分传给前端,前端每次请求时再把这个摘要回传给后端,让Memory复用历史会话上下文。
具体实现步骤
1. 后端修改:把会话摘要加入返回结果
在Agent处理完用户请求后,从Memory中提取当前会话摘要,和回复消息一起打包成JSON返回。
示例代码(适配你的仓库逻辑):
# 假设已初始化agent和memory response = agent.run(user_input) # 提取会话摘要 conversation_summary = memory.load_memory_variables({})['history'] # 构造返回的JSON return { "message": response, "conversation_summary": conversation_summary }
2. 前端修改:携带会话摘要发起请求
前端每次发聊天请求时,除了用户消息,还要带上之前保存的会话摘要,请求完成后保存新的摘要。
示例代码:
async function sendChat(userMsg) { // 从本地存储获取之前保存的会话摘要 const savedSummary = localStorage.getItem('chatConversationSummary') || ""; const res = await fetch('/your-backend-api', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ message: userMsg, conversation_summary: savedSummary }) }); const data = await res.json(); // 保存新的会话摘要到本地 localStorage.setItem('chatConversationSummary', data.conversation_summary); return data.message; }
3. 后端接收摘要:注入Memory复用上下文
后端接收到前端传来的会话摘要后,将其注入ConversationSummaryMemory,让Agent基于历史上下文处理新请求。
示例代码:
# 从请求体获取用户消息和会话摘要 user_input = request.json.get('message') received_summary = request.json.get('conversation_summary', "") # 初始化Memory时传入历史摘要 memory = ConversationSummaryMemory( llm=your_llm_instance, memory_key="history", input_key="input", initial_summary=received_summary # 关键:传入前端传回的历史摘要 ) # 绑定Memory到Agent agent = initialize_agent( tools=your_tools_list, llm=your_llm_instance, agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION, memory=memory, verbose=True ) # 运行Agent并返回包含新摘要的结果
注意事项
- 确保
ConversationSummaryMemory的memory_key和Agent配置中的一致,比如示例里的"history"。 - 多用户场景下,要给每个用户的会话摘要加唯一标识(如用户ID),避免上下文混淆。
- 前端存储摘要时,可根据需求选择
localStorage(持久化)或会话存储(临时保存)。
内容的提问来源于stack exchange,提问作者Mark Peace
相关产品推荐
相关产品推荐

