在自然语言处理的领域中,多轮对话系统是构建智能化交互应用的关键。无论是聊天机器人、虚拟助手,还是客户服务系统,能够保持连贯的对话并记住上下文信息是用户体验的核心。然而,大规模语言模型(如GPT等)的对话能力往往受限于其上下文窗口的长度,这就给实现超长多轮对话带来了挑战。想想很多思想的交流,都是通过不断地对话实现的。(这里抛出一个问题,对于双方对话可以很容易实现交互,那么对于三者及三者以上呢?现在有比较好的方法来实现嘛?)那么,如何在上下文长度有限的情况下实现超长多轮对话呢?这里将探讨大模型如何通过多种上下文管理技术来克服这一挑战,提供流畅、连贯的长时间对话体验。

首先为什么实现超长多轮对话有难度?

1. 上下文窗口的限制

大多数基于Transformer架构的语言模型有一个固定的上下文窗口限制,即模型可以处理的最大文本长度(通常以token为单位)。这个限制意味着,模型一次只能处理一定数量的文本,当对话超过这个限制时,早期的对话内容将被裁剪掉。因此,如何管理对话历史成为了一个关键问题。

1.1 什么是Token?

Token是模型处理语言的基本单元,可能是一个单词、部分单词,甚至是标点符号。每一轮对话中的所有单词都会被拆分为若干个token,当这些token数量超出模型的最大处理能力时,模型就无法直接记住所有对话内容。一般而言,对于英语文本,1个token大约是34个字符;而对于中文文本,则大约是1.51.8个汉字。

现有的一些解决方案有哪些?

大致可以总结为下述方法:

优点缺点
常用:拼接所有的历史对话,长度不够就进行截断简单直接,完整存储了历史对话记录,对历史对话的理解肯定是对全面的token消耗大,内容冗余,超过限制会损失信息
摘要:对历史对话记录总结记录相比直接记录历史对话减少了冗余内容,只抓关键点,大大增强了多轮对话能力摘要效果取决于模型,模型不好可能会大量丢失关键信息,且需要额外的token去总结摘要
存储增加记忆数据库,可以存储更多多轮对话的内容,在时间和容量上跨度很大需要构建外部记忆系统,并需要具备对应的检索能力
trunk & retrieval综合了上面方法的优点效果取决于检索能力,关键点把握不住会存在语义偏差

2. 实现超长多轮对话的技术策略

为了应对模型上下文窗口的限制,开发者可以使用以下几种技术策略来实现超长多轮对话。

2.1 截断历史记录

最直接的方式是截断对话历史记录。模型将根据上下文窗口的大小,保留最近几轮对话,而丢弃早期的内容。这种方法简单有效,但如果早期对话中的信息对后续交互至关重要,则可能会导致上下文信息丢失,影响对话的连贯性。

策略

  • 保留最近的对话轮次,以确保用户与模型的当前对话具有连续性。
  • 在必要时,通过询问用户或模型复述之前的关键点来重建上下文。

挑战:截断历史记录的主要缺点是,当早期对话包含重要信息时,信息丢失会影响后续对话的质量。

2.2 摘要生成(Summarization)

摘要技术是一种优化的解决方案。当对话内容变得过长时,模型可以通过生成一个摘要,将之前的对话压缩成一个短小的表示形式。这种方式不仅节省了上下文窗口的空间,还可以保留对话的核心信息。

实现方式

  • 模型在每隔几轮对话后生成一个总结,将之前的内容简化为几个关键点。
  • 在后续对话中,使用这些摘要代替完整的对话历史,从而保证上下文信息的持续性。

优点:通过摘要技术,模型可以保持对重要信息的“记忆”,而不会丢失有价值的上下文。

示例: 假设用户与模型讨论了一项复杂的项目,模型可以在每轮对话结束时生成一个简短的总结,例如:“你正在开发一个新项目,主要挑战是资金不足和技术团队扩展。”

2.3 记忆机制(Memory Mechanism)

高级对话系统可以通过“记忆机制”来实现更持久的上下文管理。虽然大多数基础模型没有“长期记忆”的概念,但在系统层面,可以实现一个外部的记忆系统。该系统在每次对话结束时保存关键信息,并在后续对话中根据需要将其重新引入上下文。

具体方式

  • 在每轮对话中,系统提取重要的用户偏好、意图、需求等,并存储到一个独立的数据库中。
  • 在后续对话中,系统可以根据对话内容或特定关键词,从记忆系统中提取相关信息,动态填充到当前的对话中。

优势:记忆机制可以有效地模拟长期上下文记忆,使模型在多轮对话中能够记住用户的偏好、需求和目标,提升用户体验。

2.4 外部存储与动态调用

通过结合外部存储系统,模型可以将之前的对话历史或关键信息存储在外部数据库中,而不是完全依赖上下文窗口。在需要时,系统可以从存储中动态调用这些信息并更新当前对话的上下文。这种方法对于超长时间或跨多天的对话特别有用。

工作流程

  • 每次对话结束时,重要的对话内容被存储在外部存储系统中,如数据库或缓存。
  • 当用户在未来的某一时刻重新与系统进行对话时,系统可以检索之前存储的内容,填充到当前上下文中。

场景:假如用户和模型讨论了一周前的一个项目细节,通过外部存储,模型可以重新加载项目的关键信息,而无需用户重新解释。

2.5 基于主题的上下文聚焦

在一些复杂对话中,用户可能会同时涉及多个主题。为了更好地管理超长对话,模型可以使用基于主题的上下文聚焦策略。模型会识别当前对话的主题,并只保留与该主题相关的上下文,而忽略或简化其他不相关的内容。

示例: 如果用户与模型讨论了多个不同的项目,模型可以根据当前对话的主题选择性地回顾与之相关的上下文,而忽略不相干的主题信息。

优点:这种方法帮助模型在复杂多主题对话中保持清晰的上下文结构,并避免无关信息占用上下文窗口。

注意:

1、现在很多大模型对上下文窗口的限制已经优化很多了,Qwen2 模型可以处理 32K 或 128K token 长的文本,其中 8K 长度可作为输出。ChatGPT-4o支持128K tokens的上下文输入,16K tokens的输出。

2、多轮对话技术优化主要看重时间上的跨度和有用信息的集中程度(个人理解)

3、不同技术的细节需要根据实际需求调整

参考文献:

1、(22 封私信 / 37 条消息) 大模型如何实现超长多轮对话? - 知乎 (zhihu.com)

2、解读大模型(LLM)的token-腾讯云开发者社区-腾讯云 (tencent.com)

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