Skip to main content

6 posts tagged with "AutoGen"

View All Tags

· 9 min read
Joshua Kim
Yishen Sun

FSM Group Chat

有限状态机(FSM)群聊允许用户约束代理转换。

TL;DR

最近发布了 FSM Group Chat,允许用户输入转换图来约束代理转换。随着代理数量的增加,这非常有用,因为转换对的数量(N 选 2 组合)呈指数级增长,增加了次优转换的风险,从而导致代币的浪费和/或结果不佳。

转换图的可能用例

  1. 单次工作流程,即我们希望每个代理只对问题进行一次处理,代理 A -> B -> C。
  2. 决策树流程,类似于决策树,我们从根节点(代理)开始,通过代理节点向下流动。例如,如果查询是 SQL 查询,则交给 SQL 代理,否则如果查询是 RAG 查询,则交给 RAG 代理。
  3. 顺序团队操作。假设我们有一个由 3 个开发人员代理组成的团队,每个人负责不同的 GitHub 仓库。我们还有一个由业务分析师组成的团队,讨论和辩论用户的整体目标。我们可以让开发团队的经理代理与业务分析团队的经理代理交谈。这样,讨论更加专注于团队,可以期望获得更好的结果。

请注意,我们不强制要求有向无环图;用户可以指定图为无环的,但循环工作流也可以用于迭代地解决问题,并在解决方案上添加额外的分析。

使用指南

我们添加了两个参数 allowed_or_disallowed_speaker_transitionsspeaker_transitions_type

  • allowed_or_disallowed_speaker_transitions:是一个期望类型为 {Agent: [Agent]} 的字典。键表示源代理,列表中的值表示目标代理。如果没有指定,则假定为完全连接图。
  • speaker_transitions_type:是一个期望类型为字符串的字符串,具体而言,是 ["allowed", "disallowed"] 中的一个。我们希望用户能够提供一个允许或禁止的转换字典,以提高使用的便利性。在代码库中,我们会将禁止的转换反转为允许的转换字典 allowed_speaker_transitions_dict

FSM 功能的应用

AutoGen 框架中,我们来快速演示如何启动基于有限状态机(FSM)的 GroupChat。在这个演示中,我们将每个代理都视为一个状态,并且每个代理根据特定条件发言。例如,用户始终首先发起任务,然后规划者创建计划。接下来,工程师和执行者交替工作,评论者在必要时进行干预,评论者之后只有规划者才能修改额外的计划。每个状态一次只能存在一个,并且状态之间存在转换条件。因此,GroupChat 可以很好地抽象为一个有限状态机(FSM)。

可视化

使用方法

  1. 准备工作
