当前位置: 首页 > article >正文

基于 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 时历史消息是消息对象列表否则会导致格式错误。

相关文章:

基于 LangChain 实现带记忆功能的智能对话

在 AI 应用开发中,对话记忆是提升用户体验的核心能力之一 —— 让 AI 能够记住上下文、理解用户过往的对话内容,才能实现真正的 “多轮智能对话”。本文将基于 LangChain 框架,结合阿里云通义千问模型,手把手教你实现一个具备完整…...

手把手教你解决NCNN部署Yolov7时的NDK工具链问题(附完整配置流程)

深度解析NCNN部署YOLOv7时的NDK工具链兼容性问题与实战解决方案 在移动端AI模型部署领域,NCNN框架因其轻量高效的特点备受开发者青睐。然而,当我们将先进的YOLOv7目标检测模型部署到Android平台时,NDK工具链配置问题往往成为阻碍开发进度的&q…...

从零到一:基于 Agora Web SDK NG 构建互动直播场景

1. 为什么选择Agora Web SDK NG做互动直播? 第一次接触实时音视频开发时,我尝试用WebRTC原生API搭建直播系统,光是处理不同浏览器的编解码兼容性就掉光了头发。直到发现Agora Web SDK NG这个宝藏工具,才明白专业的事就该交给专业的…...

矩阵乘法-进阶题8

矩阵乘法 题目 问题描述给定一个N阶矩阵A&#xff0c;输出A的M次幂&#xff08;M是非负整数&#xff09;例如&#xff1a;A 1 23 4A的2次幂7 1015 22输入说明 第一行是一个正整数N、M&#xff08;1<N<30, 0<M<5&#xff09;&#xff0c;表示矩阵A的阶数和要求的幂数…...

Day6-MySQL-函数

函数是指一段可以直接被另一端程序调用的程序或代码字符串函数常用&#xff1a;SELECT 函数&#xff08;参数&#xff09;&#xff1b;数值函数常用&#xff1a;日期函数常用&#xff1a;流程函数流程函数可以在SQL语句中实现条件筛选&#xff0c;从而提高语句的效率...

AI绘画工具部署:Nunchaku FLUX.1-dev在ComfyUI中的分步安装指南

AI绘画工具部署&#xff1a;Nunchaku FLUX.1-dev在ComfyUI中的分步安装指南 1. 环境准备&#xff1a;确保系统满足要求 在开始安装前&#xff0c;请确认您的系统满足以下基础要求&#xff1a; 1.1 硬件要求 显卡&#xff1a;NVIDIA显卡&#xff08;支持CUDA&#xff09;&…...

【软考】中级信息安全工程师试题分析

​ 近几年软考中级信息安全工程师考题整体呈现&#xff1a;上午重理论广度、下午重实战落地&#xff1b;考点稳定、合规与实操双升、国密与等保2.0成核心。下面按科目、模块、趋势、备考重点完整分析。一、考试基本框架&#xff08;2023–2025&#xff09;- 上午&#xff1a;综…...

GB/T 28452-2012 三级应用系统测评

这是准备的培训材料。《GB/T 28452-2012 三级应用系统测评》培训调研问卷时间&#xff1a;45 分钟 总分&#xff1a;100 分一、 单项选择题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;根据 GB/T 28452-2012&#xff0c;应用软件系统安全子系统&#xff08;SSOASS&a…...

ROS2工具

坐标变换工具介绍查看TF树3D旋转可视化TF原理简单探究Python TF之手眼坐标变换...

Balena Etcher实战指南:从入门到精通的5大核心技能

Balena Etcher实战指南&#xff1a;从入门到精通的5大核心技能 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher 家庭实验室部署&#xff1a;解决镜像烧录的痛点问…...

旧金山活动丨聊聊 AI Native 社交,Conversational AI Meetup@SF,3 月 20 日周五

旧金山的开发者与创业者们&#xff0c;我们的 Conversational AI Meetup 又来啦&#xff01; 本期主题聚焦「AI 社交」——今年春节期间&#xff0c;AI 社交赛道迎来现象级爆发。Elys 凭借「AI 赛博分身」概念悄然走红——你的数字分身 24 小时在线&#xff0c;替你刷内容、筛…...

