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

谈面向任务的多轮对话系统(TOD)

        面向任务对话系统(Task-Oriented Dialogue (TOD) Systems)主要是为解决特定任务的,比如订票任务(订机票,电影票等),预定饭店等。这种对话往往需要多轮对话才能够完成。

多轮对话的例子

客户预定一个餐厅的过程:

  1. 用户:我要定一个餐厅
  2.     LLM: 请问你喜欢什么风格的餐厅?
  3.    用户  :无锡本帮菜
  4.    LLM:请问有几个人参加?
  5.    用户:5个人
  6.    LLM:你的预算是多少?
  7.   用户:人均150元
  8.   LLM:你预定的用餐时间?
  9.   用户:明天晚上6点
  10.   LLM: 根据你的邀请,我推荐XYZ 餐厅。。。。需要帮你预定么?
  11.   用户:好的
  12.   LLM:亲爱的用户,我已经帮预定好了XYZ 餐厅,祝你用餐愉快

      大语言模型出现之后,感觉实现实现这种系统比较简单了,但是深入思考后发现,这是一项富有挑战的工作。本文研究相关的问题与部分实验。

   我们将具有多轮会话的系统成为DiagGPT。

ChatGPT 与DiagGPT 的区别 

        

         ChatGPT 和 DiagGPT 之间的主要区别。ChatGPT直接回答用户问题,而DiagGPT不仅提供同等质量的答案,还具有主动提问、引导用户、内部保持对话状态的能力。  

        LLM 的一个流行应用是聊天机器人,它围绕这些模型构建对话系统。ChatGPT的1是此类应用程序的一个成功示例,其中 LLM 能够根据从大量训练数据中获得的知识分析上下文并响应用户查询。通过补充其背景知识并提供上下文和适当的提示,ChatGPT 已经能够为专业领域形成强大的问答模型。它可以理解用户的问题并有效地提供准确的答案。

        然而,我们日常生活中的对话场景可能更加复杂。例如,在法律或医疗诊断等专业咨询场景中,聊天代理需要考虑用户的独特情况或信息。在获取用户信息的过程中,座席提供的交互体验也是至关重要的。系统需要主动提出问题。因此,我们需要聊天代理的咨询过程,以更好地模拟真正的医学专家和法律专业人士。聊天代理应进行问答、主题管理,并引导用户实现特定目标或任务完成。这种类型的对话被称为面向任务的对话 (TOD)。对话中通常有一些预定义的目标。TOD帮助用户实现其特定目标,专注于了解用户、跟踪状态并生成后续操作。它与轻度对话或开放领域对话场景有很大不同。

        尽管在这一领域进行了大量研究,但由于缺乏训练数据、效率低下以及微调小型模型的缺点(包括无法完全理解用户含义和生成性能差)等问题,它仍然具有挑战性。关于该主题的现有研究模型并不稳健和通用。例如,微调模型需要大量数据进行训练,并且难以转移到其他场景。另一方面,尽管LLM拥有广泛的知识范围,其答案的质量也远远超出了微调模型,但传统的LLM已经不能满足TOD的需求,无法有效地管理复杂的对话逻辑。因为它们保持着简单的记忆,只能处理线性的交互。

DiagGPT的两种主要的方法

  •     端对端(End to End) 方式
  •     管道方式
  •     Function Call
  •    多Agent 方式

我们采取的方式

     基于我们正在研究的基于功能块的Agent 构建方法,我们采取了功能块方法实现面向任务的TOD 系统。具体方法如下:

 确定对话的任务目标(Goal)

      对于面向任务的对话而言,对话的主题是预先定义的(Predefined Goal)比如系统能够完成

  •     预约餐厅
  •    预约机票
  •    预约就医
  •    购买商品
  •    定外卖
  • 家庭自动化
  • 工厂自动化

        

     由于这些任务都需要在IT 系统的支持下完成,例如预约餐厅,机票,医院,购物平台的App 支持下完成的。所以这些目标应该是预先定义的。

Agent结构

目标Agent (Goal Agent)

     确定用户的请求要完成的目的。

任务Agent

     完成某一项单一任务的Agent。

目标Agent和任务Agent 支持多轮对话。

主题 Topic

     对于每个目标任务而言,需要提供一系列信息才可能完成。用户请求完成这些任务时不一定一次性提供所有的信息,这就需要多轮对话才能够补齐。这些信息称为对话的主题。

