Qwen-Agent:将大型语言模型从8k扩展到1M上下文
Qwen 引入了一种方法,使具有 8k 限制上下文窗口的大型语言模型(LLM)能够理解和处理包含多达 100 万令牌的文档。通过构建多层级代理架构,Qwen 可以合成高质量的长上下文训练数据,最终微调出原生的 1M 上下文聊天模型。
三层级代理架构
为克服短上下文窗口的限制,Qwen 开发了一个代理系统,复杂度在三个层级上递增,每个层级针对长上下文处理的特定失效模式。
第一级:基于关键词的检索增强生成(RAG)
第一级采用传统的 RAG 方法,将相关信息装入 8k 令牌窗口。为提升检索准确性,代理遵循三步流程:
- 查询分解:模型将用户指令(例如 “reply in English”)与实际信息查询(例如 “when were bicycles invented”)分离。
- 关键词提取:模型从信息查询中推断出多语言关键词。
- BM25 检索:代理使用 BM25 算法,根据这些关键词定位最相关的文本块。
Qwen 指出,基于向量的检索并未带来足够显著的改进,无法证明部署单独嵌入模型的额外复杂性是合理的。
第二级:逐块阅读
为防止出现“缺失针头”问题,即相关块与查询之间缺乏关键词重叠,第二级采用暴力并行处理策略:
- 相关性评估:每个 512 令牌的块并行处理。模型评估每个块,输出 “None” 或提取相关句子。
- 精细检索:将提取的相关句子作为新的搜索查询,通过 BM25 检索最相关的块。
- 最终生成:基于这些精细检索的块生成最终答案。
第三级:逐步推理
为处理多跳推理——即答案需要连接多个不同事实——第三级将第二级代理包装为 ReAct 风格的工具调用代理中的工具。
面对复杂问题时,第三级代理将问题分解为子问题。它迭代地查询第二级代理,将每个响应加入记忆,直至拥有足够信息提供最终答案。例如,要寻找与贝多芬第五交响曲同一世纪发明的车辆,代理首先确定交响曲的世纪,然后搜索在该世纪发明的车辆。
性能基准
Qwen 使用 7B 聊天模型(“32k-Model”)测试了该代理,并将其与标准 RAG 实现(“4k-RAG”)以及完整的代理策略(“4k-Agent”)进行比较。测试在 NeedleBench 和 LV-Eval 基准上进行,针对 256k 上下文。
关键发现:
- 短上下文:由于模型更擅长处理短上下文的多个部分,32k-Model 可能优于 4k-RAG。
- 长上下文:随着文档长度增加,4k-RAG 通常优于 32k-Model,表明 32k-Model 对长上下文的训练并不理想。
- 代理优势:4k-Agent 在所有基准测试中始终优于 32k-Model 和 4k-RAG。
此外,代理在 100 万令牌的“稻草堆中的针”压力测试中成功通过,尽管 Qwen 指出目前缺乏可靠的 1M 令牌真实应用的量化基准。
对模型训练的影响
该代理框架充当数据生成引擎。通过记录志愿者与代理的交互或使用代理对其他合成数据进行交叉验证,Qwen 能够创建高质量的长上下文微调数据集。此过程使得可以将代理级别的能力蒸馏到原生的 1M 上下文聊天模型中,实际上是使用“弱”的 8k 上下文模型来训练“强”的长上下文模型。