1073 字
5 分钟
多智能体协作入门:使用Autogen构建自动化任务小组
单个Agent的局限性
尽管单个ReAct Agent已经非常强大,但在面对需要多种技能、多轮反馈和规划的复杂任务时,它仍会显得力不从心。例如,要完成“调研并撰写一篇关于AI Agent最新进展的博客文章”这个任务,需要:
- 研究员:搜索最新的论文和文章。
- 作者:根据研究资料撰写初稿。
- 评论家:审阅初稿并提出修改意见。
- 代码执行者:运行代码示例并验证结果。
让单个Agent扮演所有这些角色,往往会导致逻辑混乱和性能下降。而这,正是多智能体协作框架——Autogen——大放异彩的地方。
Autogen:让Agent像团队一样对话
Autogen的核心思想非常直观:将复杂的任务分解给一组具有不同角色和能力的专业Agent,然后让它们通过模拟对话来协作完成任务。
在Autogen中,最核心的两个概念是:
- ConversableAgent:这是Agent的基础形式,它能够发送和接收消息,并根据收到的消息决定是否回复。
- UserProxyAgent:这是一种特殊的Agent,它可以代表人类用户。它不仅能发起对话,还能执行代码或等待人类的输入。
通过定义不同的Agent,并设定它们之间的对话规则,我们就能构建出一个自动化的“虚拟团队”。
实战:构建一个“研究员-作者”协作小组
下面,我们将构建一个简单的双Agent系统,来自动化完成“查找一篇关于特定主题的arXiv论文,并为其撰写摘要”的任务。
1. 准备工作
首先,安装pyautogen库,并设置你的LLM API密钥。Autogen支持多种LLM,这里我们以OpenAI为例。
pip install pyautogenexport OPENAI_API_KEY="你的OpenAI API密钥"2. 定义工具
我们需要一个工具来搜索arXiv。我们可以自己编写一个函数,并用@tool装饰器将其标记为工具。
# 1. 定义工具import arxivfrom autogen.agentchat.contrib.agent_builder import tool
@tooldef search_arxiv(query: str) -> str: """根据关键词在arXiv上搜索论文,并返回最相关的一篇论文的摘要。""" client = arxiv.Client() search = arxiv.Search( query=query, max_results=1, sort_by=arxiv.SortCriterion.Relevance ) results = list(client.results(search)) if not results: return "没有找到相关的论文。" paper = results[0] return f"标题: {paper.title}\n摘要: {paper.summary}"3. 配置和创建Agent
现在,我们来创建两个Agent:
- Researcher(研究员):一个
AssistantAgent,它的任务是使用search_arxiv工具。 - user_proxy(用户代理):一个
UserProxyAgent,它负责发起任务,并可以执行代码(虽然本例中用不到)。
# 2. 配置和创建Agentimport autogen
# LLM配置config_list = autogen.config_list_from_json( "OAI_CONFIG_LIST", filter_dict={"model": ["gpt-4"]},)
# 创建研究员Agentresearcher = autogen.AssistantAgent( name="Researcher", system_message="你是一名专业的研究员。利用提供的工具来查找信息。", llm_config={"config_list": config_list},)
# 创建用户代理Agentuser_proxy = autogen.UserProxyAgent( name="user_proxy", human_input_mode="TERMINATE", # 任务完成后自动结束 max_consecutive_auto_reply=10, is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"), code_execution_config={"work_dir": "web"},)
# 将工具注册给Agentresearcher.register_function( function_map={"search_arxiv": search_arxiv})user_proxy.register_function( function_map={"search_arxiv": search_arxiv})4. 发起对话
最后,让user_proxy向researcher发起一个任务,启动它们的协作。
# 3. 发起对话user_proxy.initiate_chat( researcher, message="查找一篇关于 'ReAct prompting' 的arXiv论文,并总结其内容。")运行后,你将看到两个Agent在控制台开始了自动对话:
user_proxy首先发言,提出任务。researcher接收到任务,思考后决定需要调用search_arxiv工具。researcher执行工具调用,并将返回的论文摘要作为自己的回复。user_proxy接收到摘要,任务完成,对话结束。
总结
你已经成功构建了你的第一个多智能体协作系统!通过Autogen,我们将一个复杂的任务自然地分解给了不同的专业角色,并通过对话实现了任务的自动化流转。
这仅仅是多智能体世界的冰山一角。你可以尝试构建更复杂的团队(如“产品经理-程序员-测试员”小组),设计更精巧的对话流程,甚至让Agent动态地学习和适应。在系列的最后一篇文章中,我们将一起展望Agent技术的未来。
参考资源:
多智能体协作入门:使用Autogen构建自动化任务小组
https://www.qiandulab.com/posts/autogen-multi-agent-tutorial/