Sunday 的面试指南

Agent 上下文压缩:消息裁剪、自动摘要与 Context Compaction

《Agent 大模型 0 到 1 系统课》 · 程序员 Sunday

你正在阅读本节的免费试读。完整课程 ¥499,可在文末添加作者微信购买。

上一小节,咱们使用 Thread + Checkpointer 实现了短期记忆。

同一个 Thread(会话窗口) 第二次调用时,LangGraph 会先恢复之前保存的 State。

用户在这个基础上继续进行准问的时候,Agent 就可以从历史消息中找到对应的信息并返回了。

咱们来看个场景,就用咱们之前用过的售后场景就可以。

用户最开始告诉 Agent:

订单 A2048 是一台 3800 元的咖啡机,外壳破损。
我还没有上传破损照片,客服说超过 3000 元需要人工审核。
请只告诉我处理流程,不要替我提交退款。

后面,这个用户又聊了周末营业时间、电子发票,还补充了咖啡机签收 3 天、外包装仍然保留。

最后他问:

根据前面说过的情况,这笔退款要走自动流程还是人工审核?
现在还缺什么材料?不要替我提交。

想要回答最后这个问题,模型就需要历史消息了。

但是,大家想一下,他需要的是全部的历史消息吗?

肯定不是的

它真正需要的不是历史里的每一句话,而是:订单号、金额、破损情况、照片状态、审核规则和用户不允许自动提交退款的限制。

至于“周末几点营业”,对当前问题已经没有用了。

因此,如果咱们什么都不处理,一次调用的过程就是下面这样的:

Agent 上下文压缩:消息裁剪、自动摘要与 Context Compaction 配图 1

对话越长,messages 越长,模型每一轮需要重新处理的内容也越多。

但是,这里就会有一个问题,那就是:如果用户一直在这个窗口聊天,那是不是就意味着,聊天的信息会越来越多。

这样的话,就会带来三个问题:

  • 调用成本继续增加
  • 模型响应会变慢
  • 大量已经没用的旧消息还可能干扰当前判断

如果想要解决上面这几个问题的话,那就不能只依靠短期记忆,还得依靠长对话处理了。

LangChain 官方的 Short-term Memory 文档给出了几种长对话处理方式。这一节主要看两种:

  • 消息裁剪
  • 自动摘要

消息裁剪、自动摘要和 Context Compaction 分别是什么

一个一个来看

消息裁剪

消息裁剪,也就是 Trim Messages。

Agent 上下文压缩:消息裁剪、自动摘要与 Context Compaction 配图 2

简单来说就是:当历史消息太多时,只选择其中一部分交给模型。

最常见的就是只保留最近几条,大致是下面这样:

Agent 上下文压缩:消息裁剪、自动摘要与 Context Compaction 配图 3

简单粗暴

但是这样做的话,也会有问题。

那就是:如果订单号和退款金额出现在 M1,直接保留最后五条消息以后,前面

本节试读已结束

继续学习,解锁完整课程

购买《Agent 大模型 0 到 1 系统课》,
继续阅读本节剩余内容与后续课程。

扫码添加作者微信,备注「Agent 课程」

添加作者微信 · 购买完整课程

解锁完整课程 ¥499

《Agent 大模型 0 到 1 系统课》
扫码添加微信,备注「Agent 课程」,购买后由 Sunday 提供完整内容的学习方式。

扫码添加作者微信 LGD_Sunday,购买 499 元 Agent 课程

微信昵称:LGD_Sunday
手机上可长按保存二维码,再用微信扫一扫识别。

保存微信二维码