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

007、记忆(Memory)机制:让AI拥有对话上下文的能力

007、记忆Memory机制让AI拥有对话上下文的能力昨天深夜调试一个对话机器人用户问“今天的天气怎么样”系统返回了天气信息接着用户又问“那明天呢”结果机器人直接懵了“您想问什么明天的情况”——典型的失忆现场。这种问题在早期AI应用中太常见了每次对话都是全新的开始上下文完全丢失。今天我们就来彻底解决这个问题聊聊LangChain的记忆机制。记忆不是缓存是状态管理很多人第一次接触记忆机制会简单理解为“把之前的对话存起来”。这种理解会踩坑。记忆机制本质上是对话状态的管理需要决定记住什么、怎么记、记多久、怎么用。LangChain提供了几种典型的记忆模式每种对应不同的应用场景。最基本的记忆类型是ConversationBufferMemory它像个记事本原封不动记录所有历史对话fromlangchain.memoryimportConversationBufferMemory memoryConversationBufferMemory()# 简单粗暴全记下来# 但对话长了之后token数爆炸成本和控制都是问题实际生产环境我很少直接用这个除非对话特别短。更常用的是ConversationBufferWindowMemory只保留最近几轮对话fromlangchain.memoryimportConversationBufferWindowMemory memoryConversationBufferWindowMemory(k3)# 只记住最近3轮# 这里有个坑k指的是交互轮数一轮包含用户输入和AI回复# 实际token数可能比你想象的多智能记忆只记住重要的对于长对话场景我们需要更智能的记忆方式。ConversationSummaryMemory会自动生成对话摘要fromlangchain.memoryimportConversationSummaryMemoryfromlangchain.llmsimportOpenAI memoryConversationSummaryMemory(llmOpenAI(temperature0))# 它会用LLM提取对话要点# 注意每次生成摘要都有API调用成本# 别在频繁调用的场景滥用这个我做过一个客服系统用摘要记忆把两小时对话压缩成一段关键信息效果不错。但要注意摘要的“信息衰减”——有些细节丢了就找不回来了。更精细的控制可以用ConversationEntityMemory它专门识别和跟踪对话中的实体人名、地点、产品名等fromlangchain.memoryimportConversationEntityMemory memoryConversationEntityMemory(llmOpenAI(temperature0))# 它会提取实体并维护状态# 比如用户说“我喜欢苹果”后面提到“它很甜”系统知道“它”指苹果# 实体识别依赖LLM能力准确率需要验证记忆的存储与检索记忆怎么存、怎么取直接影响系统性能。LangChain支持多种存储后端# Redis存储适合分布式部署fromlangchain.memoryimportRedisChatMessageHistory historyRedisChatMessageHistory(session_iduser123,urlredis://localhost:6379)# 或者用PostgreSQLfromlangchain.memoryimportPostgresChatMessageHistory# 生产环境建议用数据库方便持久化和分析我遇到过的一个实际问题是记忆存储的会话ID管理。如果用户在不同设备登录如何合并对话历史这里需要业务层设计会话映射逻辑LangChain只提供存储抽象。链与记忆的集成记忆要生效必须正确集成到链中。常见的错误是创建了memory对象但没传给链# 错误示范memory没接入链chainLLMChain(llmllm,promptprompt)# 这样memory根本不会工作# 正确做法chainConversationChain(llmllm,memorymemory,promptprompt)在自定义链中需要手动处理记忆的输入输出classCustomChain(Chain):memory:BaseMemorydef_call(self,inputs):# 获取历史记录historyself.memory.load_memory_variables({})# 合并到当前输入full_input{**inputs,**history}# 处理逻辑...resultdo_something(full_input)# 保存当前交互self.memory.save_context(inputs,{output:result})returnresult多轮对话的调试技巧调试记忆问题最头疼的是“状态不对但不知道为啥”。我常用的调试方法直接打印memory变量print(memory.chat_memory.messages)# 看原始消息print(memory.load_memory_variables({}))# 看处理后的记忆检查token使用情况特别是摘要记忆# 估算token消耗fromlangchain.schemaimportget_buffer_string messagesmemory.chat_memory.messages token_countlen(get_buffer_string(messages).split())模拟多轮对话测试边界情况# 测试长对话是否正常截断或摘要foriinrange(10):chain.predict(inputfMessage{i})print(fRound{i}:{len(memory.buffer)}chars in memory)生产环境的经验建议根据我部署多个对话系统的经验给出几点实用建议第一记忆策略要匹配业务场景。客服系统适合摘要记忆游戏NPC可能需要实体记忆而简单问答可能只需要窗口记忆。别盲目追求“最智能”的方案。第二注意记忆的隐私和安全。用户对话可能包含敏感信息记忆存储要加密清理策略要明确。GDPR要求下用户删除数据时要能清理对应记忆。第三记忆不是越长越好。我见过一个系统记住三个月前的对话结果AI总是引用过时信息。设置合理的记忆生命周期或者让用户控制记忆时长。第四测试记忆的泛化能力。在测试阶段模拟用户跳话题、指代不明、前后矛盾等情况看记忆系统是否健壮。特别是实体记忆要测试实体混淆的情况。第五监控记忆相关的成本。摘要记忆每次生成都调用LLM长时间对话成本可能超预期。做好使用量监控和限流。记忆机制让AI从“金鱼”变成“有记忆的助手”但实现上需要细致的设计和调试。好的记忆系统应该像优秀的助理记住该记的忘记该忘的在需要时准确回忆。这需要技术实现也需要对业务场景的深度理解。

