基于 LangChain 实现带记忆功能的智能对话
在 AI 应用开发中对话记忆是提升用户体验的核心能力之一 —— 让 AI 能够记住上下文、理解用户过往的对话内容才能实现真正的 “多轮智能对话”。本文将基于 LangChain 框架结合阿里云通义千问模型手把手教你实现一个具备完整对话记忆功能的 AI 助手。一、技术原理与依赖库1.1核心依赖库说明LangChain一站式 LLM 应用开发框架提供了对话记忆、提示词模板、模型调用等开箱即用的工具是构建对话系统的核心。LangChain-OpenAILangChain 适配 OpenAI API 规范的模型调用模块可兼容阿里云通义千问通过兼容模式。OpenAI SDK基础的 API 调用工具本文中主要用于对比展示核心对话逻辑仍基于 LangChain 实现。1.2 对话记忆的核心逻辑对话记忆的本质是存储用户与 AI 的历史交互内容并在每次新对话时将历史内容传入模型让模型基于完整上下文生成回复。本文使用ConversationBufferMemory对话缓冲记忆它会按顺序存储所有对话内容是最基础且易理解的记忆组件。二、完整代码实现2.1初始化配置配置模型密钥、基础 URL适配阿里云通义千问并初始化模型和记忆组件from langchain.memory import ConversationBufferMemory from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_openai import ChatOpenAI # 1. 初始化ChatOpenAI模型适配通义千问 model ChatOpenAI( modelqwen3.5-plus, # 通义千问3.5版本 api_keysk-8a107f8b6d8a48b0a19bca255554484a, # 替换为你的API Key base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, # 阿里云兼容模式地址 temperature1.2, # 生成随机性值越大越灵活 max_tokens100 # 最大生成token数 ) # 2. 初始化对话记忆组件 # return_messagesTrue以消息对象列表形式存储推荐False则存储为字符串 memory ConversationBufferMemory(return_messagesTrue)2.2手动存储历史对话基础演示先手动存入两轮对话验证记忆组件的存储功能# 存储第一轮对话用户告知名字 memory.save_context( {input: 我的名字是陆天宇}, # 用户输入 {output: 你好陆天宇} # AI输出 ) # 存储第二轮对话用户告知所在学院 memory.save_context( {input: 我在兰智数模学院}, {output: 好的我记住了} ) # 查看已存储的历史对话 print(当前记忆内容, memory.load_memory_variables({}))2.4 构建带记忆的提示词模板提示词模板是连接历史记忆和新对话的关键通过MessagesPlaceholder预留历史消息位置# 构建提示词模板 prompt ChatPromptTemplate.from_messages( [ (system, 你是一个AI助手必须基于历史对话回答问题。), # 系统角色 MessagesPlaceholder(variable_namehistory), # 历史消息占位符 (human, {user_input}) # 新的用户输入占位符 ] )2.5 构建对话链并实现多轮交互将提示词模板与模型串联成 “对话链”实现带记忆的智能回复# 构建对话链提示词模板 → 模型 chain prompt | model # 第一轮交互询问名字验证记忆 user_input 你知道我的名字吗 # 加载历史记忆 history memory.load_memory_variables({})[history] # 调用模型生成回复 result chain.invoke({ user_input: user_input, history: history }) # 存储本轮对话到记忆中 memory.save_context({input: user_input}, {output: result.content}) print(fAI回复{result.content}) # 第二轮交互询问上一个问题验证上下文理解 user_input 根据对话历史告诉我我上一个问题问你的是什么请重复一遍 history memory.load_memory_variables({})[history] result chain.invoke({ user_input: user_input, history: history }) print(fAI回复{result.content})核心代码解析ConversationBufferMemoryload_memory_variables({})加载所有历史对话返回字典key 为 history。save_context(inputs, outputs)存储单轮对话inputs 是用户输入字典outputs 是 AI 输出字典。MessagesPlaceholder必须与记忆组件的输出格式匹配return_messagesTrue 时历史消息是消息对象列表否则会导致格式错误。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2417766.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!