当前位置: 首页 > news >正文

大模型——如何实现超长多轮对话

在自然语言处理的领域中,多轮对话系统是构建智能化交互应用的关键。无论是聊天机器人、虚拟助手,还是客户服务系统,能够保持连贯的对话并记住上下文信息是用户体验的核心。然而,大规模语言模型(如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)

相关文章:

大模型——如何实现超长多轮对话

在自然语言处理的领域中,多轮对话系统是构建智能化交互应用的关键。无论是聊天机器人、虚拟助手,还是客户服务系统,能够保持连贯的对话并记住上下文信息是用户体验的核心。然而,大规模语言模型(如GPT等)的对…...

大数据面试-笔试SQL

一个表table: c_id u_id score;用SQL计算每个班级top5学生的平均分(腾讯) select class_id,avg(score) as score_avg from (select *,row_number() over(partition by class_id order by score desc) as score_rank from table ) t1 where t…...

希尔排序和直接插入排序

因为排序这些比较复杂点我就分几期给大家来讲~~~ 直接插入排序 直接插入排序是一种简单的排序算法,主要用于对少量数据进行排序。其基本思想是将待排序的元素逐个插入到已经排好序的部分中,从而形成一个有序序列。 具体步骤如下: 初始化&…...

IDEA 配置 Git 详解

本文将介绍在IntelliJ IDEA 中如何配置Git 没有安装配置 Git 的可以参考我的这篇文章:安装配置 Git 一、操作环境及准备 1.win 10 2.已安装且配置了Git 3.有Gitee账户 4.安装了IntelliJ IDEA 2023.2.1 5.全程联网 二、配置步骤 2.1 配置git 1.采用全局设置&…...

Docker 部署 Redis 监控系统实战:Redis Exporter 与 Prometheus 完整配置指南

Docker 部署 Redis 监控系统实战:Redis Exporter 与 Prometheus 完整配置指南 文章目录 Docker 部署 Redis 监控系统实战:Redis Exporter 与 Prometheus 完整配置指南一 缓存简述二 redis exporter 部署三 环境变量配置四 修改文件权限五 验证 exporter …...

高级算法设计与分析-MaxFlow网络流基础知识

MaxFlow网络流 1 网络流基础概念 source:源点 sink:终点 Flow:流量 capacity:容量 Residual:残量 Residual Network:残量网络 Augmenting path:增广路径,表示从源点 s 到终点 t 不包含环的路径 Bottleneck capacity:瓶颈容量 2 最大流 2.1 基础概念 2.2 增广路算法 …...

