Type something to search...
AutoGen:智能自动化的代理开放源码框架

AutoGen:智能自动化的代理开放源码框架

AutoGen是微软提供的一个开源框架,用于构建能够通过对话模式协作完成任务的智能体。AutoGen简化了AI开发和研究,支持多种大型语言模型(LLMs)、集成工具和先进的多智能体设计模式。您可以在本地开发和测试智能体系统,然后根据需求将其部署到分布式云环境中。

该框架允许开发者通过多个智能体构建LLM应用,这些智能体可以相互对话以完成任务。AutoGen智能体是可定制的、可对话的,并且可以在多种模式下运行,结合使用LLMs、人类输入和工具。使用AutoGen,开发者还可以灵活定义智能体的交互行为。自然语言和计算机代码都可以用于为不同应用编程灵活的对话模式。AutoGen作为一个通用基础设施,支持构建各种复杂性和LLM能力的多样化应用。实证研究证明了该框架在许多示例应用中的有效性,涵盖了数学、编码、问答、运筹学、在线决策、娱乐等多个领域。您可以将此应用视为ChatGPT + 代码解释器 + 插件 + 完全可定制。

该框架主要具有以下特性:

可对话智能体:

  • 一种设计智能体的方式,可以使用LLMs、人类输入、工具或这些的组合,创建具有不同角色的智能体。
  • 它们基本上扮演可对话的角色——具有特定角色的实体,可以发送和接收信息,与其他可对话智能体进行消息传递。例如,开始或继续对话。
  • 它们也是可定制的,即每个智能体可以根据特定应用需求进行配置,在多智能体对话中展示复杂行为,使用基本后端类型的混合。

对话编程:

  • 以智能体间对话为中心的编程范式
  • 在多智能体对话中融合计算和控制流的范式。
  • 融合编程和自然语言控制。
  • 计算: 角色特定、以对话为中心的动作。
  • 控制流: 由智能体之间的对话动态定义。
  • 效率: 为不同技能水平的AI开发提供简化。

AutoGen具有统一接口的设计模式,展示了智能体交互的标准化接口。它还具有自动回复机制,以保持持续的对话流。还支持动态对话,支持静态和动态流。它提供可定制的回复功能,以适应性对话。

现在让我们看看如何构建一个简单的智能体。

构建一个简单的代理与 Autogen

安装包

!pip install pyautogen
from autogen import AssistantAgent, UserProxyAgent, config_list_from_json, GroupChat, GroupChatManager
## 从环境变量或文件加载 LLM 推理端点
## 参见 https://microsoft.github.io/autogen/docs/FAQ#set-your-api-endpoints
config_list = config_list_from_json(env_or_file="OAI_CONFIG_LIST", filter_dict={"model" : "gpt-4o-mini"})

示例或如何创建的内容是“OAI_CONFIG_LIST”

创建 AssistantAgent

assistant = autogen.AssistantAgent(
    name="assistant",
    llm_config={
        "seed": 42,  # 用于缓存和可重复性的种子
        "config_list": config_list,  # OpenAI API 配置列表
        "temperature": 0,  # 采样的温度
    },
)

创建一个 AI 助手代理

  • name: 将代理标识为 “assistant”
  • llm_config : 语言模型的配置:
  • seed: 设置为 42 以获得可重复的结果
  • config_list : 包含 OpenAI API 设置(来自之前的配置)
  • temperature : 设置为 0 以获得最确定/集中的响应

创建 UserProxyAgent

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,
    },
)

创建一个代表用户的代理

  • name : 将代理标识为 “user_proxy”
  • human_input_mode=”NEVER”: 自动运行,无需人工干预
  • max_consecutive_auto_reply=10: 限制连续交流为 10 条消息
  • is_termination_msg: 一个函数,用于检查消息是否应结束对话(查找结尾的“TERMINATE”)
  • code_execution_config: 代码执行的设置:
  • work_dir: 代码将被执行的目录(“coding”)
  • use_docker: 禁用(可以启用以实现隔离的代码执行)

聊天启动

user_proxy.initiate_chat(
    assistant,
    message="""今天是什么日期?比较 META 和 TESLA 的年初至今的收益。"""
)

输出:

这些是他们在文件夹中生成的文件。

终端中的输出如下所示。

如何构建一个带有 Autogen 的研究助手

让我们构建一个研究代理。以下是显示每个代理所有职责的框图。

让我们逐一查看代理的每个查询。

1. user_proxy = UserProxyAgent(…)

  • 目的: 代表一个批准计划的人类管理员。
  • 属性:
  • name: “Admin” — 标识角色。
  • system_message: 描述管理员在与规划者互动中的角色。
  • code_execution_config: 设置为 False,表示该代理不执行代码。
user_proxy = UserProxyAgent(
  name="Admin",
  system_message="A human admin. Interact with a planner to discuss the plan of execution. This plan needs to be approved by this admin.",
  code_execution_config=False
)

