用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模板、全代码注释,直接复制即可运行。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