autogen_实战
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
函数同时向两个代理注册工具。
4 程序及分析
1 | import os |
- 至少包含一个 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 的功能。
- 设置终止条件:最大轮数,文本条件,程序条件。
- 设置默认回复。
- 指定用户在何种情况下参与对话。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.