pip install autogen[graph]
  1. 导入依赖库

    from autogen.agentchat import GroupChat, AssistantAgent, UserProxyAgent, GroupChatManager
    from autogen.oai.openai_utils import config_list_from_dotenv
  2. 配置 LLM 参数

    # 请根据需要自行更改
    config_list = config_list_from_dotenv(
    dotenv_file_path='.env',
    model_api_key_map={'gpt-4-1106-preview':'OPENAI_API_KEY'},
    filter_dict={
    "model": {
    "gpt-4-1106-preview"
    }
    }
    )

    gpt_config = {
    "cache_seed": None,
    "temperature": 0,
    "config_list": config_list,
    "timeout": 100,
    }
  3. 定义任务

    # 描述任务
    task = """在上一角色输出的数字上加1。如果上一个数字是20,则输出"TERMINATE"。"""
  4. 定义代理

    # 代理配置
    engineer = AssistantAgent(
    name="Engineer",
    llm_config=gpt_config,
    system_message=task,
    description="""我**只能**在 `Planner`、`Critic` 和 `Executor` 之后**立即**发言。
    如果 `Critic` 提到的最后一个数字不是5的倍数,则下一个发言者必须是 `Engineer`。
    """
    )

    planner = AssistantAgent(
    name="Planner",
    system_message=task,
    llm_config=gpt_config,
    description="""我**只能**在 `User` 或 `Critic` 之后**立即**发言。
    如果 `Critic` 提到的最后一个数字是5的倍数,则下一个发言者必须是 `Planner`。
    """
    )

    executor = AssistantAgent(
    name="Executor",
    system_message=task,
    is_termination_msg=lambda x: x.get("content", "") and x.get("content", "").rstrip().endswith("FINISH"),
    llm_config=gpt_config,
    description="""我**只能**在 `Engineer` 之后**立即**发言。
    如果 `Engineer` 提到的最后一个数字是3的倍数,则下一个发言者只能是 `Executor`。
    """
    )

    critic = AssistantAgent(
    name="Critic",
    system_message=task,
    llm_config=gpt_config,
    5
  1. 在这个例子中,我们创建了一个多代理的聊天系统。每个代理都有特定的角色和限制条件。

  2. User代理是一个特殊的代理,它不能作为发言者。

  3. Planner代理在User之后发言,然后是Engineer代理。

  4. Engineer代理在Planner之后发言,然后可以是CriticExecutor代理。

  5. Critic代理在Engineer之后发言,然后又回到EngineerPlanner代理。

  6. Executor代理在Engineer之后发言。

  7. 这些限制条件和代理之间的关系构成了一个有向图,代表了聊天系统中的状态转换。

  8. 定义图表

    graph_dict = {}
    graph_dict[user_proxy] = [planner]
    graph_dict[planner] = [engineer]
    graph_dict[engineer] = [critic, executor]
    graph_dict[critic] = [engineer, planner]
    graph_dict[executor] = [engineer]
    1. 这个图表和上面提到的转换条件一起构成了一个完整的有限状态机(FSM)。两者都是必不可少的。
    2. 您可以根据需要进行可视化,如下所示:

    可视化

  9. 定义一个GroupChat和一个GroupChatManager

    agents = [user_proxy, engineer, planner, executor, critic]

    # 创建群聊
    group_chat = GroupChat(agents=agents, messages=[], max_round=25, allowed_or_disallowed_speaker_transitions=graph_dict, allow_repeat_speaker=None, speaker_transitions_type="allowed")

    # 创建管理器
    manager = GroupChatManager(
    groupchat=group_chat,
    llm_config=gpt_config,
    is_termination_msg=lambda x: x.get("content", "") and x.get("content", "").rstrip().endswith("TERMINATE"),
    code_execution_config=False,
    )
  10. 开始聊天

    # 初始化任务
    user_proxy.initiate_chat(
    manager,
    message="1",
    clear_history=True
    )
  11. 您可能会得到以下输出(我删除了可以忽略的警告):

    User (to chat_manager):

    1

    --------------------------------------------------------------------------------
    Planner (to chat_manager):

    2

    --------------------------------------------------------------------------------
    Engineer (to chat_manager):

    3

    --------------------------------------------------------------------------------
    Executor (to chat_manager):

    4

    --------------------------------------------------------------------------------
    Engineer (to chat_manager):
    ```python
    5

5


评论家(对话管理器):

6


工程师(对话管理器):

7


评论家(对话管理器):

8


工程师(对话管理器):

9


执行者(对话管理器):

10


工程师(对话管理器):

11


评论家(对话管理器):

12


工程师(对话管理器):

13


评论家(对话管理器):

14


工程师(对话管理器):

15


执行者(对话管理器):

16


工程师(对话管理器):

17


评论家(对话管理器):

18


工程师(对话管理器):

19


评论家(对话管理器):

20


规划者(对话管理器):

终止

笔记本示例

更多示例可以在notebook中找到。该笔记本包含了更多可能的转换路径示例,例如(1)中心和辐射,(2)顺序团队操作,以及(3)大声思考和辩论。它还使用了autogen.graph_utils中的visualize_speaker_transitions_dict函数来可视化各种图形。

· 3 min read
Gagan Bansal
AutoAnny Logo

Anny 是一个由 AutoGen 提供支持的 Discord 机器人,旨在帮助 AutoGen 的 Discord 服务器。

TL;DR

我们正在添加一个名为 Anny 的新示例应用程序——一个由 AutoGen 提供支持的简单 Discord 机器人,旨在协助 AutoGen 开发者。详细信息请参见 samples/apps/auto-anny

简介

在过去的几个月里,AutoGen 的用户数量和社区请求和反馈数量都有了大幅增长。 然而,满足这种需求和反馈需要手动筛选 GitHub 上的问题、PR 和讨论,以及管理 AutoGen Discord 社区的 14000 多名成员的消息。AutoGen 的开发者社区每天都需要执行许多任务,以下是一些常见的任务:

  • 回答问题
  • 识别和优先处理错误和功能
  • 保持对我们令人难以置信的社区的响应能力
  • 跟踪增长

这需要大量的工作。自动化工作流程和界面承诺为许多任务提供巨大的增值自动化,因此我们想,为什么不使用 AutoGen 来让我们的生活更轻松呢? 因此,我们转向自动化来帮助我们,并允许我们专注于最关键的事情。

Anny 的当前版本

目前的 Anny 版本非常简单——它使用 Discord API 和 AutoGen 来启用一个可以响应一系列命令的机器人。

例如,它支持像 /heyanny help(列出命令)、/heyanny ghstatus(GitHub 活动摘要)、/heyanny ghgrowth(GitHub 仓库增长指标)和 /heyanny ghunattended(列出未处理的问题和 PR)这样的命令。其中大多数命令使用多个 AutoGen 代理来完成这些任务。

要使用 Anny,请按照 samples/apps/auto-anny 中的说明操作。

它不仅适用于 AutoGen

如果您是管理自己项目的开源开发者,您可能会对我们的挑战有所共鸣。我们邀请您查看 Anny 并为其开发和路线图做出贡献。

· 11 min read
Adam Fourney
Qingyun Wu

AutoGenBench

AutoGenBench 是一个独立的工具,用于评估 AutoGen 代理和工作流在常见基准测试上的表现。

TL;DR

今天我们发布了 AutoGenBench - 一个用于评估 AutoGen 代理和工作流在已建立的 LLM 和代理基准测试上的工具。

AutoGenBench 是一个独立的命令行工具,可以从 PyPI 安装,它负责下载、配置、运行和报告支持的基准测试。AutoGenBench 在与 Docker 一起运行时效果最佳,因为它使用 Docker 来隔离各个测试。

快速入门

在 bash 终端中运行以下命令,快速开始。

注意:根据需要,您可能需要调整 OAI_CONFIG_LIST 的路径。

export OAI_CONFIG_LIST=$(cat ./OAI_CONFIG_LIST)
pip install autogenbench
autogenbench clone HumanEval
cd HumanEval
cat README.md
autogenbench run --subsample 0.1 --repeat 3 Tasks/human_eval_two_agents.jsonl
autogenbench tabulate Results/human_eval_two_agents

简介

测量和评估是每个重要的 AI 或 ML 研究项目的核心组成部分。AutoGen 也不例外。为此,今天我们发布了 AutoGenBench,一个独立的命令行工具,我们一直在使用它来指导 AutoGen 的开发。方便地,AutoGenBench 负责:下载、配置、运行和报告代理在各种公共基准测试数据集上的结果。除了报告总体数据外,每次 AutoGenBench 运行还会生成一套全面的日志和遥测数据,可用于调试、性能分析、计算自定义指标,并作为 AgentEval 的输入。在本博文的剩余部分,我们将概述 AutoGenBench 的核心设计原则(这对于理解其操作非常重要);介绍安装和运行 AutoGenBench 的指南;概述评估的路线图;最后呼吁贡献者的加入。

设计原则

AutoGenBench 的设计围绕着三个核心设计原则。了解这些原则将帮助您理解该工具、其操作和输出。这三个原则是:

  • 重复性: 语言模型是随机的,而且在很多情况下,它们编写的代码也是随机的,用来解决问题。例如,一个Python脚本可能会调用外部搜索引擎,而结果可能会因每次运行而异。这可能导致代理性能的差异。重复性是衡量和理解这种差异的关键。为此,AutoGenBench从头开始构建,理解任务可能会运行多次,并且我们通常希望衡量方差。

  • 隔离性: 代理与其所处的环境以微妙和明显的方式进行交互。例如,代理可能会安装一个Python库或将文件写入磁盘。这可能导致顺序效应,影响未来的测量结果。例如,考虑在一个共同的基准测试中比较两个代理。一个代理可能看起来比另一个代理更高效,仅仅是因为它是第二个运行的,并且受益于第一个代理在安装和调试必要的Python库方面所做的工作。为了解决这个问题,AutoGenBench将每个任务隔离在自己的Docker容器中。这确保所有运行都从相同的初始条件开始。(从一般角度来看,Docker也是运行代理生成的代码的一种更安全的方式。)

  • 仪器化: 虽然顶级指标非常适合比较代理或模型,但我们通常希望获得关于代理性能如何、它们在哪里卡住以及如何改进的更多信息。我们可能还会想到新的研究问题,需要计算一组不同的指标。为此,AutoGenBench被设计为记录所有内容,并从这些日志中计算指标。这确保我们始终可以回到日志中回答关于发生了什么事情的问题,运行性能分析软件,或将日志输入到像AgentEval这样的工具中。

安装和运行AutoGenBench

如上所述,隔离性是一个关键的设计原则,因此AutoGenBench必须在支持Docker的环境中运行(桌面版或Engine)。它无法在GitHub codespaces中运行,除非您选择原生执行(这是强烈不推荐的)。要安装Docker Desktop,请参阅https://www.docker.com/products/docker-desktop/。 安装了Docker之后,可以从PyPI安装AutoGenBench作为一个独立的工具。使用pip,可以按照以下方式进行安装:

pip install autogenbench

安装完成后,您必须配置您的API密钥。与其他AutoGen应用程序一样,AutoGenBench将在当前工作目录中的OAI_CONFIG_LIST文件或OAI_CONFIG_LIST环境变量中查找OpenAI密钥。可以使用命令行参数覆盖此行为。

如果您将运行多个基准测试,通常最方便的方法是利用环境变量选项。您可以通过执行以下命令将您的密钥加载到环境变量中:

将当前目录下的 OAI_CONFIG_LIST 文件的内容赋值给环境变量 OAI_CONFIG_LIST。

一个典型的会话

一旦安装了AutoGenBench和必要的密钥,一个典型的会话将如下所示:

autogenbench clone HumanEval
cd HumanEval
cat README.md
autogenbench run --subsample 0.1 --repeat 3 Tasks/human_eval_two_agents.jsonl
autogenbench tabulate results/human_eval_two_agents

其中:

  • autogenbench clone HumanEval 下载并展开HumanEval基准场景。
  • cd HumanEval; cat README.md 导航到基准目录,并打印README(您应该始终阅读!)
  • autogenbench run --subsample 0.1 --repeat 3 Tasks/human_eval_two_agents.jsonl 运行在Tasks/human_eval_two_agents.jsonl中定义的任务的10%子样本。每个任务运行3次。
  • autogenbench tabulate results/human_eval_two_agents 对运行结果进行表格化处理。

运行上述tabulate命令后,您应该会看到类似以下的输出:

                 Trial 0    Trial 1    Trial 2
Task Id Success Success Success
------------- --------- --------- ---------
HumanEval_107 False True True
HumanEval_22 True True True
HumanEval_43 True True True
HumanEval_88 True True True
HumanEval_14 True True True
HumanEval_157 True True True
HumanEval_141 True True True
HumanEval_57 True True True
HumanEval_154 True True True
HumanEval_153 True True True
HumanEval_93 False True False
HumanEval_137 True True True
HumanEval_143 True True True
HumanEval_13 True True True
HumanEval_49 True True True
HumanEval_95 True True True
------------- --------- --------- ---------
Successes 14 16 15
Failures 2 0 1
Missing 0 0 0
Total 16 16 16

注意:'autogenbench tabulate'处于早期预览阶段。
在未经检查和验证日志结果之前,请不要在学术工作中引用这些值。

从这个输出中,我们可以看到每个任务的三次独立重复的结果,以及每次运行的最终汇总统计数据。在这种情况下,结果是通过GPT-4生成的(如提供的OAI_CONFIG_LIST中定义的),并使用了TwoAgents模板。重要的是要记住,AutoGenBench评估的是_特定的_端到端代理配置(而不是对模型或认知框架进行更一般的评估)。

最后,完整的执行跟踪和日志可以在Results文件夹中找到。有关命令行选项和输出格式的更多详细信息,请参阅AutoGenBench README。每个命令还通过以下方式提供了广泛的内联帮助:

路线图

虽然我们宣布了 AutoGenBench,但它仍然是一个不断发展的项目。在接下来的几周和几个月里,我们希望能够:

  • 添加许多额外的基准测试,超出目前已发布的基准测试
  • 大幅改进日志记录和遥测功能
  • 引入新的核心指标,包括总成本、任务完成时间、对话轮数等
  • 与 AgentEval 和 AutoGen Studio 实现更紧密的集成

要获取我们在这个项目上的最新工作进展,请参阅AutoGenBench 工作项

参与呼吁

最后,我们想以一个开放的参与呼吁结束这篇博文。AutoGenBench 仍处于初期阶段,有很大的改进空间。新的基准测试不断发布,需要添加到 AutoGenBench 中。每个人可能都有自己关心的最重要的优化指标,这些指标应该被纳入。为此,我们欢迎任何形式的贡献。如果您对贡献感兴趣,请参阅贡献者指南,并加入我们的Discord讨论,在#autogenbench频道中与我们交流!

· 4 min read
Olga Vrousgou

简介

AutoGen 0.2.8 通过将“代码执行在 Docker 容器中”设置为默认选项来增强操作安全性,重点是向用户提供有关其操作的信息,并赋予他们在代码执行方面做出明智决策的能力。

新版本引入了一个重大变化,即在代码执行代理中,默认情况下将 use_docker 参数设置为 True。这一变化凸显了我们在 AutoGen 中优先考虑安全性和安全性的承诺。

TL;DR

AutoGen 现在默认情况下将代码执行在 Docker 容器中,以增强操作安全性。这一变化强调了我们在 AutoGen 中优先考虑安全性和安全性的承诺。

引言

AutoGen 有代码执行代理,通常被定义为 UserProxyAgent,其中默认情况下代码执行是开启的。直到现在,除非用户明确指定,否则由其他代理生成的任何代码都将由代码执行代理在本地执行,即在 AutoGen 执行的地方。如果 AutoGen 在 Docker 容器中运行,则运行代码的风险将最小化。然而,如果 AutoGen 在 Docker 外部运行,特别是对于新用户来说,很容易忽视代码执行的风险。

现在,AutoGen 已经更改为默认情况下在 Docker 容器中执行任何代码(除非已经在 Docker 容器中进行执行)。它将启动一个 Docker 镜像(用户提供的或默认的),执行新代码,然后终止镜像,为下一个代码执行周期做准备。

我们理解并不是每个人都关心这一点,特别是第一次玩 AutoGen 的时候。我们提供了简单的方法来关闭这个要求。但我们相信,确保用户知道代码将在本地执行,并促使他们思考在本地运行代码的安全性影响是 AutoGen 的正确步骤。

示例

该示例显示了默认行为,即由助理代理生成的任何代码都将由用户代理代理执行,并尝试使用 Docker 容器来执行代码。如果 Docker 没有运行,将会抛出错误。用户可以决定激活 Docker 或选择在本地执行代码。

from autogen import AssistantAgent, UserProxyAgent, config_list_from_json
assistant = AssistantAgent("assistant", llm_config={"config_list": config_list})
user_proxy = UserProxyAgent("user_proxy", code_execution_config={"work_dir": "coding"})
user_proxy.initiate_chat(assistant, message="Plot a chart of NVDA and TESLA stock price change YTD.")

要退出此默认行为,有一些选项。

完全禁用代码执行

  • 对于每个代码执行代理,将 code_execution_config 设置为 False。例如:
user_proxy = autogen.UserProxyAgent(name="user_proxy", llm_config=llm_config, code_execution_config=False)

在本地运行代码执行

  • 对于每个代码执行代理,可以在 code_execution_config 中将 use_docker 设置为 False
  • 要一次性为所有代码执行代理设置:将环境变量 AUTOGEN_USE_DOCKER 设置为 False

例如:

user_proxy = autogen.UserProxyAgent(name="user_proxy", llm_config=llm_config,
code_execution_config={"work_dir":"coding", "use_docker":False})

相关文档

结论

AutoGen 0.2.8 现在提高了代码执行的安全性,并确保用户能够正确了解 autogen 的操作,并能够根据需要做出决策。

· 14 min read
Adam Fourney

TL;DR

AutoGen 0.2.2 引入了一个 description 字段到 ConversableAgent(和所有子类),并且更改了 GroupChat,使其在选择下一个发言的代理时使用代理的 description 而不是 system_message

这将简化 GroupChat 的工作,改进编排,并且更容易实现新的 GroupChat 或类似的替代方案。

如果您是开发人员,并且已经很好地工作,那么无需采取任何措施 - 向后兼容性已得到保证,因为当没有提供描述时,description 字段默认为 system_message

但是,如果您在使用 GroupChat 时遇到困难,现在可以尝试更新 description 字段。

引言

随着 AutoGen 的成熟和开发人员构建越来越复杂的代理组合,编排正在成为一项重要的能力。目前,GroupChatGroupChatManager 是编排三个或更多代理之间对话的主要内置工具。对于像 GroupChat 这样的编排器能够良好工作,它们需要了解每个代理的一些信息,以便决定谁应该何时发言。在 AutoGen 0.2.2 之前,GroupChat 依赖于每个代理的 system_messagename 来了解每个参与的代理。当系统提示短而简洁时,这可能没问题,但是当指令非常长(例如,使用 AssistantAgent)或不存在(例如,使用 UserProxyAgent)时,可能会出现问题。

AutoGen 0.2.2 引入了一个 description 字段到所有代理,并且替换了在 GroupChat 和所有未来的编排器中使用 system_message 进行编排的方式。为了确保向后兼容性,description 字段默认为 system_message,因此如果您的代码正常工作,则可能不需要更改任何内容。但是,如果您在使用 GroupChat 时遇到困难,请尝试设置 description 字段。

本文的其余部分提供了一个示例,说明如何使用 description 字段简化 GroupChat 的工作,提供了一些其有效性的证据,并提供了编写良好描述的提示。

示例

当前的 GroupChat 编排系统提示具有以下模板:

你正在进行一场角色扮演游戏。以下角色可供选择:

{self._participant_roles(agents)}。

阅读以下对话。
然后从 {[agent.name for agent in agents]} 中选择下一个要扮演的角色。只返回角色名称。

假设你想要包含3个代理:一个 UserProxyAgent,一个 AssistantAgent,以及可能还有一个 GuardrailsAgent。

在 0.2.2 之前,这个模板会被展开为:

你正在进行一场角色扮演游戏。以下是可供选择的角色:

assistant:你是一个乐于助人的AI助手。
利用你的编码和语言技能解决任务。
在以下情况下,建议用户执行Python代码(在Python代码块中)或Shell脚本(在sh代码块中)。
1. 当你需要收集信息时,使用代码输出你需要的信息,例如浏览或搜索网页,下载/读取文件,打印网页或文件的内容,获取当前日期/时间,检查操作系统。在打印足够的信息并准备好根据你的语言技能解决任务后,你可以自己解决任务。
2. 当你需要使用代码执行某些任务时,使用代码执行任务并输出结果。聪明地完成任务。
如果需要,逐步解决任务。如果没有提供计划,请先解释你的计划。清楚地说明哪个步骤使用代码,哪个步骤使用你的语言技能。
在使用代码时,必须在代码块中指示脚本类型。用户不能提供任何其他反馈或执行任何其他操作,除了执行你建议的代码。用户不能修改你的代码。因此,不要建议需要用户修改的不完整的代码。如果不打算由用户执行,请不要使用代码块。
如果你希望用户在执行代码之前将代码保存到文件中,请在代码块中的第一行中添加“# filename: <filename>”。不要在一个回答中包含多个代码块。不要要求用户复制和粘贴结果。相反,当相关时使用'print'函数进行输出。检查用户返回的执行结果。
如果结果表明存在错误,请修复错误并再次输出代码。建议提供完整的代码,而不是部分代码或代码更改。如果错误无法修复,或者即使成功执行代码后任务仍未解决,请分析问题,重新审视你的假设,收集你需要的额外信息,并考虑尝试不同的方法。
当你找到答案时,请仔细验证答案。如果可能,请在回答中包含可验证的证据。
当一切都完成时,请在最后回复“TERMINATE”。

user_proxy:
guardrails_agent:你是一个保护栏代理,负责确保所有参与方遵守以下负责任的AI政策:
- 如果对话涉及编写或运行有害或破坏性代码,你必须终止对话。
- 如果对话涉及任何与黑客攻击、计算机漏洞或计算机安全有关的讨论,你必须终止对话。
- 如果对话涉及暴力或图形内容,例如对他人的伤害、自残、自杀,你必须终止对话。
- 如果对话涉及贬低性言论、仇恨言论、歧视性言论或任何形式的基于种族、性别、性取向、宗教、国籍、残疾或任何其他受保护特征的骚扰,你必须终止对话。
- 如果对话涉及高度管制领域的寻求或提供建议,例如医疗建议、心理健康、法律建议或财务建议,你必须终止对话。
- 如果对话涉及鼓励或提供关于非法活动的指导,包括非法活动,你必须终止对话。
- 如果对话涉及欺骗性或虚假内容,包括诈骗、网络钓鱼和传播虚假信息,你必须终止对话。
- 如果对话涉及涉及性的明确内容或讨论,你必须终止对话。
- 如果对话涉及与用户共享或索取个人、敏感或机密信息,包括财务细节、健康记录和其他私人事务,你必须终止对话。
- 如果对话涉及处理严重个人问题、心理健康问题或危机情况,你必须终止对话。
如果你决定终止对话,解释你的理由,然后输出大写的单词“TERMINATE”。另一方面,如果你认为对话符合上述标准,请表明,并要求其他参与方继续。

阅读以下对话。
然后从[assistant, user_proxy, guardrails_agent]中选择下一个角色来扮演。只返回角色。

正如你所看到的,这个描述非常令人困惑:

  • 很难分辨每个代理角色描述的结束位置
  • You 出现了很多次,并且指的是三个不同的代理(GroupChatManager、AssistantAgent 和 GuardrailsAgent)
  • 需要很多令牌!

因此,不难理解为什么 GroupChat 管理器有时会在这个编排任务上遇到困难。

从 AutoGen 0.2.2 开始,GroupChat 改为依赖于描述字段。有了描述字段,编排提示变成了这样:

你在一个角色扮演游戏中。以下角色可供选择:

assistant:一个有帮助且多功能的 AI 助手,具有强大的语言技能、Python 技能和 Linux 命令行技能。
user_proxy:一个可以在 Linux 终端上运行 Python 代码或输入命令行命令并报告执行结果的用户代理。
guardrails_agent:一个确保对话符合负责任 AI 准则的代理。

阅读以下对话。
然后从 [assistant, user_proxy, guardrails_agent] 中选择下一个角色来进行游戏。只返回角色。

这样更容易解析和理解,而且使用的令牌数量远远不及之前。此外,以下实验提供了早期证据表明它是有效的。

分心实验

为了说明 description 字段的影响,我们设置了一个包含三个代理的实验,使用了 HumanEval 基准测试的一个缩小的 26 个问题子集。在这个实验中,添加了三个代理到一个 GroupChat 中来解决编程问题。这三个代理分别是:

  • Coder(默认的 Assistant 提示)
  • UserProxy(配置为执行代码)
  • ExecutiveChef(作为干扰因素添加)

Coder 和 UserProxy 使用了上面提供的 AssistantAgent 和 UserProxy 的默认设置,而 ExecutiveChef 则被赋予了系统提示:

你是一位拥有 28 年行业经验的行政主厨。你可以回答关于菜单规划、餐饮准备和烹饪技巧的问题。

显然,ExecutiveChef 是干扰因素 -- 鉴于 HumanEval 问题与食物无关,GroupChat 很少会请教厨师。然而,当配置了 GPT-3.5-turbo-16k 时,我们可以清楚地看到 GroupChat 在编排方面遇到了困难:

在 0.2.2 之前的版本中,使用 system_message

  • 代理在第一轮解决了 26 个问题中的 3 个
  • ExecutiveChef 被调用了 54 次!(几乎和 Coder 的 68 次一样多)

在 0.2.2 版本中,使用 description

  • 代理在第一轮解决了 26 个问题中的 7 个
  • ExecutiveChef 被调用了 27 次!(相比 Coder 的 84 次)

使用 description 字段可以使这个任务的性能提升一倍,并将调用干扰代理的频率减少一半。

编写好描述的提示

由于 descriptionsystem_message 的用途不同,值得回顾一下什么样的代理描述是好的。虽然描述是新功能,但以下提示似乎能够带来良好的结果:

  • 避免使用第一人称或第二人称的视角。描述中不应包含"I"或"You",除非"You"是指GroupChat / orchestrator。
  • 包含任何可能帮助orchestrator知道何时调用agent的细节。
  • 描述要简短(例如,"一个具有强大的自然语言和Python编程能力的有用的AI助手。")。

要记住的主要事情是描述是为了GroupChatManager的利益,而不是为了Agent自己的使用或指导

结论

AutoGen 0.2.2引入了description,成为agents向GroupChat等orchestrators描述自己的主要方式。由于description默认为system_message,如果您对您的群聊已经满意,您无需更改任何内容。然而,我们预计这个功能通常会改善编排,因此如果您在使用GroupChat时遇到困难或想提高性能,请考虑尝试description字段。

· 16 min read
Victor Dibia
Gagan Bansal
Saleema Amershi

AutoGen Studio Playground View: 使用多智能体解决生成带有图像的 PDF 文档的任务。

AutoGen Studio:使用多智能体解决生成带有图像的 PDF 文档的任务。

TL;DR

为了帮助您快速原型化多智能体解决方案,我们推出了 AutoGen Studio,这是一个由 AutoGen 提供支持的界面。它可以让您:

  • 通过点选和拖放界面(例如,您可以选择两个智能体的参数,它们将进行通信以解决您的任务)来声明性地定义和修改智能体和多智能体工作流程。
  • 使用我们的用户界面与指定的智能体创建聊天会话并查看结果(例如,查看聊天历史记录、生成的文件和所需时间)。
  • 明确地为您的智能体添加技能并完成更多任务。
  • 将您的会话发布到本地画廊。

有关更多详细信息,请参阅官方 AutoGen Studio 文档此处

AutoGen Studio 是开源的,代码在这里,可以通过 pip 安装。试试看吧!

pip install autogenstudio

简介

技术的加速发展使我们进入了一个数字助手(或智能体)成为我们生活中不可或缺的一部分的时代。AutoGen 已经成为一个领先的框架,用于协调智能体的力量。为了扩展这个领域并使这种能力民主化,我们非常高兴地推出了一个新的用户友好界面:AutoGen Studio

使用 AutoGen Studio,用户可以快速创建、管理和与可以学习、适应和协作的智能体进行交互。在将这个界面发布到开源社区时,我们的目标不仅是提高生产力,还要激发人与智能体之间个性化互动的水平。

注意:AutoGen Studio 旨在帮助您快速原型化多智能体工作流程,并演示使用 AutoGen 构建的最终用户界面的示例。它不是一个可用于生产的应用程序。

使用 AutoGen Studio 入门

以下指南将帮助您在系统上启动和运行 AutoGen Studio。

配置 LLM 提供程序

要开始使用,您需要访问一个语言模型。您可以按照 AutoGen 文档此处的步骤进行设置。使用 OPENAI_API_KEYAZURE_OPENAI_API_KEY 配置您的环境。

例如,在终端中,您可以像这样设置 API 密钥:

设置 OPENAI_API_KEY=<你的 API 密钥>

您还可以在以下示例中直接在代理配置中指定模型。

llm_config = LLMConfig(
config_list=[{
"model": "gpt-4",
"api_key": "<azure_api_key>",
"base_url": "<azure api base url>",
"api_type": "azure",
"api_version": "2024-02-01"
}],
temperature=0,
)

安装

有两种安装 AutoGen Studio 的方法 - 从 PyPi 或从源代码安装。我们建议从 PyPi 安装,除非您计划修改源代码。

  1. 从 PyPi 安装

    我们建议使用虚拟环境(例如 conda)以避免与现有 Python 包的冲突。在您的虚拟环境中激活 Python 3.10 或更新版本后,使用 pip 安装 AutoGen Studio:

    pip install autogenstudio
  2. 从源代码安装

    注意:这种方法需要对 React 中的构建界面有一定的了解。

    如果您希望从源代码安装,请确保已安装 Python 3.10+ 和 Node.js(版本大于 14.15.0)。以下是开始的方法:

    • 克隆 AutoGen Studio 仓库并安装其 Python 依赖项:

      pip install -e .
    • 导航到 samples/apps/autogen-studio/frontend 目录,安装依赖项并构建 UI:

      npm install -g gatsby-cli
      npm install --global yarn
      yarn install
      yarn build

    对于 Windows 用户,要构建前端,您可能需要使用 autogen studio readme 中提供的替代命令。

运行应用程序

安装完成后,在终端中输入以下命令运行 Web UI:

autogenstudio ui --port 8081

这将在指定的端口上启动应用程序。打开您的 Web 浏览器并转到 http://localhost:8081/,开始使用 AutoGen Studio。

现在,您已经安装并运行了 AutoGen Studio,可以开始探索其功能,包括定义和修改代理工作流、与代理和会话交互以及扩展代理技能。

AutoGen Studio 能做什么?

AutoGen Studio UI 分为 3 个高级部分 - 构建PlaygroundGallery

构建

指定代理。

该部分专注于定义代理和代理工作流的属性。它包括以下概念:

技能:技能是描述如何解决任务的函数(例如 Python 函数)。通常,一个好的技能具有描述性的名称(例如 generate_images),详细的文档字符串和良好的默认值(例如,将文件写入磁盘以进行持久化和重用)。您可以通过提供的 UI 向 AutoGen Studio 添加新的技能。在推理时,这些技能将作为辅助代理的可用技能,以解决您的任务。

查看和添加技能。

AutoGen Studio 构建视图:查看、添加或编辑代理人在处理任务时可以利用的技能。

代理人:这提供了一个界面,用于声明性地指定 AutoGen 代理人的属性(与基本的 AutoGen 可对话代理人 类的大部分成员相同)。

代理人工作流:代理人工作流是指一组可以共同完成任务的代理人的规范。最简单的版本是设置两个代理人 - 一个用户代理人(代表用户,即编译代码并打印结果)和一个助手,可以处理任务请求(例如生成计划、编写代码、评估响应、提出错误恢复步骤等)。更复杂的流程可以是一个群聊,其中更多的代理人共同努力解决问题。

游乐场

AutoGen Studio 游乐场视图:使用多个可以生成带有图片的 PDF 文档的代理人解决任务。

AutoGen Studio 游乐场视图:代理人协作,利用可用技能(生成图片的能力)来处理用户任务(生成 PDF)。

游乐场部分专注于与前面构建部分中定义的代理人工作流进行交互。它包括以下概念:

会话:会话指的是与代理人工作流的连续交互或参与期,通常通过一系列旨在实现特定目标的活动或操作来描述。它包括代理人工作流配置以及用户和代理人之间的交互。会话可以“发布”到“画廊”。

聊天视图:聊天是用户和代理人之间的一系列交互的序列。它是会话的一部分。

画廊

这一部分专注于共享和重用工件(例如工作流配置、会话等)。

AutoGen Studio 自带了 3 个示例技能:fetch_profilefind_papersgenerate_images。请随意查看存储库以了解它们的工作原理。

AutoGen Studio API

虽然 AutoGen Studio 是一个 Web 界面,但它由一个可重用和模块化的底层 Python API 提供支持。重要的是,我们实现了一个 API,可以以声明性的方式指定代理人工作流(以 JSON 格式),加载和运行。下面是当前 API 的示例。请参阅AutoGen Studio 存储库以获取更多详细信息。

import json
from autogenstudio import AutoGenWorkFlowManager, AgentWorkFlowConfig

# 加载一个以 JSON 格式存储的 agent 规范
agent_spec = json.load(open('agent_spec.json'))

# 从 agent 规范创建一个 AutoGen 工作流配置
agent_work_flow_config = FlowConfig(**agent_spec)

# 从配置创建一个工作流
agent_work_flow = AutoGenWorkFlowManager(agent_work_flow_config)

# 在一个任务上运行工作流
task_query = "巴黎铁塔的高度是多少?"
agent_work_flow.run(message=task_query)

路线图和下一步计划

在我们继续开发和完善 AutoGen Studio 的过程中,下面的路线图概述了未来版本中计划的一系列增强和新功能。以下是用户可以期待的内容:

  • 复杂的代理工作流程:我们正在努力集成对更复杂的代理工作流程的支持,例如 GroupChat,允许多个代理之间或动态拓扑之间进行更丰富的交互。
  • 改进的用户体验:这包括诸如实时反馈中间模型输出、更好地总结代理响应、每次交互的成本信息等功能。我们还将致力于改进组合和重用代理的工作流程。我们还将探索对代理提供更多交互式人工反馈的支持。
  • 扩展代理技能:我们将努力改进代理技能的创作、组合和重用工作流程。
  • 社区功能:在 AutoGen Studio 用户社区内进行共享和协作是一个重要目标。我们正在探索更方便地在用户之间共享会话和结果的选项,并为技能、代理和代理工作流程建立一个共享的存储库。

贡献指南

我们欢迎对 AutoGen Studio 的贡献。我们建议按照以下一般步骤来为项目做出贡献:

  • 查看整体的 AutoGen 项目贡献指南
  • 请查看 AutoGen Studio 的路线图,了解当前项目的优先事项。特别需要帮助的是带有 help-wanted 标签的 Studio 问题。
  • 请在路线图问题或新问题上发起讨论,讨论您提出的贡献。
  • 请查看此处的 autogenstudio dev 分支 [dev branch].(https://github.com/microsoft/autogen/tree/autogenstudio),并将其用作贡献的基础。这样,您的贡献将与 AutoGen Studio 项目的最新更改保持一致。
  • 提交一个拉取请求,贡献您的代码!
  • 如果您在 vscode 中修改 AutoGen Studio,它有自己的 devcontainer 来简化开发工作。请参阅 .devcontainer/README.md 中的说明。
  • 请在与 Studio 相关的任何问题、疑问和拉取请求中使用标签 studio

常见问题

问:我在哪里可以调整默认的技能、代理和工作流配置? 答:您可以直接从用户界面修改代理配置,或者编辑 autogentstudio/utils/dbdefaults.json 文件来初始化数据库。

问:如果我想重置与代理的整个对话,我该怎么做? 答:要重置您的对话历史记录,您可以删除 database.sqlite 文件。如果您需要清除特定用户的数据,请删除相关的 autogenstudio/web/files/user/<user_id_md5hash> 文件夹。 问:在交互过程中,是否可以查看代理生成的输出和消息? 答:是的,您可以在Web UI的调试控制台中查看生成的消息,从而了解代理之间的交互情况。另外,您还可以检查database.sqlite文件,以获取完整的消息记录。

问:我在哪里可以找到AutoGen Studio的文档和支持? 答:我们不断努力改进AutoGen Studio。有关最新更新,请参阅AutoGen Studio自述文件。如果需要额外的支持,请在GitHub上提出问题或在Discord上提问。

问:我可以在AutoGen Studio中使用其他模型吗? 答:可以。AutoGen采用了openai模型API格式的标准化,您可以使用任何提供openai兼容端点的API服务器。在AutoGen Studio的UI中,每个代理都有一个llm_config字段,您可以在其中输入模型端点的详细信息,包括模型名称API密钥基本URL模型类型API版本。对于Azure OpenAI模型,您可以在Azure门户中找到这些详细信息。请注意,对于Azure OpenAI,模型名称是部署ID或引擎,而模型类型是"azure"。对于其他开源模型,我们建议使用类似vllm的服务器来实例化一个openai兼容的端点。

问:服务器已启动,但无法访问UI界面 答:如果您在远程机器上运行服务器(或本地机器无法正确解析localhost),您可能需要指定主机地址。默认情况下,主机地址设置为localhost。您可以使用--host <host>参数指定主机地址。例如,要在端口8081上启动服务器,并使用本地地址,以便从网络上的其他机器访问,可以运行以下命令:

autogenstudio ui --port 8081 --host 0.0.0.0