Press "Enter" to skip to content

“自动聚类的启动:探索多智能体框架的基础知识”

介绍

踏上一段激动人心的旅程,探索多智能体框架的基础知识,并进入软件开发的未来,这就是“自动产生:探索多智能体框架基础”的主题。在OpenAI的ChatGPT之后,一个名为LLM(LLM agent)的专业领域正在经历前所未有的飞速发展,彻底改变了AI代理开发。从自动化繁琐任务到解决动态决策中的挑战,LLM代理正在挑战曾经被认为不可能的界限。

随着我们进入空间计算时代,设想一个世界,计算机与现实无缝融合,AI代理的重要性变得至关重要。想象一下通过语言和手势指令代理完成任务,具有无与伦比的推理和行动能力。然而,我们正处于AI代理革命的黎明期,见证着新的基础设施、工具和框架的诞生,这些赋予代理应对越来越复杂任务的能力。剪裁多智能体聊天系统的先进框架Autogen,在我们的探索中扮演重要的角色。

在这篇文章中,让我们一起揭开AI代理革命的早期阶段的细节,深入了解Autogen的能力,并探索如何让这些智能实体焕发生机。

“自动聚类的启动:探索多智能体框架的基础知识” 四海 第1张

学习目标

  • 了解什么是LLM代理
  • 学习Autogen是什么,并探索使用Autogen构建代理的基础知识
  • 使用Autogen和OpenAI API构建代理
  • 探索LLM代理的现实世界应用案例

本文是《数据科学博文马拉松》的一部分。

什么是LLM代理?

传统的语言模型在许多方面都表现出色,例如翻译、问答等。然而,它们的知识和能力是有限的。这就像是一名泥瓦工在修筑房子时缺少工具一样。然而,有观察发现,LLM代理在给予必要的工具后能够进行推理和行动。大多数LLM代理对世界的了解有限,但我们可以通过提示将它们与自定义来源的信息进行增强。

我们可以通过两种方法实现这一目标:检索增强生成和LLM代理。在检索增强生成中,我们通过自定义的硬编码流程将信息提供给模型。但对于代理来说,基于其推理,LLM代理将利用其掌握的工具。例如,带有Serp工具的GPT-4将浏览互联网并相应地回答,或者在可以访问雅虎金融工具时,它可以获取和分析股票表现。因此,LLM模型、工具和用于推理和采取行动的框架的组合就是AI代理的概念。

构建LLM代理的平台和工具急剧增长。Autogen就是其中之一。让我们了解一下Autogen是什么,以及如何使用它来创建LLM代理。

什么是Autogen?

Autogen是微软推出的一款面向构建稳定多智能体应用的开源工具。该工具从头开始设计,充分考虑到多智能体之间的通信。它允许我们创建LLM应用程序,其中多个代理互相对话以找到解决方案。这些代理是高度可定制的,意味着我们可以引导它们执行特定的任务。它还与Langchain工具生态系统完美集成,这意味着我们可以利用现有的Langchain工具来增强我们的代理。

“自动聚类的启动:探索多智能体框架的基础知识” 四海 第2张

为了完成任务,Autogen提供了不同类型的代理,包括:

  • 助理代理:负责完成编码、审核等任务
  • 用户代理:如其名称所示,这些代理代表最终用户行动。这些代理将人类引入代理循环,以引导对话
  • 可教授代理:该代理被配置为易于教授。我们可以向代理提供LLM中缺失的显式信息

我们在大多数情况下只需要一个助理代理和用户代理进行配置。所以,让我们看看如何使用 Autogen 配置代理。RAG 还配置了其他代理,如 RetrieveAssistantAgent 和 RetrieveUserProxy 代理。

下面是典型多代理工作流程的图表。

“自动聚类的启动:探索多智能体框架的基础知识” 四海 第3张

使用 Autogen 构建代理

现在,让我们深入了解如何配置 Autogen 代理。但在此之前,先设置环境。如果用例需要执行代码,代理将在当前环境中执行,根据官方文档,最好在容器内执行。要快速入门,您可以使用GitHub codespaces。确保安装了 “pyautogen”。

