LLM上下文管理

1、客服agnet上下文太大怎么进行管理

在智能客服里,多轮对话的上下文处理,我不会简单地把所有历史消息都传给大模型,而是会做分层的 Context Management。

首先是短期上下文,也就是当前会话最近 N 轮对话。它主要保证当前对话的连续性,比如用户先问"iPhone 16 多少钱",下一轮说"这个还能退吗",模型需要通过最近的上下文知道"这个"指的是 iPhone 16。这里一般会按照 session_id 管理,并设置窗口大小或者 Token 上限。

如果对话轮次比较长,我不会单纯依赖 Summary。因为 Summary 本身也可能出现信息丢失或者事实漂移。所以历史对话可以通过 Summary 做压缩,Summary 主要保留用户需求、当前任务、已经确认的信息和未解决的问题。

对于比较重要的业务事实,比如当前商品、订单状态、售后状态、用户偏好等,我会单独通过 Memory Extractor 提取成结构化信息,而不是完全依赖 Summary。

这些结构化事实也不是简单地一直追加,而是会有时间、来源、置信度和状态。例如用户原来使用 NVR-A,后来明确说已经换成 NVR-C,那么 NVR-A 可以标记为历史状态,NVR-C 成为当前 active 状态。这样可以避免长期对话中出现多个互相冲突的信息。

对于事实冲突,我一般会优先相信用户明确表达的信息和业务系统的真实数据,再参考模型推断,同时结合时间和 confidence 做判断。

在真正进行 LLM 推理的时候,也不会把所有历史记忆全部放进 Context,而是根据当前 Query 做相关记忆召回,只把和当前问题相关的信息放进去。

另外,客服场景经常存在指代问题,所以我会增加 Query Rewrite 或指代消解。例如用户先问"iPhone 16 多少钱",然后问"这个还能退吗",系统可以结合历史上下文把它改写成"iPhone 16 还能退吗",然后再进入意图识别、RAG 或 Tool Calling。这样后面的检索和 Agent 执行会更准确。

所以一次请求最终给 LLM 的 Context,我一般会动态组装成:

System Prompt

  • 用户相关画像

  • 当前会话 Summary

  • 最近 N 轮对话

  • 当前 Query

  • 必要的业务状态

  • RAG 检索结果

  • Agent 当前 State

而不是把整个聊天记录全部塞进去。

所以我理解企业级多轮客服的核心不是保存尽可能多的历史,而是把不同类型的信息分开管理:

原始历史负责可追溯,

Summary 负责上下文压缩,

Structured Memory 负责保存关键事实,

Memory Retrieval 负责召回相关信息,

当前 State 负责保证任务连续性。

这样即使一个会话达到几百甚至上千轮,也不需要把所有历史全部发送给 LLM,同时能够尽量避免因为上下文过长、摘要丢失或者事实冲突导致模型理解错误。

最终目标就是:在控制 Token、延迟和成本的同时,让模型在当前这一轮拿到真正相关的信息。

复制代码
近 → 最近 N 轮
摘 → Summary 摘要
事 → 关键业务事实
召 → 相关记忆召回
改 → Query Rewrite
组 → 动态 Context 组装
相关推荐
志尊宝3 小时前
Vue3 零基础每日笔记(010):watchEffect——用到谁就自动听谁的“懒人侦听器“
前端·vue.js·笔记
陈年老古董4 小时前
Python模拟MapReduce分治思想 | 从单文件统计到大文件拆分聚合 学习笔记
开发语言·hadoop·笔记·python·学习
snow@li4 小时前
服务器运维:Node.js 安装笔记(Alibaba Cloud Linux 4)
笔记
江湖人称菠萝包4 小时前
【Windows】《深入浅出Windows API程序设计:编程基础篇》笔记-Chapter9-对话框
windows·笔记
David猪大卫4 小时前
【C++修炼】异常
开发语言·c++·经验分享·笔记·学习·考研·面试
youm20034 小时前
【学习笔记】reids的数据类型
redis·笔记·学习
hanlin036 小时前
刷题笔记:力扣第84题-柱状图中最大的矩形
笔记·算法·leetcode
一米阳光866114 小时前
软考高级【信息系统项目管理师】高项重要考点(3)高级项目管理-下 助你顺利上岸!
笔记·职场发展·软考·信息系统项目管理师·高级职称
dianziyao_14 小时前
第 4.1 篇:让 Codex 理解你的双链——AI 辅助发现笔记间的关联
人工智能·笔记