LangChain实战:给通义千问装记忆中枢,实现多轮连贯对话(附源码)
memory = ConversationBufferMemory(memory_key="history", chat_memory=chat_history, return_messages=True, human_prefix="用户", ai_prefix="助手")本次通过ConversationBufferMemory+FileChatMessageHistory,快速实现通义千问的多
用LangChain开发AI智能体时,常遇到AI无上下文记忆的问题,问完上句下句就接不上。本文教你用LangChain两个核心组件,给通义千问装上可持久化的记忆中枢,实现多轮连贯对话,文末附可直接运行的源码。
本次选用基础记忆+持久化记忆组合,兼顾轻量与实用,适配本地/单用户智能体场景,核心组件及各类记忆方案对比如下:
|
记忆类型 |
核心说明 |
LangChain实现组件 |
|
基础记忆 |
缓存会话上下文,响应快 |
ConversationBufferMemory |
|
持久化记忆 |
本地文件存记录,重启不丢 |
FileChatMessageHistory |
|
记忆管理 |
手动清空冗余记忆 |
调用clear()方法 |
|
适配优化 |
兼容大模型与提示模板 |
定制Prompt占位符 |
核心逻辑:用户提问+AI回答先存入内存缓冲区,同时写入本地JSON文件;新提问时,拼接历史上下文+新问题传给通义千问,生成关联回答后再存入记忆模块,形成闭环。
二、4步快速实现(适配通义千问)
沿用LangChain+通义千问基础环境,验证核心依赖并加载API密钥:
pip list | grep -E "langchain|dashscope|python-dotenv"
步骤1:导入核心组件
补充记忆相关模块导入,加载环境变量:
import os
from dotenv import load_dotenv
from langchain_community.llms import Tongyi
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder, HumanMessagePromptTemplate
from langchain.schema import SystemMessage
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory, FileChatMessageHistory
load_dotenv()
步骤2:初始化通义千问LLM
低随机性配置,保证回答精准,复用优化逻辑:
def init_optimized_tongyi_llm(temperature=0.3):
api_key = os.getenv("DASHSCOPE_API_KEY")
llm = Tongyi(model_name="qwen-plus", dashscope_api_key=api_key, temperature=temperature)
return llm
步骤3:初始化持久化记忆模块
核心配置,memory_key需与后续Prompt占位符一致,实现中文友好+本地持久化:
def init_tongyi_memory(persist_file="chat_history_tongyi.json"):
chat_history = FileChatMessageHistory(persist_file)
memory = ConversationBufferMemory(memory_key="history", chat_memory=chat_history, return_messages=True, human_prefix="用户", ai_prefix="助手")
return memory
步骤4:构建带记忆的对话链
融合提示工程,新增MessagesPlaceholder记忆占位符,让大模型读取上下文:
def build_conversation_chain_with_memory(llm, memory):
prompt = ChatPromptTemplate.from_messages([
SystemMessage(content="你是精通PS API的助手,需关联上下文回答,仅围绕PS API相关内容作答"),
MessagesPlaceholder(variable_name="history"),
HumanMessagePromptTemplate.from_template("{input}")
])
return ConversationChain(llm=llm, prompt=prompt, memory=memory, verbose=True)
三、落地可交互Demo
编写主函数,实现多轮对话+记忆持久化+手动清空,支持exit退出、clear清空记忆:
def main():
llm = init_optimized_tongyi_llm()
memory = init_tongyi_memory()
conversation = build_conversation_chain_with_memory(llm, memory)
print("=== LangChain通义千问(带记忆版)===\n输入'exit'退出|'clear'清空记忆")
while True:
user_input = input("你:")
if user_input.lower() == "exit":
print("助手:对话记录已保存,下次可继续聊~")
break
if user_input.lower() == "clear":
memory.clear()
print("助手:已清空所有记忆!")
continue
response = conversation.predict(input=user_input)
print(f"助手:{response}\n")
if __name__ == "__main__":
main()
1. 连贯记忆:问“什么是PS API”后追问“能改尺寸吗”,AI可关联上下文精准回答;
2. 持久化:退出重启程序,直接追问接口参数,AI仍能识别;
3. 清空生效:输入clear后,再问相同问题,AI无法识别上下文。
1. memory_key必须与Prompt中MessagesPlaceholder的variable_name完全一致;
2. 仅能将FileChatMessageHistory传给chat_memory参数,不可反向绑定;
3. 多用户场景需为每个用户分配独立持久化文件,避免记忆混淆。
本次通过ConversationBufferMemory+FileChatMessageHistory,快速实现通义千问的多轮对话记忆与本地持久化,方案与原有LLM、提示工程无缝兼容,满足实际交互需求。
下一期预告:接入PS API工具系统,让AI从“只会回答”升级为“能实际执行修图操作”的实用智能体!
领取方式:关注公众号【SLAM与AI智能体】,私信回复【LangChain记忆】,获取完整可运行源码+环境配置教程,含.env模板、全代码注释,直接复制即可运行。
更多推荐


所有评论(0)