窗口里该留什么
大约 2 分钟
窗口里该留什么
为什么不能把窗口当无限内存?
窗口是一次采样能看见的 token 集合,不是数据库。Transformer 要在这些 token 之间建立注意力,长度上去之后,建模被摊薄,延迟和费用一起涨。位置编码可以外推到比训练时更长的序列,但位置精度会差。
所以窗口要当成有边际收益的预算:多一个 token,就要值得占用这一次的注意力。
什么是上下文腐蚀?
上下文变长以后,模型从里面准确找回信息的能力会下降。这不是某一家模型的 bug,针堆找针一类测试里普遍出现。退化多半是斜坡,不是到某个整数突然归零。
面试不要答「换一个 1M 上下文的模型就行」。长窗口减轻截断,不取消筛选。该记住的状态放在模型外面,窗口里只放这一步要看的材料。
窗口里高信号的部分有哪些?
有效上下文追求的是少而密,不是短。通常就这三块:
- 系统提示:写清行为和边界。两头都错,一头写成脆弱的 if-else,一头只剩空泛目标。用固定分区把背景、指令、工具和输出格式分开,保留最小但足够的信息。
- 工具定义:职责单一、重叠少、参数无歧义、失败也有明确返回。人自己都说不清该用哪个工具时,模型也不会选对。
- 例子:少量典型例子,演示期望行为。例子比再写一段原则更有用,但不要把所有边界都塞进例子。
当前目标、最近观察、还没完成的约束,优先级高于旧聊天。
什么内容应该留在窗口外面?
完整历史、原始工具输出、文档库、日志和文件。这些用检索、笔记或对象存储留着,用到再取回一段。
同一轮里已经过时的搜索结果、重复的报错、与当前子任务无关的角色设定,都该先出窗口。系统规则、用户明确否定过的约束、还没做完的副作用,不能跟着旧消息一起被摘要掉。