AutoGen简介
欢迎!AutoGen是一个开源框架,利用多个“代理”实现复杂的工作流程。本教程介绍了AutoGen的基本概念和构建模块。
为什么选择AutoGen?
整体大于部分之和。
-亚里士多德
虽然有很多关于代理的定义,但在AutoGen中,代理是一个可以发送消息、接收消息并使用模型、工具、人工输入或它们的混合生成回复的实体。这种抽象不仅允许代理模拟现实世界和抽象实体(如人和算法),还简化了作为代理之间协作的复杂工作流程的实现。
此外,AutoGen是可扩展和可组合的:您可以使用可自定义的组件扩展一个简单的代理,并创建可以组合这些代理并为更复杂的代理提供动力的工作流程,从而实现模块化且易于维护的实现。
最重要的是,AutoGen是由一群充满活力的研究人员和工程师开发的。它融合了多代理系统的最新研究成果,并在许多实际应用中得到了应用,包括代理平台、广告、AI员工、博客/文章写作、区块链、通过野火计算烧毁区域、客户支持、网络安全、数据分析、辩论、教育、金融、游戏、法律咨询、研究、机器人技术、销售/营销、社会模拟、软件工程、软件安全、供应链、T恤设计、训练数据生成、YouTube服务...
安装
安装AutoGen最简单的方法是使用pip:
pip install pyautogen
。在安装中找到更多选项。
代理
在AutoGen中,代理是一个可以在其环境中与其他代理发送和接收消息的 实体。代理可以由模型(例如像GPT-4这样的大型语言模型)、代码执行器(例如IPython内核)、人工或这些和其他可插拔和可自定义组件的组合来提供动力。
这样的代理的一个示例是内置的ConversableAgent
,它支持以下组件:
- 一个LLM列表
- 一个代码执行器
- 一个函数和工具执行器
- 一个用于保持人工参与的组件
您可以打开或关闭每个组件,并对其进行自定义以适应您的需求。
对于高级用户,您可以使用registered_reply
向代理添加其他组件。
例如,LLM(Language Model)使代理能够以自然语言交流并在结构化和非结构化文本之间进行转换。以下示例展示了一个带有开启了 GPT-4 LLM 的 ConversableAgent
,并关闭了其他组件:
import os
from autogen import ConversableAgent
agent = ConversableAgent(
"chatbot",
llm_config={"config_list": [{"model": "gpt-4", "api_key": os.environ.get("OPENAI_API_KEY")}]},
code_execution_config=False, # 关闭代码执行,默认情况下是关闭的。
function_map=None, # 没有注册的函数,默认情况下为 None。
human_input_mode="NEVER", # 从不要求人类输入。
)
llm_config
参数包含了 LLM 的配置列表。详见LLM 配置了解更多细节。
您可以使用 generate_reply
方法向该代理提问并生成回复:
reply = agent.generate_reply(messages=[{"content": "Tell me a joke.", "role": "user"}])
print(reply)
当然,这里有一个轻松的笑话给你:
为什么科学家不相信原子?
因为它们构成了一切!
角色和对话
在 AutoGen 中,您可以为代理分配角色,并让它们参与对话或相互聊天。对话是代理之间交换的一系列消息。您可以利用这些对话来推进任务的进展。例如,在下面的示例中,我们通 过设置 system_message
为两个代理分配不同的角色。
cathy = ConversableAgent(
"cathy",
system_message="Your name is Cathy and you are a part of a duo of comedians.",
llm_config={"config_list": [{"model": "gpt-4", "temperature": 0.9, "api_key": os.environ.get("OPENAI_API_KEY")}]},
human_input_mode="NEVER", # 从不要求人类输入。
)
joe = ConversableAgent(
"joe",
system_message="Your name is Joe and you are a part of a duo of comedians.",
llm_config={"config_list": [{"model": "gpt-4", "temperature": 0.7, "api_key": os.environ.get("OPENAI_API_KEY")}]},
human_input_mode="NEVER", # 从不要求人类输入。
)
现在我们有了两个喜剧演员代理,我们可以让他们开始一场喜剧表演。可以使用 initiate_chat
方法来实现。我们将 max_turns
设置为 2,以保持对话的简短。
result = joe.initiate_chat(cathy, message="Cathy, tell me a joke.", max_turns=2)
joe (对 cathy):
Cathy,给我讲个笑话吧。
cathy (对 joe):
好的,给你讲一个:
为什么科学家不相信原子?
因为它们构成了一切!
joe (对 cathy):
哈哈,这个真不错,Cathy!轮到我了。
为什么我们在农场上从不说秘密?
因为土豆有眼睛,玉米有耳朵,豆子有茎。
cathy (对 joe):
哈哈,太棒了!农场绝对不是保守秘密的地方。轮到我了。
为什么自行车不能自己站起来?
因为它太累了!
喜剧演员们互相碰撞!
概述
在本章中,我们介绍了AutoGen中的代理、角色和对话的概念。为了简单起见,我们只使用了LLMs并创建了完全自主的代理(human_input_mode
设置为NEVER
)。在下一章中,我们将展示如何控制何时终止自主代理之间的对话。