相关文章:

007、记忆(Memory)机制:让AI拥有对话上下文的能力

007、记忆(Memory)机制:让AI拥有对话上下文的能力 昨天深夜调试一个对话机器人,用户问“今天的天气怎么样?”,系统返回了天气信息;接着用户又问“那明天呢?”,结果机器人…...

008、对话链实战:调试一个“失忆”的智能对话助手

008、对话链实战:调试一个“失忆”的智能对话助手 昨天在调试一个基于LangChain的客服原型时,遇到了一个典型问题:每次用户问“我刚才说了什么?”,助手都回答“我不知道您之前说了什么”。这暴露了对话链最核心的问题—…...

智能家居中枢:OpenClaw通过Qwen3.5-9B控制HomeKit设备

智能家居中枢:OpenClaw通过Qwen3.5-9B控制HomeKit设备 1. 为什么需要AI控制智能家居? 去年装修新房时,我安装了二十多个HomeKit设备。每天早晨需要对着手机喊"Siri打开窗帘",晚上又要手动设置"影院模式"。这…...

Linux I/O 演进史:从管道到零拷贝,一篇串起个服务端核心原语倍

前言 在使用 kubectl get $KIND -o yaml 查看 k8s 资源时,输出结果中包含大量由集群自动生成的元数据(如 managedFields、resourceVersion、uid 等)。这些信息在实际复用 yaml 清单时需要手动清理,增加了额外的工作量。 使用 kube…...

DHT温湿度传感器驱动库原理与工程实践

1. 项目概述servodht11是一个面向嵌入式 Arduino 生态的轻量级温湿度传感器驱动库,专为 DHT 系列数字传感器(DHT11、DHT22/AM2302、DHT21/AM2301、DHT33、DHT44)设计。尽管项目名称中包含servo字样,但根据其官方 README 文档及实际…...

跨平台文件同步:OpenClaw调用Qwen3-32B实现智能归档

跨平台文件同步:OpenClaw调用Qwen3-32B实现智能归档 1. 为什么需要智能文件同步工具 作为一个长期被数字资产混乱困扰的技术从业者,我电脑里的文件就像一座无人管理的图书馆。下载的论文、会议录音、代码片段、临时截图散落在十几个文件夹中&#xff0…...

技术实测|告别命令行!OpenClaw(小龙虾AI) 一键部署教程

前言 随着本地 AI 智能体快速普及,私有化部署、数据安全、低门槛落地已成为技术选型核心。OpenClaw 作为开源轻量化 AI 智能体,v2.6.1 版本在环境适配、服务稳定性、模型集成度上全面优化,无需编译、无需手动配置依赖,真正实现 W…...

计算机毕业设计:Python智慧水网监测与水位预测大屏 Flask框架 数据分析 可视化 大数据 AI 线性回归 河流数据 水位预测(建议收藏)✅

1、项目介绍 技术栈 采用 Python 语言开发,基于 Flask 框架搭建后端服务,使用 Vue 框架构建前端交互界面,MySQL 数据库进行数据存储,运用机器学习线性回归预测算法实现水位预测,结合 Echarts 可视化技术搭建数据大屏&a…...

OpenClaw小龙虾本地版一键部署教程|零配置开箱即用,内置 400 + 大模型前言

前言 在本地 AI 智能体快速普及的当下,OpenClaw(小龙虾) 凭借「纯本地运行、零代码部署、全场景自动化」的核心优势,成为 2026 年办公人群、技术爱好者首选的 AI 工具。相比旧版本,全新v2.6.1进一步优化了部署流程、兼…...

【EI复现】考虑分布式电源不确定性的配电网鲁棒动态重构附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…...

STM32智慧停车场系统开发实战

1. 项目概述这个智慧停车场管理系统项目基于STM32微控制器开发,主要解决传统停车场管理效率低下、人工成本高、用户体验差等问题。我在实际开发中发现,一套完整的智慧停车场系统需要整合硬件感知、数据处理、用户交互和远程管理四大模块,而ST…...

DDD难落地?就让AI干吧! - cleanddd-skills介绍儆

AI训练存储选型的演进路线 第一阶段:单机直连时代 早期的深度学习数据集较小,模型训练通常在单台服务器或单张GPU卡上完成。此时直接将数据存储在训练机器的本地NVMe SSD/HDD上。 其优势在于IO延迟最低,吞吐量极高,也就是“数据离…...

基于File-Based App开发MVP项目钨

Issue 概述 先来看看提交这个 Issue 的作者是为什么想到这个点子的,以及他初步的核心设计概念。?? 本 PR 实现了 Apache Gravitino 与 SeaTunnel 的集成,将其作为非关系型连接器的外部元数据服务。通过 Gravitino 的 REST API 自动获取表结构和元数据&…...

MySQL触发器可以修改当前行数据吗_MySQL触发器修改字段值

BEFORE触发器可安全修改NEW字段值,AFTER中修改无效;禁止在触发器内UPDATE本表以防递归;INSERT中不可依赖NEW.id做逻辑;赋值需注意类型、长度及约束。BEFORE 触发器里能直接改 NEW 字段值可以,而且这是唯一安全修改当前…...

贾子科学三层结构定律(TMM):终结波普尔骗局,重塑科学真理主权的终极架构

贾子科学三层结构定律(TMM):终结波普尔骗局,重塑科学真理主权的终极架构副标题: Truth–Model–Method Framework——从“方法僭越”到“真理回归”的科学划界革命摘要针对波普尔可证伪主义导致的真理虚无化与当代学术…...

Flutter 框架跨平台鸿蒙开发 - 亲子故事共创

亲子故事共创应用欢迎加入开源鸿蒙跨平台社区: https://openharmonycrossplatform.csdn.net 一、项目概述 运行效果图1.1 应用简介 亲子故事共创是一款亲子教育类应用,核心理念是"父母孩子一起创作专属故事书"。通过角色设定、剧情分支、插图生…...

AI全自动解析复杂工程图纸与防造假质检知识库实战

工程结构的物理坍塌,往往始于底层数据范式的崩塌。 在近年来的多起重大桥梁垮塌事故(如黄河某公路大桥局部坍塌事件)的事后调查中,一个非常残酷的“文档黑洞”反复暴露在调查报告中:工程图纸的版本错乱、施工材料的质…...

UMS3 Helper:ESP32-S3开发板硬件抽象库详解

1. UMS3 Helper 库概述UMS3 Helper 是为 Unexpected Maker 全系列 ESP32-S3 开发板量身定制的底层硬件抽象辅助库,覆盖 NanoS3、OMGS3、TinyS3、ProS3、FeatherS3 及 FeatherS3 Neo 六款主流型号。该库并非通用型驱动框架,而是深度耦合各板载外设物理布局…...

火电审计Agent,大模型+RAG降维打击专治台账乱象

假设有两家电厂合谋,通过虚增煤炭采购量、虚构发电量来套取国家补贴。这一案例揭示了一个深层次问题:造假已从简单的财务做账,升级为对底层DCS运行日志、皮带秤称重记录、化验室热量报告等全链条数据的系统性篡改。 传统的事后审计在这类系统…...

ELF与镜像文件格式解析及二进制工具链实践

1. 文件格式基础概念解析在软件开发与系统底层交互过程中,我们经常会遇到各种不同类型的二进制文件。这些文件虽然都以二进制形式存储,但各自具有完全不同的结构和用途。理解它们的区别对于程序编译、链接、调试以及系统级开发都至关重要。ELF&#xff0…...

实现ITPS与OTPS双突破!昆仑芯马阳:文心一言背后的国产算力“压榨”实战

大模型靠盲目价格战和粗放燃烧算力的时代已经结束,真正的出路不再是“更便宜的 Token”,而是“更精细的工程架构”。市场正在倒逼工程进步,迫使技术开发者从算力的“消耗者”转变为算力的“压榨者”。责编 | 梦依丹出品 | CSDN(ID…...

高明总裁班台工厂推荐

在企业办公环境中,总裁班台不仅是工作的工具,更是企业形象和领导者身份的象征。选择一家靠谱的总裁班台工厂至关重要。今天,就为大家推荐佛山市豪亿办公家具,一家专注于中高端办公家具的源头工厂,为你解决办公家具采购…...

当 AI 主宰写代码,MoonBit 嵌入「形式化验证」让 Bug 清零

前言AI 写代码越来越快,真正的问题却越来越尖锐:生成成本在下降,正确性却不会自动提升。代码能跑,不等于代码是对的;功能看起来完整,也不代表系统真的可靠。对于金融清算、操作系统内核、自动驾驶、航空航天…...

办公家具工厂

在企业运营中,办公家具的选择至关重要。它不仅影响着员工的工作效率和舒适度,还关乎企业的形象和品牌气场。然而,市面上的办公家具存在诸多痛点,让企业主们头疼不已。今天,就带大家了解一家能解决这些痛点的办公家具工…...

OpenClaw错误处理机制:千问3.5-35B-A3B-FP8任务失败排查

OpenClaw错误处理机制:千问3.5-35B-A3B-FP8任务失败排查 1. 为什么需要关注错误处理机制 上周我在本地部署了千问3.5-35B-A3B-FP8模型,准备用OpenClaw实现一个自动化内容处理流程。本以为配置好模型地址就能顺利运行,结果第一个任务就卡在了…...

你的终端神器之Oh My Zsh刨

1.安装环境准备 1.1.查看物理内存 [rootaiserver ~]# free -m 1.2.操作系统版本 [rootaiserver ~]# cat /etc/redhat-release 1.3.操作系统内存 [rootaiserver ~]# df -h /dev/shm/ 1.4.磁盘空间 [rootaiserver ~]# df -TH [rootaiserver ~]# df -h /tmp/ [rootaiserver ~]# d…...

嵌入式轻量HTTP客户端设计与物联网数据上报实践

1. 项目概述 HTTPClient-Xively 是一个面向嵌入式平台的轻量级 HTTP 客户端实现,专为 mbed OS 网络栈设计,核心目标是与 Xively 平台(现已被 Google Cloud IoT Core 收购并逐步停用,但其 REST API 设计范式仍具典型工程参考价值&a…...

cka-2026-etcd

kubeadm 配置的集群已迁移到新机器。它需要更改配置才能成功运行。Task修复在机器迁移过程中损坏的单节点集群。首先,确定损坏的集群组件,并调查导致其损坏的原因。注意:已停用的集群使用外部 etcd 服务器。接下来,修复所有损坏的…...

微软发布的《生成式人工智能初学者.NET 第二版》课程辰

本课概览 Microsoft Agent Framework (MAF) 提供了一套强大的 Workflow(工作流) 框架,用于编排和协调多个智能体(Agent)或处理组件的执行流程。 本课将以通俗易懂的方式,帮助你理解 MAF Workflow 的核心概念…...

嵌入式开发编码规范与最佳实践

1. 为什么嵌入式开发需要编码规范?在嵌入式系统开发中,代码质量直接影响产品的稳定性和可靠性。与通用软件开发不同,嵌入式系统往往运行在资源受限的环境中,且通常需要长时间不间断工作。我曾参与过一个工业控制项目,由…...