【论文通读】AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation

AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation

  • 前言
  • Abstract
  • Motivation
  • Framework
    • Conversable Agents
    • Conversation Programming
  • Application
  • A1: Math Problem Solving
  • A2: Retrieval-Augmented Code Generation and Question Answering
  • A3: Decision Making in Text World Environments
  • Conclusion

前言

微软在智能体方面的又一重大工作,通过对话式多智能体协作的方式构建智能体系统,以解决各种应用场景下的问题。相对于文章本身,我更希望读者关注其在github上项目的工作,毕竟智能体的工作本质上都是工程化的内容,只有实际参与了项目本身你才能真正理解AutoGen的意义并感受其实用性。

Paperhttps://arxiv.org/pdf/2308.08155.pdf
Codehttps://github.com/microsoft/autogen
FromICLR 2024 WorkShop

image.png

Abstract

AutoGen是允许开发者通过多智能体的形式构建LLM应用的开原框架,这些智能体通过对话完成任务。AutoGen可定制化、可对话,并且可以在各种LLMs、用户输入和工具组合的模式下运行。使用AutoGen,开发者可以灵活定义智能体交互行为。自然语言和计算机代码都可以用于为不同的应用程序编写灵活的对话形式。AutoGen是构建各种复杂且融合LLM能力的应用程序的通用框架,实验证明该框架在各种领域的有效性。

Motivation

  1. 多智能体合作的方式从直觉上可以更好完成复杂的任务。
  2. 为什么采取多智能体对话的形式?
    1. LLM本身基于对话,利于通过彼此或人类对话的形式合作。
    2. 多智能体对话可以取长补短。
    3. LLM可以解决被分解为子任务的复杂任务。
  3. 如何灵活实现不同应用程序的需求?
    1. 如何设计有能力、可重用、可定制且有效进行多智能体协作的单个智能体?
    2. 如何开发一个简单、统一的界面来适应各种智能体对话模式?

AutoGen通过如下方法的实现解决上面的问题:

  1. 定制化和可对话的智能体。
  2. 对话式编程。角色特定 + 对话为中心。

Framework

image.png
AutoGen的核心原则是使用多智能体对话来简化和整合多智能体工作流程。AutoGen具有两个关键概念:可对话智能体对话编程

Conversable Agents

  1. 支持常见的智能体组合功能,比如LLMs,人类和工具。
  2. 根据特定应用程序的需求,每个智能体可以通过多个组件的混合来展现复杂的行为。AutoGen允许通过重用或者跨站来创建专门的功能或角色的智能体。

虽然可对话智能体是有用的构建块,但是为了智能体在任务上取得有意义的进展,开发人员还需要指定和塑造这些多智能体对话。

Conversation Programming

对话编程可以解决“有意义”的问题。它考虑了两个概念:

  1. 计算:智能体在多智能体对话中计算自己响应的动作。
  2. 控制流:计算发生的顺序或者条件。在此基础上设计了统一的接口、自动回复、编程和自然语言融合等设计模式。

对话式编程的设计模式允许在编程和自然语言之间进行控制,一方面,可以让智能体通过自然语言来控制对话流程,另一个方面可以用Python代码来终止条件、人类输入和工具执行逻辑,甚至可以调用自动回复函数来控制对话流程。
此外,对话编程可以根据当前上下文同时执行当前对话以及调用其它智能体的对话。总的来说,这种对话式编程,可以让复杂的多智能体对话实现更简单直观。

Application

image.png
作者在六个应用上使用AutoGen以展示其在简化高性能多智能体应用程序开发中的潜力。

A1: Math Problem Solving

自动化解决数学问题的系统通过直接复用两个内置的智能体完成,并与LangChain ReAct、原始GPT-4等在MATH数据集上进行评估。研究者随机选取了120个随机的level 5的问题,解决表明AutoGen仅用内置的智能体就有最好的表现。
image.png
为了研究人机协同解决问题的有效性,作者在系统中融入了人类反馈,实验证实系统可以借助人类输入来解决那些没有人类介入无法解决的问题。

A2: Retrieval-Augmented Code Generation and Question Answering

image.png
RAG已被证明缓解语言模型固有限制的实用方法,本文构建了一种检索增强型对话系统,由检索增强型用户智能体和检索增强型助手智能体组成。作者在两种情况下进行评估:问题回答和代码生成。作者与DPR进行比较,AutoGen会在找不到信息时不终止对话,而是会回应“找不到任何关于xxx的信息,更新上下文”,这将唤起更多检索。结果如下图所示,显示交互检索机制在这过程中确实起到重要的作用。image.png