目前,Autogen 仅支持 OpenAI 模型。为了有效地使用代理,我们需要配置我们的模型。我们可以配置多个 OpenAI 模型并使用我们需要的模型。有不同的方法可以配置模型,但我们将定义一个 JSON 文件。

JSON 文件

#OAI_CONFIG_LIST[    {        "model": "gpt-4",        "api_key": "<your OpenAI API key here>"    },    {        "model": "gpt-4",        "api_key": "<your Azure OpenAI API key here>",        "base_url": "<your Azure OpenAI API base here>",        "api_type": "azure",        "api_version": "2023-07-01-preview"    },    {        "model": "gpt-3.5-turbo",        "api_key":  "<your OpenAI API key here>"    }]

现在,为模型定义一个配置列表。

import autogenconfig_list = autogen.config_list_from_json(    "OAI_CONFIG_LIST",    filter_dict={        "model": {            "gpt-3.5-turbo"        }    })

该方法首先在环境变量中搜索 “OAI_CONFIG_LIST”。如果失败,它将在当前目录中搜索 “OAI_CONFIG_LIST” Json 文件。filter_dict 用于基于一些参数来过滤模型,这里设置为 “model”。

LLM 的配置

现在,我们定义 LLM 的配置。在这个例子中,我们将使用 Jupyter Notebook 的函数工具来运行 Python 脚本以完成简单的图表绘制任务。

llm_config = {    "functions": [        {            "name": "python",            "description": "run cell in ipython and return the execution result.",            "parameters": {                "type": "object",                "properties": {                    "cell": {                        "type": "string",                        "description": "Valid Python cell to execute.",                    }                },                "required": ["cell"],            },        },    ],    "config_list": config_list,    "timeout": 120,}

我们将定义在 IPython 笔记本中运行 Python 脚本的函数。

from IPython import get_ipythondef exec_python(cell):    ipython = get_ipython()    result = ipython.run_cell(cell)    log = str(result.result)    if result.error_before_exec is not None:        log += f"\n{result.error_before_exec}"    if result.error_in_exec is not None:        log += f"\n{result.error_in_exec}"    return log

使用助理代理和用户代理

我们快要完成我们的多代理系统。唯一缺少的部分是我们之前提到的代理。在这里,我们将需要一个助理代理和一个用户代理。这是如何定义这些代理的。

chatbot = autogen.AssistantAgent(    name="chatbot",    system_message="For coding tasks, only use the functions you have been provided with. \                    Reply TERMINATE when the task is done.",    llm_config=llm_config,)# create a UserProxyAgent instance named "user_proxy"user_proxy = autogen.UserProxyAgent(    name="user_proxy",    is_termination_msg=lambda x: x.get("content", "") and x.get("content", "").\                       rstrip().endswith("TERMINATE"),    human_input_mode="NEVER",    max_consecutive_auto_reply=10,    code_execution_config={"work_dir": "coding"},)

UserProxyAgent具有human_input_mode参数,该参数基于其值在代理循环中放置了一个实际的人。当设置为ALWAYS时,它在每个响应后都会请求输入;对于TERMINATE,在执行结束时只会请求一次输入;对于NEVER,不会请求用户输入。

使用用户代理注册函数。

user_proxy.register_function(    function_map={        "python": exec_python,    })

现在,运行代理。

# 开始对话user_proxy.initiate_chat(    chatbot,    message="绘制正弦波曲线",)

运行代理将在您的系统上显示有关正在发生的日志。

执行日志

“自动聚类的启动:探索多智能体框架的基础知识” 四海 第4张

在上面的执行日志中,您可以看到助手代理“chatbot”生成代码,然后运行该代码并找到潜在错误。然后用户代理将错误发送回助手,并再次运行解决方案代码,即在此示例中安装Matplotlib,并最后运行最终代码并返回输出。

我们还可以通过向对话中添加另一个助手代理(例如评论家或评审员)来扩展功能,以使输出更加个性化。以下是您可以实现此功能的方法。