2. planner = AssistantAgent(…)

  • 目的: 根据反馈建议和修订计划。
  • 属性:
  • name: “Planner” — 确定角色。
  • system_message: 描述规划者的职责,包括涉及工程师和科学家。
  • llm_config: 语言模型的配置,gpt4o_config。
planner = AssistantAgent(
  name='Planner',
  system_message='Planner. Suggest a plan. Revise the plan based on feedback from a critic agent.\
    The plan may involve an engineer who can write code and a scientist who doesn’t write code. \
    Explain the plan first. Be clear which step is performed by an engineer, and which step is performed by a scientist.',
  llm_config=gpt4o_config,

)

3. engineer = AssistantAgent(…)

  • 目的: 根据已批准的计划编写和执行代码。
  • 属性:
  • name: “Engineer” — 标识角色。
  • system_message: 详细说明工程师的任务,包括编写和调试代码。
  • llm_config: 语言模型的配置。
engineer = AssistantAgent(
  name="Engineer",
  llm_config=gpt4o_config,
  system_message="""Engineer. You follow an approved plan. You write Python/shell code to solve tasks.\
    Wrap the code in a code block that specifies the script type. The user can't modify your code. Don't include multiple code blocks in one response. \
    Do not ask others to copy and paste the result. Check the execution result returned by the executor. \
    If the result indicates there is an error, fix the error and output the code again. Suggest the full code instead of partial code or code changes.\
    If the error can't be fixed or if the task is not solved even after the code is executed successfully, analyse the problem."""
)

4. scientist = AssistantAgent(…)

  • 目的: 分析研究并对论文进行分类。
  • 属性:
  • name: “Scientist” — 确定角色。
  • system_message: 描述科学家在分类论文和提供报告中的角色。
  • llm_config: 语言模型的配置。
scientist = AssistantAgent(
  name="Scientist",
  llm_config=gpt4o_config,
  system_message="""Scientist. You follow an approved plan. You are able to categorize papers after seeing their abstracts printed. You don't write code.\
    you provided detailed resource  reports for the ResearchWriter to write comprehensive research reports."""
)

5. executor = UserProxyAgent(…)

  • 目的: 执行工程师编写的代码。
  • 属性:
  • name: “Executor” — 确定角色。
  • system_message: 描述执行者运行代码的任务。
  • human_input_mode: 设置为“NEVER”,表示不需要人类输入。
  • code_execution_config: 代码执行的配置,包括消息历史和工作目录。
executor = UserProxyAgent(
  name="Executor",
  system_message="Executor. Execute the code written by the engineer and report the result.",
  human_input_mode="NEVER",
  code_execution_config={
      "last_n_messages": 3,
      "work_dir": "paper",
      "use_docker": False,
  }
  # Please set use_docker=True if docker is available to run the generated code. Using docker is safer than running the generated code directly.
)

6. critic = AssistantAgent(…)

  • 目的: 审查并提供对计划、代码和报告的反馈。
  • 属性:
  • 名称: “Critic” — 确定角色。
  • 系统消息: 描述评论者在验证信息和提供反馈中的角色。
  • llm_config: 语言模型的配置。
critic = AssistantAgent(
  name="Critic",
  system_message="Critic. Double check, claims, code and report from other agents and provide feedback. \
  Check whether the final research report includes adding verifiable info such as source ",
  llm_config=gpt4o_config,
)

7. research_report_writer = AssistantAgent(…)

  • 目的: 撰写综合性的研究报告。
  • 属性:
  • 名称: “ResearchWriter” — 确定角色。
  • 系统消息: 详细说明报告撰写过程,包括章节和引用要求。
  • llm_config: 语言模型的配置
research_report_writer = AssistantAgent(
  name='ResearchWriter',
  system_message='Research Report Writer. Write a research report based on the findings from the papers categorized by the scientist and exchange with critic to improve \
  the quality of the report.\
  The report should include the following sections: Introduction, Literature Review, Methodology, Results, Conclusion, and References.\
  The report should be written in a clear and concise manner. Make sure to include proper citation and references.',
  llm_config=gpt4o_config
)

8. groupchat = GroupChat(…)

  • 目的: 初始化一个包含多个代理的群聊。
  • 属性:
  • agents: 参与聊天的代理列表(user_proxy, planner, engineer, scientist, executor, critic, research_report_writer)。
  • messages: 一个空列表 [] 用于存储聊天中交换的消息。
  • max_round: 设置为 50,表示允许的最大互动轮数。
groupchat = GroupChat(
  agents=[user_proxy, planner, engineer, scientist, executor, critic, research_report_writer],
  messages=[],
  max_round=50
)

9. manager = GroupChatManager(…)

  • 目的:管理群聊,协调互动,确保顺畅的沟通。
  • 属性
  • groupchat: 上面创建的群聊实例。
  • llm_config: 语言模型的配置,gpt4o_config。
manager = GroupChatManager(groupchat=groupchat, llm_config=gpt4o_config)

