LLM之Agent(九)| 通过API集成赋能Autogen Multi-Agent系统

       随着大型语言模型的快速发展,构建基于LLM驱动的自治代理(autonomous agents)已经成为一个备受关注的话题。仅在过去一年中,就出现了许多基于这一理念的新技术和框架。

​      本文将探索微软开源的Agent框架:Autogen。它弥补了此类新技术未能解决的空白:允许多个Agent协作以实现共同目标。它在LLM之上添加了最小但重要的功能,以支持多个代理的初始化和协作,允许在多个Agent之间单聊以及群聊。

       但作为一个仍处于早期阶段的框架,通过API把Autogen集成到实际的生产环境中仍然是一个挑战,如Web APP。由于缺乏成熟的文档或资源,在Agent通信流中需要一些变通方法。

       因此,在本文中,我们将讨论Autogen Agent连接到API的详细过程。

一、Autogen介绍

       在之前的LLM之Agent(七)|  AutoGen介绍文章中介绍过Autogen,它是一个基于LLM的Agent通信框架,支持创建具有不同人物角色的代理。然后,这些代理可以进行单聊;也可以进行群聊,每个代理轮流发言。

Autogen提供了一些具有不同功能的内置代理类型,例如:

  • User Proxy Agent:可以检索用户输入并执行代码;
  • Assistant Agent:默认的系统消息代理,该消息允许Agent充当完成任务的助理;
  • Conversable Agent:在user proxy agents和assistant之间构建会话能力。

虽然Autogen主要支持OpenAI LLM,如GPT-3.5和GPT-4来创建代理,但用户也可以与本地或其他托管LLM一起使用。

二、Autogen群聊

       Autogen中的群聊功能允许多个代理在群设置中进行协作,主要特点如下:

  • 每个代理都可以看到组中其他代理发送的所有消息;
  • 一旦启动,群聊将继续,直到满足其中一个终止条件。(例如:代理在回复中使用终止消息,用户选择退出聊天,达到群的最大聊天次数等)
  • 每个群聊都有一个管理代理,负责监督消息广播、发言人选择和聊天终止。
  • Autogen在每轮聊天中选择下一位发言人,目前支持四种方法

        -manual:要求用户手动选择下一个发言人

        -random:随机选择下一个发言人

        -round robin:使用循环方法选择下一个发言人

        -auto:让LLM选择下一个有聊天历史记录作为上下文的发言人

       这些特性使Autogen群聊成为Agent协作的理想选择。然而,如果想控制Agent在此环境中更多的协作方式时,也会带来很多挑战。

三、使用Autogen开发应用程序

      目前,Autogen旨在作为一种工具使用,用户可以完全了解不同代理之间的所有内部通信。这使得将Autogen集成到用户不应该知道这些信息的应用程序中成为一项棘手的工作。

       例如,如果您构建了一个系统,其中多个代理共同担任销售助理,那么在决定对用户查询的最终响应之前,您可能不想公开他们是如何在内部规划和选择销售策略的。您也可能不想让用户暴露在这种内部沟通的复杂性中。

       除此之外,在尝试将Autogen代理系统与API集成时,我们还面临以下问题:

  • Autogen主要是一个CLI工具。(例如:它将代理消息打印到CLI,并提示用户通过CLI提供反馈);
  • Autogen无法在没有明确用户输入的情况下提供一致的方式来结束特定的聊天序列。

但好消息是,我们可以使用Autogen已经支持的某些定制来解决这些问题。我们能够将Autogen集成到API中。

下面通过旅游代理系统来演示一下如何将AutoGen与API进行集成:

四、基于Autogen的旅游代理系统

       该系统将由两个Autogen Assistant Agent和一个User Proxy Agent构建,在群聊中这些代理人中的每一位都有以下职责:

  • Tour Agent:主代理决定如何响应用户查询以及在生成对用户的最终响应之前应收集的信息;
  • Location Researcher:旅游代理的助理,在通过SERP API查询谷歌地图的函数调用的帮助下进行位置研究。它使代理商能够研究用户心目中与目的地相关的景点、餐厅、住宿等;
  • User Proxy:代理群聊天中用户的代理。

由于本教程依赖于OpenAI和SERP API,因此您需要每个服务的API密钥来尝试本示例。

4.1 Autogen config

首先,定义AutoGen的配置:

config_list = [{
  'model': 'gpt-3.5-turbo-1106','api_key': os.getenv("OPENAI_API_KEY"),}]

4.2 Assistant Agents

然后,创建两个助理代理:Tour AgentLocation Researcher

       Tour Agent是一个简单的Assistant Agent,具有一个自定义的系统提示,用于描述其角色和职责,它指定代理应如何将TERMINATE添加到针对用户的最终回答的末尾。

tour_agent = AssistantAgent(
### LLM-Based Multi-Agent System 实现与应用 #### 大型语言模型多代理系统概述 LLM-based Multi-Agent System (LLM-MA) 是一种先进的AI架构,该架构融合了大语言模型和多智能体系统的优点。此系统能够处理复杂的任务并支持多种应用场景,如科学辩论、自动GUI测试等[^1]。 #### 科学辩论场景的应用实例 在特定的任务中,比如科学辩论场景下,LLM-MA 中的智能体会互相交流观点以提升集体推理能力。这样的互动有助于提高大规模多任务语言理解(MMLU)、解决数学问题以及应对 StrategyQA 类挑战的能力[^3]。 #### 自动化GUI 测试案例研究 另一个实际例子来自 DroidAgent 项目,在该项目里开发了一个基于大型语言模型的自主 GUI 测试代理。这个代理能依据应用程序功能设定具体的目标并通过交互完成它们,进而增强了 Android 应用程序界面测试的效果和范围[^2]。 #### 技术细节探讨 对于技术实现方面,考虑到不同类型的环境需求,例如捕食者与猎物模拟器或是协作通讯导航平台,研究人员设计了一套机制让所有参与节点可以在一定条件下发送受限长度的信息给其他成员。当涉及到 SchedNet 的性能评估时,则会对比几种不同的方法论来进行分析,包括但不限于 IDQN 和 COMA 这样的无通信协议方案,还有像 DIAL 变种那样允许有限带宽内传递数据的技术路线[^4]。 ```python class Agent: def __init__(self, id, bandwidth_limit): self.id = id self.bandwidth_limit = bandwidth_limit def broadcast_message(self, message_content): if len(message_content) <= self.bandwidth_limit: print(f"Agent {self.id} broadcasts: {message_content}") else: raise ValueError("Message exceeds the allowed bandwidth limit.") def simulate_agents_communication(agents_list, environment_setup): for agent in agents_list: try: # Simulate broadcasting within given constraints of each agent's setup. agent.broadcast_message(environment_setup['test_message']) except Exception as e: print(e) # Example usage with two agents having different bandwidth limits. simulate_agents_communication([Agent(id=1, bandwidth_limit=50), Agent(id=2, bandwidth_limit=80)], {'test_message': 'This is a test.'}) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wshzd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值