例如 预定餐厅的主题包括:

  1.      地理位置
  2.      餐馆的风格
  3.      就餐时间
  4.      就餐人数
  5.      预算 

    每个任务Agent 功能块中应该定义 Topic 列表。

状态机

  对于多轮对话而言,Agent 内部需要保留对话的记录。因此,Agent 功能块内部需要维持一个状态机。主要的状态

     初始状态 Status=0

    对话状态 Status=1

    确认状态 Status=2

   

当前主题

 当前对话的主题。

 主题队列(FIFO)

内部保留一个主题队列,主题队列的格式

{
"topic":"对话的主题",
"Description":"主题的描述“
"message":"对话信息"
}

 处理的流程

      初始状态时,收到任务请求时,将主题列表复制到主题队列中。并将状态改为“对话”,如果用户输入的消息中已经包含了某些主题的信息,就将用户的信息直接填写到主题队列的主题中。

例如:请帮助我定一张 5月5日 常州飞沈阳的机票。

这个用户信息中已经包含了下面几个Topic

  1.    出发地
  2.    目的地
  3.    日期

基于功能块的实现

我们使用功能块实现Agent,由功能块与连接构成功能块网络。功能块网络描述了Agent 的互操作关系,表达了AI的思维链。

   关于功能块的研究见我写的博客:

        谈大语言模型动态思维流编排-CSDN博客

 在本项目中,我们使用了如下几个功能块

  •     InMessage
  •    Goal 
  •   Restaurant
  • OutMessage

        Goal 和Restaurant 功能块内部都维护一个状态,当Goal 和Restaurant功能块接收到一个任务请求后,将状态转换为Dialog 模式。当Restaurant完成对话后,发送DIalogFinish 事件给Goal ,使Goal 的状态返回初始状态。

初步实验

结论

         简单地依赖大模型实现面向任务的多轮对话系统,效果很差,无法确定地进行多轮对话完成任务,而使用多Agent 系统实现TOD 效果更好。我们提出了基于功能块的多Agent 架构能够灵活地实现多Agent 协作。本文讨论的TOD 系统的实现,再一次证明了功能块的Agent 的能力。

         事实上,功能块网络是一个分布式系统架构。Agent 能够部署在不同的地方。例如 Restaurant功能块能够作为一个独立的App 部署在云端。

       我们相信,源自于工业自动化领域的功能块能够成为构建分布式AI Agent 的建模语言。我们将进一步探讨如何将Agent 功能块技术建立分布式 Agent 技术标准。

相关文章:

谈面向任务的多轮对话系统(TOD)

面向任务对话系统(Task-Oriented Dialogue (TOD) Systems)主要是为解决特定任务的,比如订票任务(订机票,电影票等),预定饭店等。这种对话往往需要多轮对话才能够完成。 多轮对话的例子 客户预定一个餐厅的…...

汇凯金业:如何判断黄金的买入时机

黄金,作为全球公认的避险资产,其价格波动受到多种因素的影响,包括经济数据、货币政策、地缘政治风险等。对于投资者而言,把握黄金的最佳买入点是实现投资收益最大化的关键。本文将探讨影响黄金价格的主要因素,并提供一…...

tomcat 项目迁移,无法将项目作为服务service启动

背景 测试服务器需要迁移到正式服务器上,为了方便省事,将测试服务器上的一些文件直接复制到正式服务器 问题 使用startup启动项目之后,可以直接使用使用tomcat9w启动,或者作为服务service启动的时候,显示无法访问到资源…...

java中 使用数组实现需求小案例(二)

Date: 2024.07.09 16:43:47 author: lijianzhan 需求实现: 设计一个java类,java方法,使用Random函数,根据实现用户输入随机数生成一个打乱的数组。 package com.lin.java.test;import java.util.Arrays; import java.util.Rando…...

【删库跑路】一次删除pip下载的所有第三方库方法

进入命令行,先list看下库存 pip list导出所有的第三方库至一文件列表 pip freeze >requirements.txt按照列表卸载所有库 pip uninstall -r requirements.txt -y再list看下,可见库存已清空...

Java面试八股之MySQL索引B+树、全文索引、哈希索引

MySQL索引B树、全文索引、哈希索引 注意:B树中B不是代表二叉树(binary),而是代表平衡(balance),因为B树是从最早的平衡二叉树演化而来,但是B树不是一个二叉树。 B树的高度一般在2~…...

解决 Docker 容器镜像拉取难题:全面指南