关键点:

  • 代理:每个代理都有特定的角色,参与规划、编码、执行、审查和报告等任务。
  • 消息:聊天系统旨在处理和存储代理之间的消息。
  • 轮次:限制交互次数,以确保效率并防止无休止的循环。
output_report = user_proxy.initiate_chat(manager, message = "Write a 4 paragraph research report about how to use LLMs to enhance personal productivity?")

输出快照

微软还推出了 AutoGen Studio:一个用于构建多代理工作流的低代码界面。

请在这里了解更多信息。

主要收获:

  • AutoGen 框架中的代理通过消息交换进行协作,这类似于对话,使它们能够协调并分享信息以高效完成任务。
  • AutoGen 中的可对话代理是灵活的实体,可以切换角色并与其他代理交换消息,使其能够根据应用程序的需求执行不同的任务。
  • 可对话代理中的 “人类输入模式” 设置允许开发者决定在代理执行期间是否允许或需要人类输入。
  • AutoGen 中的对话编程允许代理通过自然语言对话交换消息并自主执行任务,同时能够控制任务的流程。这将自然语言交互与确定性计算相结合,为 AI 工作流程提供灵活性。
  • AutoGen 中的标准化接口提供了更好的控制,确保代理之间消息交换的动态性,一致性和可预测性,同时仍然支持灵活和动态的交互模式。
  • AutoGen Studio 旨在提供一个基于聊天的界面,简化与基于 AutoGen 的代理的构建和交互。它允许用户在直观和灵活的环境中执行各种任务和工作流程。
  • LangChain 框架与微软的 AutoGen 框架在构建代理方面的主要区别在于,LangChain 专注于连接模型和工具以构建工作流程,而 AutoGen 强调使用对话模式进行交互的协作代理,以完成任务,引入了一种不同的基于代理的工作流程方法。

未来计划:

  • 应对越来越复杂的基准测试和现实场景
  • 引入具有学习和自我提升能力的智能体
  • 理解图像和截图
  • 系统性地探索和搜索

如果您觉得这有帮助,请点赞 👏 或评论❤️🙏

参考文献:

  1. https://github.com/microsoft/autogen
  2. https://arxiv.org/abs/2308.08155
  3. https://www.microsoft.com/en-us/research/blog/autogen-enabling-next-generation-large-language-model-applications/
  4. 版权(Youtube 视频来自): Matthew Berman, Lucas Soares
  5. https://www.microsoft.com/en-us/research/blog/introducing-autogen-studio-a-low-code-interface-for-building-multi-agent-workflows/
  6. https://autogen-studio.com/

Related Posts

使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
10 个强大的 Perplexity AI 提示,让您的营销任务自动化

10 个强大的 Perplexity AI 提示,让您的营销任务自动化

在当今快速变化的数字世界中,营销人员总是在寻找更智能的方法来简化他们的工作。想象一下,有一个个人助理可以为您创建受众档案,建议营销策略,甚至为您撰写广告文案。这听起来像是一个梦想? 多亏了像 Perplexity 这样的 AI 工具,这个梦想现在成为现实。通过正确的提示,您可以将 AI 转变为您的 个人营销助理。在本文中,我将分享 10 个强大的提示,帮助您自动

阅读更多
10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

人工智能技术,如机器学习、自然语言处理和数据分析,正在重新定义传统设计方法。从自动化重复任务到实现个性化用户体验,人工智能使设计师能够更加专注于战略思维和创造力。随着这一趋势的不断增长,UI/UX 设计师越来越多地采用 AI 驱动的工具来促进他们的工作。利用人工智能不仅能提供基于数据的洞察,还为满足多样化用户需求的创新设计解决方案开辟了机会。 1. 用户角色开发 目的

阅读更多
在几分钟内完成数月工作的 100 种人工智能工具

在几分钟内完成数月工作的 100 种人工智能工具

人工智能(AI)的快速发展改变了企业的运作方式,使人们能够在短短几分钟内完成曾经需要几周或几个月的任务。从内容创作到网站设计,AI工具帮助专业人士节省时间,提高生产力,专注于创造力。以下是按功能分类的100个AI工具的全面列表,以及它们在现实世界中的使用实例。 1. 研究工具 研究可能耗时,但人工智能工具使查找、分析和组织数据变得更加容易。**ChatGPT, Cop

阅读更多
你从未知道的 17 个令人惊叹的 GitHub 仓库

你从未知道的 17 个令人惊叹的 GitHub 仓库

Github 隐藏的宝石!! 立即收藏的代码库 学习编程相对简单,但掌握编写更好代码的艺术要困难得多。GitHub 是开发者的宝藏,那里“金子”是其他人分享的精心编写的代码。通过探索 GitHub,您可以发现如何编写更清晰的代码,理解高质量代码的样子,并学习成为更熟练开发者的基本步骤。 1. notwaldorf/emoji-translate *谁需

阅读更多