零基础学AI大模型之LLM存储优化:大量QA与长对话问题实战

零基础学AI大模型之LLM存储优化:大量QA与长对话问题实战
大家好,我是工藤学编程 🦉一个正在努力学习的小博主,期待你的关注
实战代码系列最新文章😉C++实现图书管理系统(Qt C++ GUI界面版)
SpringBoot实战系列🐷【SpringBoot实战系列】SpringBoot3.X 整合 MinIO 存储原生方案
分库分表分库分表之实战-sharding-JDBC分库分表执行流程原理剖析
消息队列深入浅出 RabbitMQ-RabbitMQ消息确认机制(ACK)
AI大模型零基础学AI大模型之LLM存储记忆功能之BaseChatMemory实战

前情摘要

1、零基础学AI大模型之读懂AI大模型
2、零基础学AI大模型之从0到1调用大模型API
3、零基础学AI大模型之SpringAI
4、零基础学AI大模型之AI大模型常见概念
5、零基础学AI大模型之大模型私有化部署全指南
6、零基础学AI大模型之AI大模型可视化界面
7、零基础学AI大模型之LangChain
8、零基础学AI大模型之LangChain六大核心模块与大模型IO交互链路
9、零基础学AI大模型之Prompt提示词工程
10、零基础学AI大模型之LangChain-PromptTemplate
11、零基础学AI大模型之ChatModel聊天模型与ChatPromptTemplate实战
12、零基础学AI大模型之LangChain链
13、零基础学AI大模型之Stream流式输出实战
14、零基础学AI大模型之LangChain Output Parser
15、零基础学AI大模型之解析器PydanticOutputParser
16、零基础学AI大模型之大模型的“幻觉”
17、零基础学AI大模型之RAG技术
18、零基础学AI大模型之RAG系统链路解析与Document Loaders多案例实战
19、零基础学AI大模型之LangChain PyPDFLoader实战与PDF图片提取全解析
20、零基础学AI大模型之LangChain WebBaseLoader与Docx2txtLoader实战
21、零基础学AI大模型之RAG系统链路构建:文档切割转换全解析
22、零基础学AI大模型之LangChain 文本分割器实战:CharacterTextSplitter 与 RecursiveCharacterTextSplitter 全解析
23、零基础学AI大模型之Embedding与LLM大模型对比全解析
24、零基础学AI大模型之LangChain Embedding框架全解析
25、零基础学AI大模型之嵌入模型性能优化
26、零基础学AI大模型之向量数据库介绍与技术选型思考
27、零基础学AI大模型之Milvus向量数据库全解析
28、零基础学AI大模型之Milvus核心:分区-分片-段结构全解+最佳实践
29、零基础学AI大模型之Milvus部署架构选型+Linux实战:Docker一键部署+WebUI使用
30、零基础学AI大模型之Milvus实战:Attu可视化安装+Python整合全案例
31、零基础学AI大模型之Milvus索引实战
32、零基础学AI大模型之Milvus DML实战
33、零基础学AI大模型之Milvus向量Search查询综合案例实战
33、零基础学AI大模型之新版LangChain向量数据库VectorStore设计全解析
34、零基础学AI大模型之相似度Search与MMR最大边界相关搜索实战
35、零基础学AI大模型之LangChain整合Milvus:新增与删除数据实战
36、零基础学AI大模型之LangChain+Milvus实战:相似性搜索与MMR多样化检索全解析
37、零基础学AI大模型之LangChain Retriever
38、零基础学AI大模型之MultiQueryRetriever多查询检索全解析
39、零基础学AI大模型之LangChain核心:Runnable接口底层实现
40、零基础学AI大模型之RunnablePassthrough
41、零基础学AI大模型之RunnableParallel
42、零基础学AI大模型之RunnableLambda
43、零基础学AI大模型之RunnableBranch
44、零基础学AI大模型之Agent智能体
45、零基础学AI大模型之LangChain Tool工具
46、零基础学AI大模型之LLM绑定Tool工具实战
47、零基础学AI大模型之LangChain Tool异常处理
48、零基础学AI大模型之CoT思维链和ReAct推理行动
49、零基础学AI大模型之Zero-Shot和Few-Shot
50、零基础学AI大模型之LangChain智能体执行引擎AgentExecutor
51、零基础学AI大模型之个人助理智能体之tool_calling_agent实战
52、零基础学AI大模型之旅游规划智能体之react_agent实战
53、零基础学AI大模型之LLM大模型存储记忆功能
54、零基础学AI大模型之LLM大模型存储记忆功能


本文章目录