A3: Decision Making in Text World Environments


AutoGen对任意应用场景定制任务特定的多智能体协作系统,从而在各种场景上取得很好的效果。更多的应用这里就不再赘述了,感兴趣的朋友可以阅读原文观看。

Conclusion

AutoGen最大的亮点正如它所宣传的那样:对话式多智能体,智能体通过互相协作以及对话交互,从而在各个应用场景定制多智能体协作系统,取得非常好的效果。通过对文章的阅读,我也有一些想法和疑惑:

  1. 智能体工作的文章一定要如此包装吗?在看文章的时候,很多内容读起来还是很吃力的,作者创造了很多概念,比如对话编程,计算响应,给我唬的一愣一愣的,不知其所以然。看完文章,以及相关的应用后,我才恍然大悟,我觉得作者如果能够将重点围绕在对话式多智能体交互上,即通过一个pipeline讲解整个框架,而不是拆分成一个个组件,然后将重点放在实验上(AutoGen应用部分还是很充分的),可能更利于读者的理解,不过这样的包装可能更好中论文吧。毕竟智能体相关的工作太过于工程,发论文吃力不讨好。
  2. 不同的应用场景需要定制不同的多智能体协作系统,这显得不够智能,能不能在积累一定不同类型智能体之后,用户仅仅通过任务就能自动组合智能体来协作完成任务,这我认为是值得去做的工作。
  3. Framework的图实在是暴殄天物,流程看着很乱,一些函数写在上面不明所以,不利于读者理解。
  4. 实验部分限于当时AI assistant的benchmark还没有出来,所以只能以6种应用形式呈现,实际上现在AutoGen已经在GAIA benchmark取得了最好的成绩,确实有力证明了对话式多智能体协作系统的优越性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/782398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

相机标定学习记录

相机标定是计算机视觉和机器视觉领域中的一项基本技术,它的主要目的是通过获取相机的内部参数(内参)和外部参数(外参),以及镜头畸变参数,建立起现实世界中的点与相机成像平面上对应像素点之间准…

深度学习算法概念介绍

前言 深度学习算法是一类基于人工神经网络的机器学习方法,其核心思想是通过多层次的非线性变换,从数据中学习表示层次特征,从而实现对复杂模式的建模和学习。深度学习算法在图像识别、语音识别、自然语言处理等领域取得了巨大的成功&#xf…

【STM32 HAL库SPI/QSPI协议学习,基于外部Flash读取。】

1、SPI协议 简介 SPI 协议是由摩托罗拉公司提出的通讯协议 (Serial Peripheral Interface),即串行外围设备接口,是 一种高速全双工的通信总线。它被广泛地使用在 ADC、LCD 等设备与 MCU 间,要求通讯速率 较高的场合。 SPI 物理层 SPI 通讯…

Nginx(Docker 安装的nginx)配置域名SSL证书

1.首先确保Linux环境上已经安装了docker(可参考Linux安装Docker-CSDN博客) 2.通过docker 安装nginx(可参考Linux 环境安装Nginx—源码和Dokcer两种安装方式-CSDN博客) 3.安装SSL证书 3.1 在宿主机中创建证书目录并上传证书&…

【数据结构与算法篇】动态顺序表及相关OJ算法题

【数据结构与算法篇】动态顺序表及相关OJ算法题 🥕个人主页:开敲🍉 🔥所属专栏:数据结构与算法🍅 目录 【数据结构与算法篇】动态顺序表及相关OJ算法题 1. 动态顺序表的实现 1.1 SeqList.h 头文件声明 1.…

基于LSB(最低有效位)的图像水印算法,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

php将网页用wkhtmltoimage内容生成为图片

php架构ThinkPHP6 1. 安装 knp-snappy架构 composer require knplabs/knp-snappy use Knp\Snappy\Image; use Illuminate\Support\Facades\Storage;// 生成图片 /user/local/bin/wkhtmltoimage为你的wkhtmltoimage的位置。 $snappy new Image(/usr/local/bin/wkhtmltoimage…

智慧城市数字孪生,综合治理一屏统览

