学习资料:7.1 从提示工程到上下文工程 - 从零开始学 Agent 上下文窗口管理(Context Window Management):核心概念、使用场景与实践说明 | Agent Wiki
上下文管理的内容
首先先明确一下上下文管理在做什么,以及上下文中都会有哪些内容。大语言模型的上下文是有限的,Agent不能把所有记忆,RAG检索到的东西都塞进去,会导致大语言模型输出的质量下降。喂给大语言模型的上下文中主要包含以下内容:1.System Prompt 2.User Input 3.对话记忆,也就是一轮轮的对话内容 4.RAG检索到的文档 5.工具调用结果 6.任务状态,还有一些别的,例如 Skill 和工具的描述.
上下文管理的方法
LLM 可能在实际工程中问题,如遗忘,重复,偏题。
大模型对上下文的敏感程度也不同,它对开头和结尾敏感,对中间则不敏感。
针对有限的上下文,我们需要对不同的部分规定限额。例如像下面这样。
上下文管理的具体手段
1.滑动窗口,最简单的方法,只保留最近N次对话。2.摘要压缩,当对话达到指定轮数时触发摘要压缩,将之前的历史压缩成要点 3.语义过滤,将当前用户输入和之前的历史做语义上的相似度匹配,挑选出最相关的N条放入。
面试题
一个客服 Agent 需要支持 100 轮以上的长对话,同时集成了 40 个工具。请设计窗口管理策略,说明如何处理对话历史膨胀和工具描述过载两个问题。
答案:对话历史膨胀的处理:设置滑动窗口,保留最近 5-10 轮的完整对话;超出窗口的历史按每 10 轮生成一次摘要,将摘要链条作为压缩历史保留;关键信息(如用户姓名、订单号、已确认的需求)提取到结构化的"会话状态"对象中,始终保留。
工具描述过载的处理:实施 Tool Loadout(动态工具加载),根据用户当前查询的意图分类,只加载相关的 5-10 个工具描述;研究显示,工具超过 30 个时模型的工具选择准确率会显著下降,动态加载可提升约 44% 的准确率。
预算分配建议:系统指令 10% + 会话状态 5% + 压缩历史摘要 10% + 最近对话 20% + 动态工具描述 15% + 知识检索 15% + 输出预留 25%