Echarts v5升级必看:如何快速解决normal和api.style弃用警告(附代码对比)

Echarts v5升级实战&#xff1a;全面解决API弃用警告与性能优化指南 如果你正在将Echarts项目从v4升级到v5版本&#xff0c;可能会遇到各种弃用警告的困扰。这些警告看似简单&#xff0c;但背后隐藏着Echarts团队对性能优化和API简化的深层考量。本文将带你深入理解这些变更&am…...

告别复杂公式输入:MathLive让Web数学编辑变得简单高效

告别复杂公式输入&#xff1a;MathLive让Web数学编辑变得简单高效 【免费下载链接】mathlive A web component for easy math input 项目地址: https://gitcode.com/gh_mirrors/ma/mathlive MathLive是一款基于Web Components技术构建的数学公式编辑工具&#xff0c;它将…...

开源项目吐槽大会:从“这代码写的什么鬼”到“我来提个PR”

# 开源项目吐槽大会&#xff1a;从“这代码写的什么鬼”到“我来提个PR”## 引言在开源社区&#xff0c;有一种特殊的文化现象——吐槽。它可能出现在GitHub Issue的评论区&#xff0c;可能出现在技术会议的圆桌上&#xff0c;也可能出现在深夜程序员的朋友圈里。有人视吐槽为负…...

蓝桥杯2025年第十六届省赛真题(更新中)

蓝桥杯2025年第十六届省赛真题 1.可分解的正整数 本题结论&#xff1a;任何大于1的正整数都可表示为至少三个连续整数的和 所以只需要判断AiAiAi是否大于1就可以 C语言 #include <stdio.h> int main(){int N;scanf("%d",&N);int x;int i;int count0;fo…...

InternLM2-Chat-1.8B数据库智能助手实战:MySQL查询优化与自然语言交互

InternLM2-Chat-1.8B数据库智能助手实战&#xff1a;MySQL查询优化与自然语言交互 1. 引言&#xff1a;当数据库遇到自然语言 想象一下这个场景&#xff1a;你是一个数据分析师&#xff0c;面对着一堆业务数据&#xff0c;老板突然在群里问&#xff1a;“上个月华东区销售额最…...

Z-Image-Turbo-辉夜巫女应用场景:独立游戏开发——NPC角色原画快速迭代方案

Z-Image-Turbo-辉夜巫女应用场景&#xff1a;独立游戏开发——NPC角色原画快速迭代方案 1. 引言&#xff1a;游戏开发中的角色设计挑战 在独立游戏开发过程中&#xff0c;NPC角色原画设计往往是最耗费时间和资源的环节之一。传统工作流程需要经历概念设计、草图绘制、细节完善…...

函数式编程范式(二)

函数式编程范式&#xff08;二&#xff09; 纯函数 什么是纯函数&#xff1f; 函数式编程中的函数就是纯函数。 具体特征就是&#xff0c;相同的输入永远会得到相同的输出&#xff0c;而且没有任何可观察的副作用。 纯函数就类似于数学中函数&#xff08;用来描述输入与输出之间…...

Facebook游戏开发必备:用Graph API获取用户数据与好友列表的实战技巧

Facebook游戏开发进阶&#xff1a;Graph API数据获取与权限管理实战解析 在社交游戏开发中&#xff0c;Facebook平台的数据接入能力直接决定了用户体验的丰富程度。许多开发者虽然完成了基础SDK集成&#xff0c;却在处理用户画像构建、社交关系链同步等进阶功能时频频受阻。本文…...

代码随想录算法训练营第四十八天| 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

300. 最长递增子序列 思路&#xff1a;首先注意这里的递增不一定要连续&#xff0c;可以是隔了几个数字的递增。那么这道题设dp数组的含义比较有意思&#xff1a;dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度。当nums[i]大于nums[j]的时候&#xff0c;我们可以写…...

UE5实战:Alembic文件导入全攻略(含Maya导出避坑技巧)

