百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

AutoGen:开源的多代理AI编程框架

yuyutoo 2025-02-09 14:50 1 浏览 0 评论

AutoGen 正在彻底改变我们对自主AI代理的看法。该项目由 Microsoft 开发,提供了一个框架,允许用户创建多个自主的 ChatGPT 类代理并让它们无缝协作。在本文中,我们将深入探讨 AutoGen 是什么、如何安装它以及如何利用它的功能。

1、AutoGen简介

AutoGen 是 Microsoft 的一个开创性项目,它使用户能够根据需要创建任意数量的自主 ChatGPT 类代理。这些代理可以协同工作以完成特定任务。该框架非常灵活,允许用户定义各种代理、为他们分配角色并协调他们的协作工作。

Doug Berger,Microsoft 技术研究员:AutoGen 使用多代理对话实现基于 LLM 的复杂工作流。(左)AutoGen 代理是可定制的,可以基于 LLM、工具、人类,甚至是它们的组合。(右上)代理可以通过交谈来解决任务。(右下)该框架支持许多其他复杂的对话模式。

为什么 AutoGen 会改变游戏规则?

许多项目都在手动集成多个代理来完成任务。但是,当多个 AI 代理协作时,输出往往会更出色。这可能是在编码、规划、创意写作或任何其他领域。一个代理完成工作,另一个代理检查工作,还有一个代理提供反馈,迭代循环确保最终输出是精致且高质量的。

因此,AutoGen 允许你执行许多项目已经手动执行的操作,即让多个代理协同完成一项任务。

几乎任何事情,如果你有一个由人类专家组成的团队一起工作,那么输出几乎总是比只有一个人处理问题更好。现在想象一下,如果我们可以让多个 ChatGPT 协同工作以解决问题——这就是 AutoGen!

AutoGen 可以集成到任何项目中,也可以替代 OpenAI 的 API。这意味着你可以轻松引入多代理支持,而无需更改现有的代码库。

AutoGen 的核心功能

  • LLM 工作流框架:AutoGen 简化了大型语言模型 (LLM) 工作流的编排、优化和自动化。
  • 可定制代理:它提供可定制代理,利用 GPT-4 等高级 LLM,通过与人类和工具集成来解决其局限性。
  • 自动聊天:代理可以进行自动对话,从而提高协作效率。
  • 与其他 LLM 集成:虽然它可以与 OpenAI 的 API 无缝协作,但 AutoGen 可以将任何大型语言模型与 API 集成。

来自 Microsoft Docs:

使用 AutoGen,构建复杂的多代理对话系统归结为:

  • 定义一组具有专门功能和角色的代理。
  • 定义代理之间的交互行为,即当代理收到来自另一个代理的消息时要回复什么。

AutoGen 创建多代理对话系统的方法通过允许组建由 AI 代理组成的虚拟团队(每个代理都体现了专门的角色和功能)彻底改变了企业内的运营和项目管理结构。通过不仅定义每个代理的独特功能(例如工程专业知识、项目协调或质量保证),还编写它们之间潜在的交互和协作响应脚本,公司可以建立复杂的数字劳动力。该系统可提高效率、精确度和全天候生产力,因为这些 AI 代理可以协同工作,反映部门间合作而不受人为限制的限制。

AutoGen 在行动

此图强调了 AutoGen 系统的创新设计,该系统采用两个不同的 AI 代理来增强用户交互。用户代理是用户的数字体现,具有自动执行决策和任务的能力,从而简化流程。然而,其独特的设计优势在于其灵活性;它可以自主执行运行代码等任务,也可以让实际的人类用户参与反馈或干预,确保人类在需要时保持参与。

另一方面,助理代理是计算和解决问题智能的主要来源。它生成输出(例如所提供场景中的代码),并将其传达给用户代理。本质上,助理代理是这种关系中的“执行者”,承担任务并提供解决方案。这两个代理的协作性质强调了这种设计的价值:它通过自动化优化效率,同时仍保留了人类洞察力和监督能力。这种双代理系统确保快速完成任务,同时保持人类判断的真实性和细微差别,在自动化和人性化之间取得平衡。您可以拥有多个代理和多个用户代理代理来模拟几乎任何业务流程。

2、AutoGen 入门

让我们拉取 Microsoft 的示例。在这个先进的计算环境中,所呈现的用例通过两个不同的 AI 代理的协作引入了一种高级的代码解释和执行方法:助理代理和用户代理代理。助理代理以 LLM(语言模型)的强大功能为基础,擅长根据特定任务编写 Python 代码,简化编码过程并体现出功能显著增强的代码解释器。该系统的与众不同之处在于其迭代解决问题的能力。如果编写的代码遇到错误,在多代理框架下,助理代理具有自我纠正和迭代改进其输出的灵活性。

同时,用户代理彻底改变了编码过程的执行方面。传统上,用户会在 Visual Studio Code 等平台中手动复制和运行代码,这可能很繁琐。在这里,用户代理充当人类用户的替身,自主执行提供的代码并可能大大缩短周期时间。其内置的灵活性允许根据用户指定的设置自动执行或在运行代码之前寻求人工批准的选项。此外,两个代理之间的持续通信循环可确保实时反馈、错误检测和及时纠正。总之,这种双代理系统有望提高效率、减少人工干预并提供更流畅的编码体验,真正为编码人员和开发人员打造下一代解决方案。

