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 组装
相关推荐
HRBorderInsight2 小时前
马来西亚人均收入一个月多少钱,个人薪资和家庭收入要分开看
经验分享·笔记
又見山3 小时前
本地 Markdown 与数据主权:你的笔记到底属于谁
笔记·obsidian
撩得Android一次心动4 小时前
Jetpack Compose 知识点整理2【个人用】
android·笔记·学习·kotlin·compose
cao23335 小时前
关于 x1 y1 等变量名冲突的指正(校对版)
笔记
Demons_kirit6 小时前
CTFHub 信息泄露通关笔记:Git泄露 Log - 教程
笔记·git·网络安全
xhyu617 小时前
【学习笔记】图像质量评估方法 (5.生成图像是否符合用户要求)
笔记·学习·计算机视觉
2601_961146207 小时前
实验室用等离子表面处理设备处理新能源汽车塑料件的一点记录
笔记·汽车·设备
知产xiao_xin8 小时前
专利主体及权利归属
经验分享·笔记·知识产权
学电子她就能回来吗8 小时前
LeetCode Hot 100|普通数组专题学习笔记(零基础版)
笔记·算法·leetcode
2601_965384268 小时前
从微生态与流体力学视角看:“口水臭”的系统级成因与清洁边界
经验分享·笔记