一、引言 在使用 Docker 容器的过程中,经常会遇到镜像拉取慢甚至无法下载的问题,这给开发和部署工作带来了不小的困扰。本文将深入探讨这一问题的原因,并提供多种有效的解决方案。 二、问题原因分析 网络限制 本地网络带宽不足或存在网络拥…...

python基础语法笔记(有C语言基础之后)

input()用于输入,其有返回值(即用户输入的值),默认返回字符串。括号里可放提示语句 一行代码若想分为多行来写,需要在每一行的末尾加上“\” 单个“/”表示数学中的除法,不会取整。“//”才会向下取整。 …...

【面试八股总结】线程基本概念,线程、进程和协程区别,线程实现

一、什么是线程? 线程是“轻量级进程”,是进程中的⼀个实体,是程序执⾏的最小单元,也是被系统独立调度和分配的基本单位。 线程是进程当中的⼀条执行流程,同⼀个进程内多个线程之间可以共享代码段、数据段、打开的文件…...

Java核心技术【二十】Java泛型的基本概念和原理详解

Java泛型的基本概念和原理详解 一、泛型的基本概念 Java泛型(Generics)是Java SE 1.5(JDK 5)引入的一个新特性,它提供了一种在编译时期进行类型检查的方式,允许程序员在定义类、接口和方法时指定类型参数…...

Android Studio Download Gradle 时慢问题解决

1.腾讯gradle 下载:后面拼接版本(gradle-8.0-bin.zip) https://mirrors.cloud.tencent.com/gradle/gradle-8.0-bin.zip 2.Android Studio 配置:setting-->gradle-->Use Gradle from 选择本地文件夹(解压后的bi…...

【Qt5】入门Qt开发教程,一篇文章就够了(详解含qt源码)

目录 一、Qt概述 1.1 什么是Qt 1.2 Qt的发展史 1.3 Qt的优势 1.4 Qt版本 1.5 成功案例 二、创建Qt项目 2.1 使用向导创建 2.2 一个最简单的Qt应用程序 2.2.1 main函数中 2.2.2 类头文件 2.3 .pro文件 2.4 命名规范 2.5 QtCreator常用快捷键 三、Qt按钮小程序 …...

阿里MotionShop——AI视频工具:一键替换视频人物为3D虚拟角色~

近期AI相关的新奇应用层出不穷,今天小元老师要给大家安利一个由阿里巴巴研发的AI视频生成技术——MotionShop! 1、一键替换3D虚拟角色 MotionShop通过视频处理、角色检测、背景修复等多重步骤,能够将视频中的人物角色,一键转换成…...

Jetpack Compose实战教程(五)

Jetpack Compose实战教程(五) 第五章 如何在Compose UI中使用基于命令式UI的自定义View 文章目录 Jetpack Compose实战教程(五)一、前言二、本章目标三、开始编码3.1 先让自定义控件能跑起来3.2给自定义控件使用compose的方式赋值…...

【vueUse库Watch模块各函数简介及使用方法--上篇】

vueUse库是一个专门为Vue打造的工具库,提供了丰富的功能,包括监听页面元素的各种行为以及调用浏览器提供的各种能力等。其中的Browser模块包含了一些实用的函数,以下是这些函数的简介和使用方法: vueUse库Sensors模块各函数简介及使用方法 vueUseWatch函数1. until2. watc…...

JavaScript中的LHS和RHS

LHS和RHS之前我们先来回忆一下最简单的赋值操作! var test100; console.log(test); 以上代码的意思简单我们理解为把右边的值赋值给左边的test变量,然后输出打印结果。 可是我们要是深入理解你就会发现在这个过程当中,还发生了一些其他的事情 而这些事情就是今天…...

appium 实战问题 播放视频时无法定位到元素

背景 在做UI自动化时,有播放详情页的用例,但是发现视频在播放的时候无法定位到元素或者很慢,了解到appium在动态的页面实时获取布局元素导致定位变慢。所以只能将视频暂停在操作元素,点击到暂停按钮又是个问题,通过ad…...

鸿蒙‘ohpm‘ 不是内部或外部命令,也不是可运行的程序-解决方案

🔥 博客主页: 小韩本韩! ❤️ 感谢大家点赞👍收藏⭐评论✍️ 在鸿蒙的DevEco Studio的终端下输入 ohpm -v 或者 你需要下载第三方ohpm包的时候提示‘ohpm‘ 不是内部或外部命令,也不是可运行的程序- 主要是因为我们…...

方法引用 异常 file

