第 05 课记忆与流式传输配套代码仓库https://gitee.com/wang-zeyong111/lang-chain-lecture本课定位第 05 课关注交互体验。一个能用的 LLM 应用通常不仅要能回答还要能记住当前会话并在任务较慢时持续给用户反馈。记忆解决上下文连续性流式传输解决等待体验和可观察性。学习目标理解短期记忆的本质。使用 thread_id 隔离不同会话。理解 checkpointer 的作用。掌握流式传输的常见模式。学会控制上下文长度。一、记忆不是模型永久记住很多初学者会误以为“模型记住了用户”。实际情况是模型每次调用都是基于当前输入上下文生成结果。所谓记忆是应用把之前的重要消息重新传给模型。短期记忆通常保存用户之前说过的话模型之前的回答工具调用结果当前任务状态用户偏好。二、线程级记忆LangChain v1 中Agent 的短期记忆通常通过 checkpointer 管理并用thread_id区分会话。同一个用户可以有多个线程thread_idsupport-ticket-1001;thread_idsupport-ticket-1002;thread_idstudent-001-langchain;不同线程的消息应该隔离避免 A 用户看到 B 用户的上下文。三、checkpointer 的作用checkpointer 负责保存和恢复 Agent 状态。开发阶段可以用fromlanggraph.checkpoint.memoryimportInMemorySaver生产阶段应使用数据库型 checkpointer例如 Postgres。原因进程重启后内存会丢失多实例部署需要共享状态需要审计和回放需要长期保存关键会话。四、短期记忆的风险记忆不是越多越好。长历史会带来token 成本增加响应变慢模型被旧信息干扰命中上下文窗口限制隐私和合规风险。因此需要上下文管理策略。五、上下文裁剪策略常见策略只保留最近 N 轮保留系统消息和最近消息把旧对话总结成摘要删除无关工具结果对长文档只保留引用 ID根据任务动态选择相关历史。简单聊天可以先用“最近 N 条消息”。复杂任务再引入摘要记忆和长期记忆。六、流式传输的价值LLM 应用常常有延迟。用户看着空白页面等待 10 秒体验很差。流式传输可以逐步显示模型生成文本显示 Agent 正在调用哪个工具显示检索进度显示自定义状态方便开发者调试。七、常见 stream modeupdates用于观察 Agent 每个步骤。例如模型节点输出工具调用工具节点返回结果模型节点输出最终答案。适合调试 Agent 进度也适合前端展示“正在检索”“正在计算”。messages用于流式输出模型消息或 token。适合聊天 UI 逐字显示。custom用于业务自定义事件。例如已检索 3 个文档正在调用订单系统已完成 70%。八、记忆与流式的组合真实聊天应用通常同时需要用户打开同一个会话时能恢复上下文模型回答时逐步输出Agent 调工具时展示进度工具失败时给友好提示会话结束后保存最终状态。这时你需要把 checkpointer、thread_id 和 stream 一起设计。九、常见坑忘记传thread_id导致记忆无法正确隔离。使用内存 checkpointer 上生产重启就丢状态。历史消息无限增长成本和效果同时变差。流式输出只展示 token不展示 Agent 步骤用户不知道系统在做什么。工具结果太长污染后续上下文。十、自测清单我能解释短期记忆为什么需要应用层保存。我知道thread_id的作用。我知道 checkpointer 在开发和生产中的不同选择。我能说出updates和messages两种流式模式的区别。我知道至少三种控制上下文长度的方法。十一、课后练习用两个 thread_id 模拟两个学生一个喜欢类比一个喜欢代码。对同一个问题分别调用 Agent观察是否保留各自偏好。写一个trim_messages函数只保留最近 6 条消息。如果有真实模型使用stream_modeupdates观察工具调用过程。
第 05 课:记忆与流式传输
发布时间:2026/7/9 4:18:06
第 05 课记忆与流式传输配套代码仓库https://gitee.com/wang-zeyong111/lang-chain-lecture本课定位第 05 课关注交互体验。一个能用的 LLM 应用通常不仅要能回答还要能记住当前会话并在任务较慢时持续给用户反馈。记忆解决上下文连续性流式传输解决等待体验和可观察性。学习目标理解短期记忆的本质。使用 thread_id 隔离不同会话。理解 checkpointer 的作用。掌握流式传输的常见模式。学会控制上下文长度。一、记忆不是模型永久记住很多初学者会误以为“模型记住了用户”。实际情况是模型每次调用都是基于当前输入上下文生成结果。所谓记忆是应用把之前的重要消息重新传给模型。短期记忆通常保存用户之前说过的话模型之前的回答工具调用结果当前任务状态用户偏好。二、线程级记忆LangChain v1 中Agent 的短期记忆通常通过 checkpointer 管理并用thread_id区分会话。同一个用户可以有多个线程thread_idsupport-ticket-1001;thread_idsupport-ticket-1002;thread_idstudent-001-langchain;不同线程的消息应该隔离避免 A 用户看到 B 用户的上下文。三、checkpointer 的作用checkpointer 负责保存和恢复 Agent 状态。开发阶段可以用fromlanggraph.checkpoint.memoryimportInMemorySaver生产阶段应使用数据库型 checkpointer例如 Postgres。原因进程重启后内存会丢失多实例部署需要共享状态需要审计和回放需要长期保存关键会话。四、短期记忆的风险记忆不是越多越好。长历史会带来token 成本增加响应变慢模型被旧信息干扰命中上下文窗口限制隐私和合规风险。因此需要上下文管理策略。五、上下文裁剪策略常见策略只保留最近 N 轮保留系统消息和最近消息把旧对话总结成摘要删除无关工具结果对长文档只保留引用 ID根据任务动态选择相关历史。简单聊天可以先用“最近 N 条消息”。复杂任务再引入摘要记忆和长期记忆。六、流式传输的价值LLM 应用常常有延迟。用户看着空白页面等待 10 秒体验很差。流式传输可以逐步显示模型生成文本显示 Agent 正在调用哪个工具显示检索进度显示自定义状态方便开发者调试。七、常见 stream modeupdates用于观察 Agent 每个步骤。例如模型节点输出工具调用工具节点返回结果模型节点输出最终答案。适合调试 Agent 进度也适合前端展示“正在检索”“正在计算”。messages用于流式输出模型消息或 token。适合聊天 UI 逐字显示。custom用于业务自定义事件。例如已检索 3 个文档正在调用订单系统已完成 70%。八、记忆与流式的组合真实聊天应用通常同时需要用户打开同一个会话时能恢复上下文模型回答时逐步输出Agent 调工具时展示进度工具失败时给友好提示会话结束后保存最终状态。这时你需要把 checkpointer、thread_id 和 stream 一起设计。九、常见坑忘记传thread_id导致记忆无法正确隔离。使用内存 checkpointer 上生产重启就丢状态。历史消息无限增长成本和效果同时变差。流式输出只展示 token不展示 Agent 步骤用户不知道系统在做什么。工具结果太长污染后续上下文。十、自测清单我能解释短期记忆为什么需要应用层保存。我知道thread_id的作用。我知道 checkpointer 在开发和生产中的不同选择。我能说出updates和messages两种流式模式的区别。我知道至少三种控制上下文长度的方法。十一、课后练习用两个 thread_id 模拟两个学生一个喜欢类比一个喜欢代码。对同一个问题分别调用 Agent观察是否保留各自偏好。写一个trim_messages函数只保留最近 6 条消息。如果有真实模型使用stream_modeupdates观察工具调用过程。