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

第 05 课:记忆与流式传输

第 05 课:记忆与流式传输

配套代码仓库:https://gitee.com/wang-zeyong111/lang-chain-lecture

本课定位

第 05 课关注交互体验。一个能用的 LLM 应用,通常不仅要能回答,还要能记住当前会话,并在任务较慢时持续给用户反馈。记忆解决上下文连续性,流式传输解决等待体验和可观察性。

学习目标

  • 理解短期记忆的本质。
  • 使用 thread_id 隔离不同会话。
  • 理解 checkpointer 的作用。
  • 掌握流式传输的常见模式。
  • 学会控制上下文长度。

一、记忆不是模型永久记住

很多初学者会误以为“模型记住了用户”。实际情况是:模型每次调用都是基于当前输入上下文生成结果。所谓记忆,是应用把之前的重要消息重新传给模型。

短期记忆通常保存:

  • 用户之前说过的话;
  • 模型之前的回答;
  • 工具调用结果;
  • 当前任务状态;
  • 用户偏好。

二、线程级记忆

LangChain v1 中,Agent 的短期记忆通常通过 checkpointer 管理,并用thread_id区分会话。

同一个用户可以有多个线程:

  • thread_id="support-ticket-1001";
  • thread_id="support-ticket-1002";
  • thread_id="student-001-langchain";

不同线程的消息应该隔离,避免 A 用户看到 B 用户的上下文。

三、checkpointer 的作用

checkpointer 负责保存和恢复 Agent 状态。

开发阶段可以用:

fromlanggraph.checkpoint.memoryimportInMemorySaver

生产阶段应使用数据库型 checkpointer,例如 Postgres。原因:

  • 进程重启后内存会丢失;
  • 多实例部署需要共享状态;
  • 需要审计和回放;
  • 需要长期保存关键会话。

四、短期记忆的风险

记忆不是越多越好。长历史会带来:

  • token 成本增加;
  • 响应变慢;
  • 模型被旧信息干扰;
  • 命中上下文窗口限制;
  • 隐私和合规风险。

因此需要上下文管理策略。

五、上下文裁剪策略

常见策略:

  1. 只保留最近 N 轮;
  2. 保留系统消息和最近消息;
  3. 把旧对话总结成摘要;
  4. 删除无关工具结果;
  5. 对长文档只保留引用 ID;
  6. 根据任务动态选择相关历史。

简单聊天可以先用“最近 N 条消息”。复杂任务再引入摘要记忆和长期记忆。

六、流式传输的价值

LLM 应用常常有延迟。用户看着空白页面等待 10 秒,体验很差。流式传输可以:

  • 逐步显示模型生成文本;
  • 显示 Agent 正在调用哪个工具;
  • 显示检索进度;
  • 显示自定义状态;
  • 方便开发者调试。

七、常见 stream mode

updates

用于观察 Agent 每个步骤。例如:

  • 模型节点输出工具调用;
  • 工具节点返回结果;
  • 模型节点输出最终答案。

适合调试 Agent 进度,也适合前端展示“正在检索”“正在计算”。

messages

用于流式输出模型消息或 token。适合聊天 UI 逐字显示。

custom

用于业务自定义事件。例如:

  • 已检索 3 个文档;
  • 正在调用订单系统;
  • 已完成 70%。

八、记忆与流式的组合

真实聊天应用通常同时需要:

  • 用户打开同一个会话时能恢复上下文;
  • 模型回答时逐步输出;
  • Agent 调工具时展示进度;
  • 工具失败时给友好提示;
  • 会话结束后保存最终状态。

这时你需要把 checkpointer、thread_id 和 stream 一起设计。

九、常见坑

  1. 忘记传thread_id,导致记忆无法正确隔离。
  2. 使用内存 checkpointer 上生产,重启就丢状态。
  3. 历史消息无限增长,成本和效果同时变差。
  4. 流式输出只展示 token,不展示 Agent 步骤,用户不知道系统在做什么。
  5. 工具结果太长,污染后续上下文。

十、自测清单

  • 我能解释短期记忆为什么需要应用层保存。
  • 我知道thread_id的作用。
  • 我知道 checkpointer 在开发和生产中的不同选择。
  • 我能说出updatesmessages两种流式模式的区别。
  • 我知道至少三种控制上下文长度的方法。

十一、课后练习

  1. 用两个 thread_id 模拟两个学生,一个喜欢类比,一个喜欢代码。
  2. 对同一个问题分别调用 Agent,观察是否保留各自偏好。
  3. 写一个trim_messages函数,只保留最近 6 条消息。
  4. 如果有真实模型,使用stream_mode="updates"观察工具调用过程。
http://www.jsqmd.com/news/1152058/

相关文章:

  • 【claude code实践】让 Claude Code 分析依赖:理解项目中的关键包与调用链
  • SEGGER RTT 7.96 多通道配置实战:3通道独立输出日志、数据与命令
  • 本地部署开源物联网平台 ThingsBoard 并实现外部访问( Linux 版本)
  • 2026大理黄金回收白银回收铂金回收中检持证鉴定师铂金银饰高价回收门店联系方式推荐
  • AI催生新岗位“botsitting”,大学生入行正当时,未来或成常态岗位
  • TabDDPM 实战:在 15 个基准数据集上超越 GAN/VAE,ML 效率提升 5% 以上
  • 急购必看!国产拉链拉力机选型三大误区别再犯
  • AI工具Codex实战:外贸客户开发自动化,电梯行业精准获客85家
  • 【claude code实践】用 Claude Code 阅读陌生代码库:从入口文件到核心流程
  • 地平线开发岗面试题目
  • 为什么顶尖Angular团队已停用手写Component?Cursor AI生成代码通过SonarQube 98.2%质量阈值,你还在等什么?
  • Cursor AI生成的Angular组件如何通过NgRx状态流校验?一线架构师亲测的5层验证协议首次公开
  • 2026最新:适合内容创作者的5款免费实用B站UP主视频总结工具
  • 腾讯 Hy3 发布:阶段性成果初现,离终局答案还有多远?
  • 橡果教育整理发布《注塑模具技术要求》指导手册,陈工深度解读:一套好的模具,从设计到交付需要把控哪些技术细节?
  • NSK SFT8016-5 超重载管循环滚珠丝杠详析
  • CoT效果提升300%的关键变量,深度解析温度值、分解粒度与回溯深度的协同机制
  • 字节EdgeBench评测项目:揭示Agent学习规律,推动AI评测范式跨越
  • 3类气敏传感器对比:半导体式(MQ-4)、催化燃烧式、红外式原理与选型指南
  • Stable Diffusion电商AB测试实战:同一商品图点击率提升27.4%的关键控制变量(附ControlNet光照一致性校准方案)
  • FP-Tree算法内存优化:3个技巧应对千万级事务数据挖掘
  • WT2606Ax离在线语音识别芯片:35国语言200+方言方案设计
  • 浏览器插件安全与隐私分析:以摸鱼王为例的5项本地存储检查
  • 紧急预警:当前93%的Few-shot提示词存在隐式偏见泄漏!立即启用这6个可解释性审计检查点
  • PE文件结构解析实战:3种节表注入技术对比与手动实现
  • 影刀RPA Excel操作的十大翻车现场
  • Codex保姆级攻略:从模型认知到实战应用
  • 鸿蒙物理 108 篇 第七十八篇 时空结界隔离机制
  • 2026年选对免熏蒸托盘厂家,记住这三点不踩坑
  • PHP反序列化漏洞:从CTF赛题到真实漏洞的3种利用链构造