2.1 安装Autogen

首先,你需要安装 Py AutoGen 库:

!pip install pyautogen

安装后,需要设置你的 API 端点。在此阶段,将 AutoGen 链接到你首选的大型语言模型。该过程涉及导入 AutoGen 库并设置你的 LLM 配置。

import autogen

config_list = autogen.config_list_from_json(
    "OAI_CONFIG_LIST",
    filter_dict={
        "model": ["gpt-4", "gpt-4-0314", "gpt4", "gpt-4-32k", "gpt-4-32k-0314", "gpt-4-32k-v0314"],
    },
)

接下来,你需要将 Open AI 或 Azure Open AI Keys 添加到框架中:

config_list = [
    {
        'model': 'gpt-4',
        'api_key': '',
    },
    {
        'model': 'gpt-4',
        'api_key': '',
        'api_base': '',
        'api_type': 'azure',
        'api_version': '2023-06-01-preview',
    },
    {
        'model': 'gpt-4-32k',
        'api_key': '',
        'api_base': '',
        'api_type': 'azure',
        'api_version': '2023-06-01-preview',
    },
]

设置好环境后,你就可以探索 AutoGen 的功能了。首先定义你的代理及其角色。例如,你可以创建一个负责编码任务的“工程师”代理、一个负责监督的“项目经理”代理和一个负责审查输出的“质量保证”代理。

2.2 任务执行和调试

AutoGen 在自动任务解决、代码生成、执行和调试方面表现出色。你可以通过提示代理执行特定操作(如编写和执行代码)来启动任务。如果代码遇到错误,AutoGen 将进入调试阶段,提供解决方案并确保任务继续完成。

# create an AssistantAgent named "assistant"
assistant = autogen.AssistantAgent(
    name="assistant",
    llm_config={
        "seed": 42,  # seed for caching and reproducibility
        "config_list": config_list,  # a list of OpenAI API configurations
        "temperature": 0,  # temperature for sampling
    },  # configuration for autogen's enhanced inference API which is compatible with OpenAI API
)
# create a UserProxyAgent instance named "user_proxy"
user_proxy = autogen.UserProxyAgent(
    name="user_proxy",
    human_input_mode="NEVER",
    max_consecutive_auto_reply=10,
    is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"),
    code_execution_config={
        "work_dir": "coding",
        "use_docker": False,  # set to True or image name like "python:3" to use docker
    },
)
# the assistant receives a message from the user_proxy, which contains the task description
user_proxy.initiate_chat(
    assistant,
    message="""What date is today? Do a Bivariate Analysis of Google Stock since the beginning of the year""",
)

上面代码解释如下:

首先创建助手(assistant)代理:

  • 脚本首先创建一个名为“assistant”的 AssistantAgent 实例。此代理旨在与查询或任务进行交互并做出响应,就像人类助手一样。
  • llm_config 参数包含助手语言模型的配置,确保文本生成期间的特定行为。例如,它设置一个“种子”以获得一致的输出,使用可能用于各种响应样式或内容限制的配置列表 (config_list),以及确定助手响应的随机性或创造性的“温度”设置(设置为 0 表示确定性或创造性较低的响应)。

然后设置用户(user)代理:

  • 然后,脚本设置一个名为“user_proxy”的 UserProxyAgent。此代理充当人类用户的替身,根据预定义的逻辑或数据自动执行用户输入,而无需实际的实时人机交互(由 human_input_mode="NEVER" 表示)。
  • max_consecutive_auto_reply 可能是一种保护措施,可确保自动对话不会陷入代理之间的无限循环回复。
  • is_termination_msg 函数是一种智能终止检查。当消息内容以“TERMINATE”结尾时,对话将停止,允许外部控件在需要时结束对话。
  • code_execution_config 表明此代理可以执行代码(根据上下文,可能是 Python)。它配置为在特定目录中工作,并且可以选择在 Docker 容器内执行代码以增加安全性或环境一致性(尽管在此代码段中设置为不使用 Docker)。

接下来启动任务:

  • user_proxy 通过 initial_chat 方法与助手启动对话。它发送一条消息询问两个问题:一个关于当前日期,另一个要求对今年年初以来的 Google 股票进行双变量分析。
  • 此启动模拟用户要求助手执行任务。助手将解释此消息并执行任务,就像它们是由真实用户请求的一样。

本质上,此脚本创建了一个自动化环境,其中“用户”(或用户代理)可以要求“助手”执行复杂的任务(如股票分析),而无需人工干预。它是模拟的自动对话系统的一部分,其中各种代理可以处理任务、提出问题或提供信息,就像与人类互动一样。

2.3 分析运行的输出

执行后,推理链如下:

哎呀!它生成的代码失败了(它知道这一点,因为 AutoGen 尝试运行代码!):

它分析来自代码解释器的错误并自动建议修复并再次测试(它将继续此循环,直到问题得到解决或尝试次数或时间用尽!):

