介绍
踏上一段激动人心的旅程,探索多智能体框架的基础知识,并进入软件开发的未来,这就是“自动产生:探索多智能体框架基础”的主题。在OpenAI的ChatGPT之后,一个名为LLM(LLM agent)的专业领域正在经历前所未有的飞速发展,彻底改变了AI代理开发。从自动化繁琐任务到解决动态决策中的挑战,LLM代理正在挑战曾经被认为不可能的界限。
随着我们进入空间计算时代,设想一个世界,计算机与现实无缝融合,AI代理的重要性变得至关重要。想象一下通过语言和手势指令代理完成任务,具有无与伦比的推理和行动能力。然而,我们正处于AI代理革命的黎明期,见证着新的基础设施、工具和框架的诞生,这些赋予代理应对越来越复杂任务的能力。剪裁多智能体聊天系统的先进框架Autogen,在我们的探索中扮演重要的角色。
在这篇文章中,让我们一起揭开AI代理革命的早期阶段的细节,深入了解Autogen的能力,并探索如何让这些智能实体焕发生机。
学习目标
- 了解什么是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工具来增强我们的代理。
为了完成任务,Autogen提供了不同类型的代理,包括:
- 助理代理:负责完成编码、审核等任务
- 用户代理:如其名称所示,这些代理代表最终用户行动。这些代理将人类引入代理循环,以引导对话
- 可教授代理:该代理被配置为易于教授。我们可以向代理提供LLM中缺失的显式信息
我们在大多数情况下只需要一个助理代理和用户代理进行配置。所以,让我们看看如何使用 Autogen 配置代理。RAG 还配置了其他代理,如 RetrieveAssistantAgent 和 RetrieveUserProxy 代理。
下面是典型多代理工作流程的图表。
使用 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="绘制正弦波曲线",)
运行代理将在您的系统上显示有关正在发生的日志。
执行日志
在上面的执行日志中,您可以看到助手代理“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是一个更好的选择。此外,正在开发一种新类型的实验性EcoAssistant(code)。该代理通过模型层次结构解决了使用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>