Java项目实战II基于Java+Spring Boot+MySQL的桂林旅游景点导游平台(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者 一、前言 桂林,以其独特的喀斯特地貌、秀美的自然风光闻名遐迩,每年吸引着无数国内外游…...

C语言-输入输出

实验一:编写一个输出两行自定义字符的 C 程序 一、实验目的 熟悉 C 语言的基本结构和语法。掌握 printf() 函数的使用方法。了解在 Code::Blocks 中编写、编译和运行程序的过程。 二、实验内容 编写一个 C 程序,要求输出两行字符,内容自定…...

如何在GitHub上传自己的项目?(一文看懂,每一步的操作和解决常见错误的方法)

目录 步骤一:准备 Git 环境 1. 安装 Git 2. 配置 Git 步骤二:在 GitHub 创建一个新的仓库 1. 登录到你的 GitHub 账号。 2. 点击右上角的 号,然后选择 New repository。 3. 填写以下信息: 步骤三:将本地项目上…...

数据结构_day1

目录 大纲 1.数据结构基础知识 1.1 什么是数据结构 1.2 数据 1.3 逻辑结构 1.4 存储结构 1.4.1 顺序存储 1.4.2 链式存储 1.4.3 索引存储结构 1.4.4 散列存储 1.5 操作 2.算法基础知识 2.1 什么是算法 2.2 算法的设计 2.3 算法的特性 2.4 评价算法的好坏 大纲 数据结构、算法(理…...

c# using 声明进行资源管理

在 C# 8 中,using 声明引入了一种新的语法,称为 using 声明,它使得开发人员在处理资源时的代码更加简洁和清晰。主要的变化包括 使用声明 和 使用上下文(using declaration) 的引入。 使用语句的简化 在 C# 8 中&…...

Kafka之基本概念

1、Kafka是什么? Kafka是由Scala语言开发的一个多分区、多副本,基于Zookeeper集群协调的系统。 那这个所谓的系统又是什么系统呢? 回答这个问题要从发展的角度来看:起初Kafka的定位是分布式消息系统。但是目前它的定位是一个分布…...

倪师学习笔记-天纪-斗数简介

一、学习过程 学习->验证->思考 二、算命方法 算命方法特点铁板神数适合核对六亲子平法准确度一般紫微斗数天文地理融合最好,批六亲不准,配合相可以提升准确率 三、果 天地人三者一起影响果,天时地利人和促成成功1/31/31/31算命部…...

Python酷库之旅-第三方库Pandas(143)

目录 一、用法精讲 646、pandas.Timestamp.is_quarter_start属性 646-1、语法 646-2、参数 646-3、功能 646-4、返回值 646-5、说明 646-6、用法 646-6-1、数据准备 646-6-2、代码示例 646-6-3、结果输出 647、pandas.Timestamp.is_year_end属性 647-1、语法 647…...

细说QT各种线程锁的特点和用法

文章目录 QMutex特点用法QReadWriteLock特点用法QSemaphore特点用法QWaitCondition特点用法在Qt框架中,提供了多种线程同步机制,包括互斥锁(Mutex)、读写锁(Read-Write Lock)、信号量(Semaphore)和条件变量(Wait Conditions)。这些机制用于处理多线程编程中的数据一致性和线程…...

Caffeine+Redis两级缓存架构

CaffeineRedis两级缓存架构 在高性能的服务项目中,我们一般会将一些热点数据存储到 Redis这类缓存中间件中,只有当缓存的访问没有命中时再查询数据库。在提升访问速度的同时,也能降低数据库的压力。 但是在一些场景下单纯使用 Redis 的分布…...

kafka和zookeeper单机部署

安装kafka需要jdk和zookeeper环境,因此先部署单机zk的测试环境。 zookeeper离线安装 下载地址: zookeeper下载地址:Index of /dist/zookeeper 这里下载安装 zookeeper-3.4.6.tar.gz 版本,测试环境单机部署 上传服务器后解压缩 …...

别了,公有云!下云迁移真的是大趋势么?

【科技明说 | 科技热点关注】 不知道你们还有没有印象,早在2022年,IBM发布了《IBM 企业转型指数:云现状》中也反映了这一趋势:80%的企业已经考虑或正在考虑将已经部署到公有云上的工作负载迁回私有的基础设施。 然而&…...

网关在不同行业自动化生产线的应用

网关在不同行业自动化生产线的应用,展示了其作为信息与物理世界交汇点的广泛影响力,尤其在推动行业智能化、自动化方面发挥了不可估量的作用。以下是网关技术在污水处理、智慧农业、智慧工厂、电力改造及自动化控制等领域的深入应用剖析。 1. 污水处理 …...

C++ socket编程(1)

这里是一个socket编程Demo,不考虑出错情况,代码简单,便于了解socket流程。 Demo分为服务器程序和客户端程序,运行需要先启动服务器程序,再启动客户端程序。 服务器会等待连接,客户端连接后,服…...

C# 文件夹类的实现与文件属性处理

在现代软件开发中,处理文件和文件夹是非常常见的任务。 C# 提供了丰富的类库来操作这些文件系统的基本元素。本篇文章将探讨如何在 C# 中实现一个简单的文件夹类,以及如何获取文件名、文件路径、大小和创建日期等文件属性。 一、使用 System.IO 命…...

基于SSM框架和Layui的学院课程安排系统的设计与实现(源码+定制+定制)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...

【论文笔记】DKTNet: Dual-Key Transformer Network for small object detection

【引用格式】:Xu S, Gu J, Hua Y, et al. Dktnet: dual-key transformer network for small object detection[J]. Neurocomputing, 2023, 525: 29-41. 【网址】:https://cczuyiliu.github.io/pdf/DKTNet%20Dual-Key%20Transformer%20Network%20for%20s…...

设计模式之适配器模式(Adapter)

一、适配器模式介绍 适配器模式(adapter pattern )的原始定义是:将类的接口转换为客户期望的另一个接口, 适配器可以让不兼容的两个类一起协同工作。 适配器模式是用来做适配,它将不兼容的接口转换为可兼容的接口,让原本由于接口…...

[git] github管理项目之环境依赖管理

导出依赖到 requirements.txt pip install pipreqs pipreqs . --encodingutf8 --force但是直接使用pip安装不了torch,需要添加源!! pip install -r requirements.txt -f https://download.pytorch.org/whl/torch_stable.html想到一个麻烦的…...

【STM32 Blue Pill编程实例】-SD卡文件读写(SPI接口)

SD卡文件读写(SPI接口) 文章目录 SD卡文件读写(SPI接口)1、SD卡模块介绍2、硬件准备与接线3、模块配置3.1 SPI接口配置3.2 SPI接口的片选信号引脚配置3.3 FATFS配置4、代码实现在本文中,我们将介绍如何将 microSD 卡与 STM32 Blue Pill 连接,并在STM32CubeIDE中对SD卡进行…...

为什么需要软件测试?

软件测试 软件测试是评估和验证计算机程序或系统是否按预期运行的过程。 它涉及执行程序或系统以识别预期结果和实际结果之间的任何错误或差距。 目标是确保软件满足指定的要求,没有缺陷,并在不同场景中可靠地工作。 为什么需要软件测试?…...

成为超人:普通人如何白手起家,富一代和富二代的根本区别是什么?

成为超人:普通人如何白手起家,富一代和富二代的根本区别是什么? 我的问题是事业就讲 10 年装逼学习法失效① 光说不练,还是太懒真正的勤奋,解决温饱后,只专注赚钱这件事 ② 信念飘摇,随波流转万…...

Java 集合 Collection常考面试题

理解集合体系图 collection中 list 是有序的,set 是无序的 什么是迭代器 主要遍历 Collection 集合中的元素,所有实现了 Collection 的集合类都有一个iterator()方法,可以返回一个 iterator 的迭代器。 ArrayList 和 Vector 的区别? ArrayList 可以存放 null,底层是由数…...

C++继承与菱形继承(一文了解全部继承相关基础知识和面试点!)

目的减少重复代码冗余 Class 子类(派生类) : 继承方式 父类(基类) 继承方式共有三种:公共、保护、私有 父类的私有成员private无论哪种继承方式都不可以被子类使用 保护protected权限的内容在类内是可以访问,但是在…...

福田专业网站建设公司哪家好/故事式的软文广告例子

写于2020年11月 一、《SlimYOLOv3》 论文链接:arxiv.org/abs/1907.11093. 代码链接:https://github.com/PengyiZhang/SlimYOLOv3 二、《YOLOV3-model-pruning》 原代码地址:https://github.com/pjreddie/darknet U代码地址:ht…...

爱用建站平台/一键制作网站

richard matthew stallman 主要成就: Emacs/GNU/GCC/GDB/GPL/FSF 自由软件精神领袖1985 发表GNU宣言, 创建一套完全自由免费,兼容于Unix的操作系统GNU,之后建立自由软件基金会来协助该计划.1989年与一群律师起草了GNU GPL GNU Gen…...

厦门市建设局网站/百度推广点击软件

本文目录感知机(Perception)一、基本介绍1. 数学定义2. 图形表示3. 线性可分二、损失函数三、感知机的求解1. 原始形式(1) 求解过程(2) 具体实例2. 对偶形式四、程序实例感知机(Perception) 一、基本介绍 感知机是二元分类线性模…...

网站基础知识域名5个点/在线客服

功、功率、机械效率复习课 学案高邮市川青初中九年级物理组功、功率、机械效率复习课 学案复习内容:功、功率、机械效率 复习目标:1、理解做功的两个必要因素,能运用公式进行功的计算;2、理解功率的物理意义,能运用公式…...

做相册本哪个网站好用/淘宝关键词优化软件

...

网站地图模版/国内永久免费云服务器

非常久没有写关于string的博客了。由于写的差点儿相同了。可是近期又与string打交道,于是荷尔蒙上脑,小蝌蚪躁动。在程序中,假设用到了颜色代码,一般都是十六进制的,即hex。 可是server给你返回一个颜色字符串。即hex …...