当前位置: 首页 > 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)简介 径向柱图基于同心圆网格来绘制条形图,虽然不如普通条形图表达准确,但却有抓人眼球的效果。其衍生的南丁格尔玫瑰图则广为人知。 快速绘制…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求&#xff…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

Java编程之桥接模式

定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...