现代城市作为一个复杂系统,牵一发而动全身,城市化进程中产生新的矛盾和社会问题都会影响整个城市系统的正常运转。智慧城市是应对这些问题的策略之一。城市工作要树立系统思维,从构成城市诸多要素、结构、功能等方面入手,系统推进…

算法学习——LeetCode力扣单调栈篇

算法学习——LeetCode力扣单调栈篇 739. 每日温度 739. 每日温度 - 力扣(LeetCode) 描述 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个…

关系型数据库mysql(7)sql高级语句①

目录 一.MySQL常用查询 1.按关键字(字段)进行升降排序 按分数排序 (默认为升序) 按分数升序显示 按分数降序显示 根据条件进行排序(加上where) 根据多个字段进行排序 ​编辑 2.用或(or&…

ESP8266 控制 LED 亮灭

一、引脚对应 二、按键控制 LED 亮灭 2.1样例1 #include <ESP8266WiFi.h>const int ledPin D2; // LED 连接到 D2 引脚 const int keyPin D4; // 按键连接到 D4 引脚volatile bool flag false; // 记录 LED 状态的标志// 外部中断处理函数 ICACHE_RAM_ATTR void han…

重新温习广软puthon爬虫技术。

下面是我不断试错的一个过程&#xff0c;好多知识点全忘记了&#xff0c;只能不断调实例&#xff0c;不断优化&#xff0c;重构&#xff0c;实现自己的需求。下面是我的运行截图。还是导包的问题。 个人感觉关键的还是这几部&#xff0c;被划了下划线的&#xff0c;存在问题&a…

【智能算法】猎人猎物算法(HPO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2022年&#xff0c;Naruei等人受到自然界动物猎食过程启发&#xff0c;提出了猎人猎物算法&#xff08;Hunter-Prey Optimization&#xff0c; HPO&#xff09;。 2.算法原理 2.1算法思想 HPO模拟…

输出1到10的阶乘--C语言

#include<stdio.h> int fac(int n){if(n<1){return 1;}elsereturn fac(n-1)*n; } int main(){int i, result;for(i1;i<10;i){resultfac(i);printf("%d!%d\n",i,result);}} 输出结果&#xff1a;

Java并发编程基础_Thread类

线程 Thread.class 1. 线程的六种状态 NEW 尚未启动的线程处于此状态。RUNNABLE 在Java虚拟机中执行的线程处于此状态。BLOCKED 被阻塞等待监视器锁定的线程处于此状态。WAITING 正在等待另一个线程执行特定动作的线程处于此状态。TIMED_WAITING 正在等待另一个线程执行动作达到…

C++中浅拷贝和深拷贝对象复制概念

1.浅拷贝&#xff08;Shallow Copy&#xff09;&#xff1a; 浅拷贝是指在对象复制时&#xff0c;只是复制对象的值&#xff0c;而不会复制对象指向的资源。这意味着对象和其副本会指向同一块内存空间&#xff0c;当一个对象改变时&#xff0c;另一个对象也会受到影响。 #inclu…

回溯算法|216.组合总和III

力扣题目链接 class Solution { private:vector<vector<int>> result; // 存放结果集vector<int> path; // 符合条件的结果// targetSum&#xff1a;目标和&#xff0c;也就是题目中的n。// k&#xff1a;题目中要求k个数的集合。// sum&#xff1a;已经收集…

OpenKylin安装Kafka

一、操作系统 openKylin 1.0.1 X86 二、下载安装包 # 安装依赖jdk sudo apt-get update sudo apt-get install default-jdk # 下载kafka mkdir -p /data/software/kafka wget https://archive.apache.org/dist/kafka/2.4.1/kafka_2.13-2.4.1.tgz三、解压安装 # 解压缩Kafka…

springboot项目学习-瑞吉外卖(4)续

1.任务 菜品的添加功能(涉及到两张表的数据添加) 2.菜品添加 功能页面如上&#xff0c;该页面有两个注意点 菜品分类&#xff1a;点击菜品分类后&#xff0c;会展示当前已有菜品&#xff1a;这个功能的实现要从category表里查询数据&#xff0c;然后再做展示口味做法配置&#…

算法题->移动零的C语言和JAVA的双指针解法

使用C语言和JAVA代码通过双指针进行解题 题目描述:给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 理解题意:不改变数组中非零元素的顺序,并把0元素放在非零元素后面. 链接: https://leetcode.cn/problems/m…