目录 一.方法引用 1.方法引用概述 2.引用静态方法 3.引用成员方法 i.引用其他成员方法 ii.引用本类成员方法 iii.引用父类成员方法 4.引用构造方法 5.其他调用方式 i.使用类名引用成员方法 ii.引用数组的构造方法 二、异常 1.异常的作用 2.异常的处理方式 i.JVM…...

比较(六)利用python绘制径向柱图

比较(六)利用python绘制径向柱图 径向柱图(Circular Barplot)简介 径向柱图基于同心圆网格来绘制条形图,虽然不如普通条形图表达准确,但却有抓人眼球的效果。其衍生的南丁格尔玫瑰图则广为人知。 快速绘制…...

为什么需要重写equals和如何重写equals

首先先看Java中的 ,比较的两个对象的地址值。 如果是基本数据类型,那么就是比较的是值。 如果是引用数据类型,比较的就是地址. object类中的equals方法也是用的; 所以要比较两个对象的大小,去调用默认的equals方法…...

C#字符串操作:判断一个字符串是否存在于另一个字符串按特定字符分割后的子字符串中的几种方法

要判断一个字符串是否存在于另一个字符串按特定字符分割后的子字符串中,可以使用以下几种方法: 方法一:使用Split和Array.Exists 你可以使用 Split 方法将字符串分割成子字符串数组,然后使用 Exists方法检查目标字符串是否在数组…...

Hi3861 OpenHarmony嵌入式应用入门--MQTT

MQTT 是机器对机器(M2M)/物联网(IoT)连接协议。它被设计为一个极其轻量级的发布/订阅消息传输 协议。对于需要较小代码占用空间和/或网络带宽非常宝贵的远程连接非常有用,是专为受限设备和低带宽、 高延迟或不可靠的网络而设计。这些原则也使该协议成为新兴的“机器…...

[22] Opencv_CUDA应用之 使用背景相减法进行对象跟踪

Opencv_CUDA应用之 使用背景相减法进行对象跟踪 背景相减法是在一系列视频帧中将前景对象从背景中分离出来的过程,它广泛应用于对象检测和跟踪应用中去除背景 背景相减法分四步进行:图像预处理 -> 背景建模 -> 检测前景 -> 数据验证 预处理去除噪声背景建模,以便与…...

Maven在Windows中的配置方法

本文介绍在Windows电脑中,下载、配置Maven工具的详细方法。 Maven是一个广泛使用的项目管理工具,主要针对Java项目,但也可以用于其他类型的项目;其由Apache软件基金会维护,旨在简化和标准化项目构建过程,依…...

一、redis-万字长文读懂redis

高性能分布式缓存Redis `第一篇章`1.1缓存发展史&缓存分类1.1.1 大型网站中缓存的使用带来的问题1.1.2 常见缓存的分类及对比与memcache对比1.2 数据类型选择&应用场景1.2.1 string1.2.2 hash1.2.3 链表1.2.4 set1.2.5 sortedset有序集合类型1.2.6 总结1.3 Redis高级应…...

搞清楚[继承],易如反掌

穷不失义,达不离道。——孔丘《论语》 继承 1、简单理解2、继承2、1、继承的概念2、2、继承定义2、3、基类和派生类对象赋值转换2、4、继承中的作用域2、5、派生类默认成员函数2、6、继承中的特点2、6、1、友元2、6、2、静态成员2、6、3、菱形继承及菱形虚拟继承 3、…...

Perl 语言入门学习指南:探索高效脚本编程的奥秘

引言 Perl,全称Practical Extraction and Report Language,是一种功能强大的编程语言,特别擅长于文本处理、报告生成以及系统自动化管理任务。自1987年诞生以来,Perl凭借其灵活性、强大的内置功能库和广泛的社区支持,…...

【HTML】-解决页面内容无法选择、复制问题

目录 1、网页内容无法选中 1.1、问题原因 1.2、解决脚本 1.2.1、开启控制台窗口 1.2.2、执行脚本命令 2、内容复制弹出阻止框 2.2、解决脚本 1、网页内容无法选中 1.1、问题原因 今天在访问某一网站平台,需要将内容进行选择、复制时发现不可使用。 在使用…...

C#中委托与事件

一、委托 在面向对象中,我们可以将任何数据类型作为参数传递给方法,能否将一个方法作为参数传递给另一个方法?C#中通过委托可以实现将方法作为参数进行传递。 1.1概念 委托是一种引用类型,它可以用于封装并传递方法作为参数。委…...