长话短说: 我们开发了一个智能体用于理解包含百万字词的文档,虽然仅使用Qwen2模型的8k上下文,但效果超过RAG和长序列原生模型。我们还利用此智能体合成长上下文数据,用于训练长上下文的Qwen模型。
引言
近期,能够原生处理数百万字输入的大型语言模型(LLMs)成为了一种趋势。大部分工作集中在模型架构调整,如位置编码扩展或线性注意力机制等。然而,准备足够长度的微调数据作为讨论较少但同样重要的议题,却鲜少被提及。
我们采取以下方法准备数据:
- 利用一个_较弱_的8k上下文聊天模型构建一个相对_强大_的智能体,能够处理1M的上下文。
- 随后,使用该智能体合成微调数据,并应用自动化过滤确保数据质量。
- 最终,使用合成数据对预训练模型进行微调,得到一个_强大_的1M上下文聊天模型。
本博客主要聚焦于第一步,后续步骤的详情将在未来几周或几个月内揭晓。
构建智能体
我们构建的智能体包含三个复杂度级别,每一层都建立在前一层的基础上。
级别一:检索
处理100万字上下文的一种朴素方法是简单采用增强检索生成(RAG)。 RAG将上下文分割成较短的块,每块不超过512个字,然后仅保留最相关的块在8k字的上下文中。 挑战在于如何精准定位最相关的块。经过多次尝试,我们提出了一种基于关键词的解决方案:
- 步骤1:指导聊天模型将用户查询中的指令信息与非指令信息分开。例如,将用户查询
"回答时请用2000字详尽阐述,我的问题是,自行车是什么时候发明的?请用英文回复。"
转化为{"信息": ["自行车是什么时候发明的"], "指令": ["回答时用2000字", "尽量详尽", "用英文回复"]}
。 - 步骤2:要求聊天模