现在你有了干净的代码!

由于框架内置了缓存机制,你可以继续分析:

# followup of the previous question
user_proxy.send(
    recipient=assistant,
    message="""Plot a chart of this and save to google_analysis.png.""",
)

它一次就搞定了代码!让我们看看它创建了什么:

from IPython.display import Image

Image(filename='/content/coding/google_analysis.png')

2.4 创建和使用配方

AutoGen 的突出功能之一是它能够从序列中学习并创建可重复使用的“配方”。这些配方是分步指南,您的代理可以将其用于未来类似的任务,从而提高效率和一致性。

# Command to create a recipe after a sequence of steps
assistant.create_recipe(sequence_of_steps)

3、结束语

AutoGen 正在重新定义 AI 的可能性。它能够创建能够学习、适应和协作的多智能体系统,这意味着我们只是触及了其潜在应用的表面。无论您从事软件开发、研究、创意写作还是数据分析,AutoGen 都可以提高您的工作效率和创造力。

随着我们继续探索这个框架的功能,想想它可以为各个领域的复杂问题提供的解决方案是令人兴奋的。AI 的未来就在这里,它具有自主性、自适应性和极高的智能。


原文链接:AutoGen多代理AI编程框架 - 汇智网

相关推荐

史上最全的浏览器兼容性问题和解决方案

微信ID:WEB_wysj(点击关注)◎◎◎◎◎◎◎◎◎一┳═┻︻▄(页底留言开放,欢迎来吐槽)●●●...

平面设计基础知识_平面设计基础知识实验收获与总结
平面设计基础知识_平面设计基础知识实验收获与总结

CSS构造颜色,背景与图像1.使用span更好的控制文本中局部区域的文本:文本;2.使用display属性提供区块转变:display:inline(是内联的...

2025-02-21 16:01 yuyutoo

写作排版简单三步就行-工具篇_作文排版模板

和我们工作中日常word排版内部交流不同,这篇教程介绍的写作排版主要是用于“微信公众号、头条号”网络展示。写作展现的是我的思考,排版是让写作在网格上更好地展现。在写作上花费时间是有累积复利优势的,在排...

写一个2048的游戏_2048小游戏功能实现

1.创建HTML文件1.打开一个文本编辑器,例如Notepad++、SublimeText、VisualStudioCode等。2.将以下HTML代码复制并粘贴到文本编辑器中:html...

今天你穿“短袖”了吗?青岛最高23℃!接下来几天气温更刺激……

  最近的天气暖和得让很多小伙伴们喊“热”!!!  昨天的气温到底升得有多高呢?你家有没有榜上有名?...

CSS不规则卡片,纯CSS制作优惠券样式,CSS实现锯齿样式

之前也有写过CSS优惠券样式《CSS3径向渐变实现优惠券波浪造型》,这次再来温习一遍,并且将更为详细的讲解,从布局到具体样式说明,最后定义CSS变量,自定义主题颜色。布局...

柠檬科技肖勃飞:大数据风控助力信用社会建设

...

你的自我界限够强大吗?_你的自我界限够强大吗英文

我的结果:A、该设立新的界限...

行内元素与块级元素,以及区别_行内元素和块级元素有什么区别?

行内元素与块级元素首先,CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,分别为块级(block)、行内(inline)。块级元素:(以下列举比较常...

让“成都速度”跑得潇潇洒洒,地上地下共享轨交繁华
让“成都速度”跑得潇潇洒洒,地上地下共享轨交繁华

去年的两会期间,习近平总书记在参加人大会议四川代表团审议时,对治蜀兴川提出了明确要求,指明了前行方向,并带来了“祝四川人民的生活越来越安逸”的美好祝福。又是一年...

2025-02-21 16:00 yuyutoo

今年国家综合性消防救援队伍计划招录消防员15000名

记者24日从应急管理部获悉,国家综合性消防救援队伍2023年消防员招录工作已正式启动。今年共计划招录消防员15000名,其中高校应届毕业生5000名、退役士兵5000名、社会青年5000名。本次招录的...

一起盘点最新 Chrome v133 的5大主流特性 ?

1.CSS的高级attr()方法CSSattr()函数是CSSLevel5中用于检索DOM元素的属性值并将其用于CSS属性值,类似于var()函数替换自定义属性值的方式。...

竞走团体世锦赛5月太仓举行 世界冠军杨家玉担任形象大使

style="text-align:center;"data-mce-style="text-align:...

学物理能做什么?_学物理能做什么 卢昌海

作者:曹则贤中国科学院物理研究所原标题:《物理学:ASourceofPowerforMan》在2006年中央电视台《对话》栏目的某期节目中,主持人问过我一个的问题:“学物理的人,如果日后不...

你不知道的关于这只眯眼兔的6个小秘密
你不知道的关于这只眯眼兔的6个小秘密

在你们忙着给熊本君做表情包的时候,要知道,最先在网络上引起轰动的可是这只脸上只有两条缝的兔子——兔斯基。今年,它更是迎来了自己的10岁生日。①关于德艺双馨“老艺...

2025-02-21 16:00 yuyutoo

取消回复欢迎 发表评论: