1 安装

1
pip install pyautogen

2 源码分析

1
git clone https://github.com/microsoft/autogen
  • 下载了 2.2G,其中 2.1G 在.git 文件夹下,其余约 60M。只需关注主分支即可。
  • 核心代码位于 autogen/agentchat 目录,核心组件是:Agent 和 GroupChat。
  • agent:用于管理每个角色的行为。
    • agent -> ConversableAgent:会话的基础类,一般不直接使用,而作为其他类的父类。它能保持对话状态、历史记录,并调用其他工具。
    • ConversableAgent -> AssistantAgent:这是一个 AI 角色,用于执行任务处理、调用 API 和逻辑推理等相关代码。
    • ConversableAgent -> UserProxyAgent:这是一个用户角色,用于模拟用户输入,通常不涉及复杂的逻辑运算或代码执行。
  • groupchat:用于管理多个 Agent 的协作。
    • GroupChat:管理多个代理之间的对话,相当于管理一个群聊房间,可通过字典图,限定各个 Agent 可与谁交互。
    • GroupChatManager:管理多个 GroupChat,相当于多个群聊房间的管理者,负责统筹多个对话组的协调和资源分配。

3 使用工具

工具是代理可以使用的预定义功能,而不是 llm 在对话中编写的代码。

工具必须至少向两个代理注册,才能在对话中发挥作用。

  • 选择工具:AssistantAgent 注册工具,可以将工具告诉 llm,由 llm 判断何时调用它,并将输入信息转换为工具需要的格式。(register_for_llm)
  • 执行工具:UserProxyAgent 注册工具,让 UserProxyAgent 可以运行该工具。(register_for_execution)
  • 也可以使用 autogen.register_function 函数同时向两个代理注册工具。

参考:在autogen中定义并使用tool的示例

4 程序及分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import os

from autogen import AssistantAgent, UserProxyAgent
llm_config = {
"model": "gpt-4o",
"api_key": os.environ.get("OPENAI_API_KEY"),
"base_url": os.environ.get("OPENAI_API_BASE"),
"temperature": 0.9,
}
assistant = AssistantAgent("assistant", llm_config=llm_config)
user_proxy = UserProxyAgent("user_proxy", code_execution_config=False)
user_proxy.initiate_chat(
assistant,
message="简单介绍一下多智能体协作相关的内容",
)
  • 至少包含一个 AssistantAgent 和一个 UserProxyAgent
  • AssistantAgent:在这里用于与 llm 交互
    • 参数:llm_config=llm_config,设置 llm 参数,它需要访问大模型
  • UserProxyAgent:在这里用于与程序员交互及运行代码
    • 参数:code_execution_config,是否运行代码,及设置
    • 参数:human_input_mode="NEVER",设置是否需要与人交互
  • initiate_chat:开始对话
    • 参数:max_turns=2,限制讨论的回合数
    • 分析:开始后,对话在两个代理间展开,A.send()->B.recv(), B.send()->A.recv()... 如此往复直到结束(找到答案,超过对话轮数,或满足退出条件)。每一次 AssistantAgent 调用 llm 都会参考初始问题和当前多对话的内容做出回应(是否调用工具,语言回复或生成代码,具体见 ConversableAgent 类中实现);而 UserProxyAgent 可以让用户参与,执行代码或者调用工具完成具体任务。

5 总结

尽管对话仍然在各个 Agent 之间流动,没有一个主控来监督每一次交互,但可以设置一些可控点。程序员可以控制以下方面:

  • 在不同层面定义功能:GroupChat 的功能、各个 Agent 的功能,各个 Tools 的功能。
  • 设置终止条件:最大轮数,文本条件,程序条件。
  • 设置默认回复。
  • 指定用户在何种情况下参与对话。