零基础学AI大模型之LLM存储优化:大量QA与长对话问题实战

哈喽,各位小伙伴!我是工藤学编程🦉 最近有不少粉丝问我:“工藤,做智能助手时,用户聊得久了模型就‘失忆’,大量QA信息存不下怎么办?” 其实这也是我刚开始做AI大模型项目时踩过的坑——模型有Token限制,长对话会截断,全存历史又耗资源。今天就结合我的实战经验,聊聊怎么用LangChain的摘要存储解决这个问题,从面试考点到代码实战,一步步讲明白!

一、先搞懂面试常问:为什么会有“存储优化”需求?

在这里插入图片描述

我之前面试时,面试官就问过两个灵魂问题,正好戳中核心痛点,咱们先吃透这两个问题,后面实战就好理解了:

面试题1:传统对话系统每次交互独立,模型无法感知历史,怎么解?

在这里插入图片描述

答:用记忆模块(如LangChain的Memory)记录历史,但长对话会超Token,所以需要摘要存储——不存完整对话,只存关键信息摘要,既保连贯性又省Token。

面试题2:长对话超出模型Token能力,信息截断、性能下降,怎么解?

答:核心是“压缩历史”——用大模型生成对话摘要,后续交互只传摘要而非全量历史,搭配分布式存储(如MongoDB、Milvus),平衡连贯性、性能和资源消耗。

二、大模型存储的3大核心痛点

在这里插入图片描述

这些痛点真的很影响用户体验,咱们对号入座:

痛点类型具体表现后果
技术限制用户聊10轮就超4k Token限制早期QA信息丢失,回答驴唇不对马嘴
效率瓶颈全量存历史,检索一次要600ms+回复慢,用户吐槽“反应迟钝”
业务&合规风险存用户手机号、需求等敏感信息原文有数据泄露风险,质检溯源难

三、核心解决方案:摘要存储+LangChain实战

在这里插入图片描述

解决思路很简单:用ConversationSummaryMemory生成对话摘要,只存摘要不存全量历史。优势特别明显:

核心目标

通过摘要存储维护长期上下文,解决“Token不够用、资源消耗大、连贯性差”三大问题。

技术原理

就像我记笔记——不抄老师每句话,只记重点。模型也一样:用大模型(如通义千问)把对话生成摘要,后续交互只传摘要,相当于“带着笔记聊天”,而非“带着整本书聊天”。

优势

  1. 省Token:摘要比全量历史小80%,再也不担心超限制;
  2. 保连贯:摘要含关键信息,模型知道之前聊了啥;
  3. 易扩展:可存在MongoDB、Milvus,支持多用户、大数据量。

四、带摘要存储的对话系统

实战准备

先安装依赖:

pip install langchain langchain-openai langchain-core pymilvus # 按需装存储依赖

实战1:基础版——生成对话摘要

这是最基础的用法,我用来测试摘要效果,看看模型能不能抓关键信息:

from langchain.memory import ConversationSummaryMemory from langchain_openai import ChatOpenAI # 初始化大模型(工藤用的通义千问,大家替换自己的api_key) llm = ChatOpenAI( model_name="qwen-plus", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", api_key="你的api_key",# 工藤提示:别硬编码,放环境变量里更安全 temperature=0.7# 摘要不用太死板,0.7刚好)# 初始化摘要记忆(核心组件) memory = ConversationSummaryMemory(llm=llm)# 模拟我和用户的对话(工藤项目里的真实对话片段) memory.save_context({"input":"工藤,AI大模型怎么入门?"},{"output":"先学基础概念,再调用API,然后学LangChain、RAG,最后实战做项目"}) memory.save_context({"input":"有没有适合零基础的课程?"},{"output":"可以看我的零基础学AI大模型系列,从API调用讲到Agent实战"})# 取摘要——看看效果 summary = memory.load_memory_variables({})print("工藤项目实战:对话摘要")print(summary["history"])# 输出摘要,只存关键信息# 工藤运行结果:# 用户询问AI大模型零基础入门方法,助手建议先学基础概念、调用API、学LangChain和RAG,再实战;用户又问适合零基础的课程,助手推荐自己的零基础学AI大模型系列。

实战2:进阶版——带摘要存储的对话链

这是我现在项目里用的核心代码,用LCEL链式结构,支持多轮对话,自动更摘要,特别稳定:

from langchain.memory import ConversationSummaryMemory from langchain_openai import ChatOpenAI from langchain_core.runnables import RunnablePassthrough from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import ChatPromptTemplate # 1. 初始化大模型(和我之前的Agent项目用的一样) llm = ChatOpenAI( model_name="qwen-plus", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", api_key="你的api_key", temperature=0.7)# 2. 初始化摘要记忆(memory_key要和prompt里的变量名一致!) memory = ConversationSummaryMemory( llm=llm, memory_key="chat_history",# 工藤踩坑:这里和下面prompt的{chat_history}要同名 return_messages=True# 返回消息对象,更灵活)# 3. 定义prompt——必须包含摘要变量(chat_history) prompt = ChatPromptTemplate.from_messages([("system","你是工藤学编程的AI助手,基于对话摘要回答问题,语气亲切像聊天"),("human","对话摘要:{chat_history}\n用户现在问:{input}")])# 4. 构建LCEL链(工藤推荐用这个,比LLMChain灵活) chain =(# 注入输入和记忆摘要 RunnablePassthrough.assign( chat_history=lambda_: memory.load_memory_variables({})["chat_history"])| prompt # 格式化prompt| llm # 调用大模型| StrOutputParser()# 解析输出)# 5. 模拟用户多轮对话(工藤项目里的真实用户提问) user_inputs =["工藤,怎么用LangChain做记忆功能?","之前说的ConversationSummaryMemory,能存多少轮对话?","它和Milvus结合的话,怎么存摘要?"# 依赖上一轮的记忆]# 6. 运行对话(工藤重点注释:LCEL需要手动保存上下文!)for query in user_inputs:print(f"\n用户:{query}")# 调用链获取回复 response = chain.invoke({"input": query})print(f"工藤助手:{response}")# 手动保存上下文到记忆(LLMChain会自动存,LCEL要手动!) memory.save_context({"input": query},{"output": response})# 查看当前摘要(工藤调试时必看,确保摘要正确) current_summary = memory.load_memory_variables({})["chat_history"]print(f"当前对话摘要:{current_summary}")

工藤实战输出效果(真实运行结果)

用户:工藤,怎么用LangChain做记忆功能? 工藤助手:可以用LangChain的Memory模块,比如ConversationBufferMemory存完整历史,ConversationSummaryMemory存摘要,适合长对话... 当前对话摘要: 用户询问如何用LangChain做记忆功能,助手建议使用Memory模块,举例ConversationBufferMemory和ConversationSummaryMemory,后者适合长对话。 用户:之前说的ConversationSummaryMemory,能存多少轮对话? 工藤助手:它没有固定轮数限制,因为存的是摘要,不是全量对话,哪怕100轮,摘要也不会超太多Token... 当前对话摘要: 用户先问LangChain记忆功能做法,助手推荐Memory模块及两个子类;接着用户问ConversationSummaryMemory能存多少轮,助手称无固定限制,因存储的是摘要。 用户:它和Milvus结合的话,怎么存摘要? 工藤助手:可以把生成的摘要转成向量,用LangChain的VectorStoreRetrieverMemory,把摘要存在Milvus里,需要时检索相关摘要... 当前对话摘要: 用户问ConversationSummaryMemory与Milvus结合的存摘要方法,助手建议将摘要转向量,用VectorStoreRetrieverMemory存入Milvus,需用时检索。 

看!就算聊多轮,模型也不会“失忆”,摘要里全是关键信息,Token消耗特别少~

四、关键知识点:LCEL和LLMChain怎么选?

特性LCEL链LLMChain
记忆保存需手动调用memory.save_context()自动保存,不用手动写
链式灵活性高,可加路由、日志(我加了错误捕获)固定结构,灵活度低
调试&扩展可插中间件,适合复杂项目(如多工具调用)靠verbose=True调试,适合入门
工藤使用场景智能助手、Agent项目(复杂场景)简单对话demo(快速验证想法)

五、避坑指南

  1. 变量名要一致:memory_key(如"chat_history")必须和prompt里的变量名一样,不然会报“变量未定义”;
  2. 摘要模板可定制:想让摘要包含更多QA细节,可改prompt,比如加一句“摘要要包含用户问题和助手核心回答”;
  3. 敏感信息过滤:保存摘要前,用正则替换手机号、邮箱,避免合规风险;
  4. 存储扩展:量大时,把摘要存Milvus,用VectorStoreRetrieverMemory,检索更快(之前讲过Milvus实战,可回头看)。

总结

其实解决大量QA、长对话存储问题,核心就是“抓重点”——用ConversationSummaryMemory生成摘要,只存关键信息,再根据项目复杂度选LCEL或LLMChain。

有疑问欢迎在评论区交流,咱们下期再见!👋

Read more