UE5实战&#xff1a;Alembic文件导入全流程解析与性能优化指南 在影视级实时动画制作流程中&#xff0c;Alembic文件格式已成为跨软件协作的黄金标准。作为开源的几何体缓存交换格式&#xff0c;它能够将Maya中复杂的动态模拟完美迁移到UE5的实时渲染环境中。本文将深入解析从M…...

多场耦合优化-主题034-形状优化与尺寸优化

主题034&#xff1a;形状优化与尺寸优化 1. 引言 结构优化是现代工程设计中的核心技术&#xff0c;旨在通过系统化的方法寻找最优的结构形式&#xff0c;以满足特定的性能要求。结构优化通常分为三个层次&#xff1a;尺寸优化&#xff08;Sizing Optimization&#xff09;、形状…...

PLC设计毕业设计入门指南:从硬件选型到梯形图实战

作为一名自动化专业的过来人&#xff0c;我深知做PLC毕业设计时那种既兴奋又迷茫的感觉。面对一堆陌生的硬件型号和复杂的编程软件&#xff0c;很多同学第一步就卡住了——该选哪个牌子的PLC&#xff1f;I/O点怎么算&#xff1f;梯形图画出来总是不对劲&#xff0c;仿真通过了&…...

Sigil:开源EPUB编辑工具解决电子书制作核心痛点的全面方案

Sigil&#xff1a;开源EPUB编辑工具解决电子书制作核心痛点的全面方案 【免费下载链接】Sigil Sigil is a multi-platform EPUB ebook editor 项目地址: https://gitcode.com/gh_mirrors/si/Sigil 在数字化阅读日益普及的今天&#xff0c;电子书制作面临着格式标准化、编…...

如何解决Sublime Text乱码问题:编码转换工具完全指南

如何解决Sublime Text乱码问题&#xff1a;编码转换工具完全指南 【免费下载链接】ConvertToUTF8 A Sublime Text 2 & 3 plugin for editing and saving files encoded in GBK, BIG5, EUC-KR, EUC-JP, Shift_JIS, etc. 项目地址: https://gitcode.com/gh_mirrors/co/Conv…...

那些被Windows“藏起来”的功能:找回属于你的选择权

引言&#xff1a;你的电脑&#xff0c;谁说了算&#xff1f;你有没有发现&#xff0c;Windows这些年越来越“霸道”了&#xff1f;明明习惯任务栏在左侧&#xff0c;新系统却强行把它固定在底部中央&#xff1b;明明喜欢经典右键菜单&#xff0c;新版本非要折叠起来多按一次“显…...

3大突破如何重塑Web机器学习开发?Transformers.js移动端AI框架深度解析

3大突破如何重塑Web机器学习开发&#xff1f;Transformers.js移动端AI框架深度解析 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run &#x1f917; Transformers directly in your browser, with no need for a server! 项目地址: htt…...

从“不会写代码”到亲手上线产品:Makund 与 Madav 眼中的 AI 软件新范式

从“不会写代码”到亲手上线产品&#xff1a;Makund 与 Madav 眼中的 AI 软件新范式 开头摘要 在这场访谈中&#xff0c;Makund 与 Madav 围绕 Emergent 的产品演进、技术路线和用户变化&#xff0c;分享了他们对“非技术用户如何借助 AI 构建生产级软件”的判断。两人认为&…...

告别乱码困扰:ConvertToUTF8的高效编码转换完全指南

告别乱码困扰&#xff1a;ConvertToUTF8的高效编码转换完全指南 【免费下载链接】ConvertToUTF8 A Sublime Text 2 & 3 plugin for editing and saving files encoded in GBK, BIG5, EUC-KR, EUC-JP, Shift_JIS, etc. 项目地址: https://gitcode.com/gh_mirrors/co/Conve…...

生成PPT网站推荐|AI博主实测,程序员/职场人告别熬夜排版

一、PPT创作核心痛点分析&#xff08;精准戳中CSDN用户需求&#xff09;结合自身使用体验和身边程序员、职场人的反馈&#xff0c;目前大家在PPT创作中主要面临四大核心痛点&#xff0c;也是我们选择PPT生成网站的核心考量方向&#xff1a;1. 排版效率低&#xff1a;手动调整版…...