critic = autogen.AssistantAgent(    name="Critic",    system_message="""Critic。您是一位乐于助人的助手,擅长通过提供从1(差)到10(好)的分数来评估给定可视化代码的质量,并提供明确的理由。
			                您必须考虑每个评估的可视化最佳实践。
	        具体而言,您可以仔细评估以下维度上的代码-错误(bugs):是否存在错误、逻辑错误、语法错误或拼写错误?代码可能无法编译的原因是什么?应如何修复?如果存在任何错误,则错误分数必须小于5。
			- 数据转换(transformation):数据是否已适当转换以适应可视化类型?例如,如果需要,是否正确过滤、聚合或分组数据集?如果使用日期字段,是否首先将日期字段转换为日期对象?您必须为上述每个维度提供分数。{bugs: 0, transformation: 0, compliance: 0, type: 0, encoding: 0, aesthetics: 0}。
            不要建议代码。最后,基于以上批评,建议编码人员采取一系列具体行动来改进代码。
            """,
    llm_config=llm_config,)groupchat = autogen.GroupChat(agents=[user_proxy, coder, critic], messages=[], max_round=12)manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=llm_config)user_proxy.initiate_chat(manager, message="在-pi/2至pi/2区域中绘制反正弦波曲线")

上述运行将添加一个评论家来提出绘图改进意见,而助手将尝试生成符合规范的代码。当我们需要多于两个代理时,我们使用聊天管理器。

在此示例中,我们使用了GPT 3.5。对于更复杂的编码和推理任务,首选GPT-4。像GPT-4这样功能强大的模型可以用更少的代理完成更多工作。此外,GPT-3.5有时会陷入循环中。因此,对于严格的应用场景,GPT-4是一个更好的选择。此外,正在开发一种新类型的实验性EcoAssistantcode)。该代理通过模型层次结构解决了使用GPT-4等功能强大模型的高成本问题。
启动使用成本效益模型进行对话,如果未实现最终目标,则使用功能强大但代价高的模型。这种方法的一个显著优点是协同效应。因为代理共享单个数据库,所以更大的模型生成的代码可以在以后由较小的模型检索。从而提高效率并降低成本。

实际应用案例

在现实世界中,AI代理的范围是巨大的。许多公司已经开始将代理纳入其现有系统。以下是一些非常有用的AI代理的用例。

<ul><li><strong>个人代理</strong>:AI代理人的最关键用途之一就是像Tony Stark电影中的Jarvis一样成为电子设备上的个人助理,根据文字、语音或手势命令完成任务。</li><li><strong>AI教师</strong>:聊天模型只能处理有限的任务,而带有工具的AI代理人可以做更多。在教育、法律和治疗等各个领域,AI教师可以对许多用户提供帮助。</li><li><strong>软件用户体验</strong>:通过实施高效的代理人,可以大大增强软件用户体验。AI代理人可以根据语音命令(如订餐、打车、购物等)自动完成任务,取代手动浏览和点击按钮的方式。</li><li><strong>空间计算</strong>:AI代理人将成为空间计算的先驱,传统计算机将无缝地与现实世界融为一体。这些代理人可以处理您周围的数据,提取有用信息并执行复杂操作。</li></ul><h2 id=”conclusion”>结论</h2><p>AI代理人越来越受欢迎。未来,毫无疑问它们将以某种方式整合到大多数软件系统中。这仍然是代理人开发的最初阶段,类似于90年代的互联网。很快,将会有更好的代理人来解决新颖的问题。而像Langchain这样的库和工具只会不断发展进步。</p><h4 id=”key-takeaways”>要点</h4><ul><li>Autogen是微软的开源多代理应用程序框架。</li><li>Autogen可以帮助我们轻松构建用于解决复杂任务的多代理系统。</li><li>它提供了助理代理和用户代理来执行诸如代码生成、文本生成等任务。</li><li>对于像文本生成这样基本的任务,使用GPT-3.5是可以的,但更复杂的编码任务需要像GPT-4这样能力更强的模型。</li></ul><h2 id=”frequently-asked-question”>常见问题</h2><p><strong>本文章中提供的媒体内容并非Analytics Vidhya所有,仅供作者自行决定使用。</strong></p>

Leave a Reply

Your email address will not be published. Required fields are marked *