实测有效!Playwright_Puppeteer模拟人工操作,攻克纯前端渲染页面(避坑全复盘)

实测有效!Playwright_Puppeteer模拟人工操作,攻克纯前端渲染页面(避坑全复盘)

前言:做爬虫开发、前端自动化测试的同学,肯定都有过这样的崩溃时刻——面对Vue3、React、Svelte开发的纯前端渲染页面(SPA),用requests抓回来全是空HTML;用Playwright/Puppeteer写个简单脚本,点击、滑动全是机械操作,跑不了3次就被网站识别为自动化工具,要么弹滑动验证码,要么直接封禁IP;好不容易绕开检测,又因为页面渲染时机没抓准,拿到的全是无效数据。 我在过往4个纯前端渲染页面抓取项目中(电商商品详情SPA、资讯平台滚动加载页面、短视频前端渲染列表、后台管理系统前端数据抓取),踩遍了Playwright和Puppeteer的所有坑:从机械滑动被检测、固定等待时间导致数据缺失,到浏览器指纹暴露、窗口大小异常被拦截,再到双工具选型踩坑,最终沉淀出一套“极致模拟人工操作”的高级实战方案,能稳定攻克90%以上的纯前端渲染页面。 不同于市面上泛泛而谈的AI化教程,本文全程无空洞理论,每一个技巧都经过真实项目实测,每一段代码都可直接复用,每一个避坑点都是我实打实栽过的跟头。重点讲解“如何让自动化操作无限贴近真人”,兼顾Playwright和Puppet

rk3588 MIPI采集 + OpenCV处理 + 硬件编码推流 + WebRTC低延迟播放 + 客户端保存视频

本人是第一次做摄像头推流相关的工作,一开始只是想简单做一个小工具。但是经过我几天的研究,发现网上的教程要么极其复杂,要么漏洞百出,导致我连最简单的推流都迟迟没做出来。 经过几天的极限折腾,我终于打通了 MIPI摄像头 -> 硬件ISP -> OpenCV(AI处理) -> 硬件H.264编码 -> 局域网WebRTC超低延迟推流与客户端录制 -> 客户端保存视频 的完整链路。今天把整套方案和踩过的深坑全盘托出,希望能帮大家少走弯路。 整体架构思路 主要功能使用python实现: 1. 画面采集:使用 GStreamer 直接对接底层驱动,利用 RK3588 的硬件 ISP 把 MIPI RAW 数据转成彩色的缩小画面。 2. opencv处理:OpenCV 拿到图片后,可以进行你想要的图像处理。 3.

Vibe Coding - UI UX Pro Max 驱动的现代前端 UI工作流

Vibe Coding - UI UX Pro Max 驱动的现代前端 UI工作流

文章目录 * 一、为什么需要一个“会设计的 AI 技能”? * 二、UI UX Pro Max 到底是什么? * 三、安装与集成:从 0 到 1 搭好环境 * 3.1 安装 uipro-cli * 3.2 在项目中初始化 UI UX Pro Max * 3.3 锁定与更新版本(团队协作建议) * 四、工作原理:一句话需求是怎么变成完整 UI 的? * 4.1 设计决策流程拆解 * 4.2 不同助手中的调用方式 * 五、实战一:用 React + Tailwind

在线政务服务中心_nrlwabo信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

在线政务服务中心_nrlwabo信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

摘要 随着信息技术的快速发展,政府服务逐渐向数字化、智能化转型。在线政务服务中心作为政府与公众之间的重要桥梁,其高效、便捷的服务模式成为提升政府效能和公众满意度的关键。传统的政务服务模式存在流程繁琐、信息不透明、效率低下等问题,难以满足现代社会的需求。因此,构建一个功能完善、操作简便的在线政务服务中心信息管理系统具有重要意义。该系统能够实现政务服务的线上化、标准化和自动化,为公众提供一站式服务,同时为政府部门的决策提供数据支持。关键词:在线政务服务中心、数字化转型、政务服务、信息管理系统、公众满意度。 本系统采用SpringBoot作为后端框架,结合Vue.js前端框架和MySQL数据库,实现了高效、稳定的政务服务管理平台。SpringBoot提供了快速开发的能力,简化了配置和部署流程;Vue.js实现了响应式的前端界面,提升了用户体验;MySQL作为关系型数据库,确保了数据的安全性和可靠性。系统功能包括用户管理、业务办理、信息查询、数据统计等模块,支持多角色权限控制,满足不同用户的需求。通过该系统,公众可以线上提交申请、查询进度,政府部门可以实时处理业务、分析数据,从而提升整体服