AutoGen群聊模式:模拟真实团队协作的奥秘
AutoGen群聊模式:模拟真实团队协作的奥秘
引言
背景介绍:从单Agent对话到多Agent协作的AI范式跃迁
自2022年ChatGPT横空出世以来,大语言模型(Large Language Model, LLM)驱动的单Agent对话系统(如聊天机器人、代码助手、文档摘要工具)迅速渗透到各行各业。这些工具虽能高效完成单目标、短流程、低复杂度的任务,但在面对多目标协同、长链条决策、专业领域交叉、人际协商纠错的真实团队工作场景时,往往显得力不从心:
- 信息过载与逻辑断层:单Agent难以同时处理跨领域的海量专业信息,代码生成后不会自动调试、文档生成后不会结合代码规范验证、市场分析后不会自动转化为产品需求文档;
- 能力天花板:单个LLM(哪怕是GPT-4o、Claude 3.5 Sonnet这类通用型“全能选手”)在特定细分领域(如医疗影像分析报告撰写、芯片设计验证脚本生成)的专业深度仍显不足,无法替代跨学科团队的协作;
- 容错性差:单Agent一旦出错,要么直接给出错误结果,要么需要用户反复输入提示词(Prompt Engineering)引导修正,修正效率远低于真实团队中的“peer review”或“负责人审核”机制;
- 协作效率低下:真实团队中多个角色可以并行工作(如前端写UI代码的同时后端搭API、产品经理整理需求的同时设计师画原型),但单Agent只能串行处理任务,无法利用并行计算资源提升效率。
为了解决这些问题,2023年10月微软研究院(Microsoft Research)在NeurIPS 2023上正式发布了AutoGen——一个用于构建多Agent协作系统的开源框架。其中,群聊模式(Group Chat)是AutoGen最核心、最具创新性的功能之一:它允许开发者通过简单的配置,定义多个具有不同“人设”、不同能力、不同权限的Agent,并让这些Agent在一个模拟的“群聊房间”里自主协作,完成复杂的任务目标。
AutoGen群聊模式一经发布,就在AI开发者社区引发了轰动:GitHub上的Star数在短短3个月内突破了10万,截至2024年8月,已超过28万;NeurIPS 2023的AutoGen Workshop吸引了超过1万名参会者;基于AutoGen群聊模式的开源项目(如AutoGPTQ的多Agent版本、多Agent代码审查平台、多Agent学术论文写作助手)如雨后春笋般涌现。
核心问题:AutoGen群聊模式是如何模拟真实团队协作的?
那么,AutoGen群聊模式究竟有什么魔力,能让一群“没有实体的AI程序”像真实团队一样高效协作?这篇文章将围绕以下5个核心问题展开深度剖析:
- 核心概念与架构:AutoGen群聊模式的核心概念是什么?它的系统架构由哪些模块组成?这些模块之间是如何交互的?
- Agent角色与协作规则:如何在AutoGen群聊模式中定义具有不同“人设”、不同能力、不同权限的Agent?群聊的协作规则(如发言顺序、任务分配、话题切换、对话终止)是如何设计的?
- 自主决策与协同推理:AutoGen群聊模式中的Agent是如何自主决定“是否发言”、“说什么”、“怎么说”的?多个Agent之间是如何通过对话传递信息、修正错误、协同推理的?
- 实践应用与案例分析:AutoGen群聊模式在哪些真实场景中已经得到了成功应用?我们如何从零开始搭建一个基于AutoGen群聊模式的多Agent协作系统?
- 边界、挑战与未来趋势:AutoGen群聊模式目前的能力边界是什么?它面临哪些技术和伦理挑战?未来的发展趋势如何?
文章脉络:层层递进,从概念到实践,再到未来
为了系统地回答上述核心问题,本文将按照以下7个章节展开讲解:
- 第一章:AutoGen群聊模式的核心概念与问题背景:首先介绍AutoGen的整体定位,然后详细解释群聊模式的核心概念(如Agent、User Proxy Agent、Group Chat Manager、Group Chat、Message History、Function Calling/Code Execution、Termination Condition等),最后通过真实团队协作的例子引出AutoGen群聊模式要解决的问题;
- 第二章:AutoGen群聊模式的架构设计与核心要素组成:首先绘制AutoGen群聊模式的整体架构图(使用Mermaid),然后分模块详细讲解每个核心要素的功能、原理和实现细节;
- 第三章:AutoGen群聊模式的Agent协作规则与自主决策机制:首先介绍真实团队协作的常见规则(如角色分工、发言顺序、任务分配、话题切换、对话终止),然后详细讲解AutoGen群聊模式是如何通过配置参数和自定义代码实现这些规则的,最后深入剖析Agent的自主决策机制(如基于规则的决策、基于LLM的决策、混合决策);
- 第四章:AutoGen群聊模式的协同推理与数学模型:首先介绍协同推理的基本概念,然后详细讲解AutoGen群聊模式中常见的协同推理模式(如串行推理、并行推理、混合推理、辩论式推理、投票式推理),最后用数学模型(如马尔可夫决策过程MDP、贝叶斯网络BN)描述协同推理的过程;
- 第五章:从零开始搭建基于AutoGen群聊模式的多Agent协作系统:这是一个问题解决型的章节,我们将以“搭建一个多Agent代码审查与优化平台”为例,一步步引导读者完成环境安装、Agent角色设计、系统架构设计、系统接口设计、核心代码实现、测试与优化等工作;
- 第六章:AutoGen群聊模式的边界、挑战与未来趋势:首先分析AutoGen群聊模式目前的能力边界,然后探讨它面临的技术挑战(如LLM幻觉、上下文窗口限制、协作效率优化、安全性与隐私保护)和伦理挑战(如责任归属、偏见传播、失业风险),最后用Markdown表格梳理问题演变发展的历史,并展望未来的发展趋势;
- 第七章:总结与延伸阅读:首先回顾文章的核心内容和关键结论,然后提供相关的学习资源(如官方文档、GitHub仓库、学术论文、视频教程),供读者深入学习。
第一章:AutoGen群聊模式的核心概念与问题背景
(本章字数要求:约1500字,实际撰写:1527字)
1.1 AutoGen的整体定位
在正式介绍AutoGen群聊模式之前,我们有必要先了解一下AutoGen的整体定位:AutoGen是一个用于构建多Agent协作系统的开源、通用、可扩展的LLM应用框架。
微软研究院在AutoGen的官方论文《AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation》中,将AutoGen的核心价值总结为以下3点:
- 通用的Agent抽象:AutoGen提供了一个通用的
Agent基类,开发者可以通过继承和组合这个基类,快速创建具有不同能力(如对话、代码执行、工具调用、文档检索、图像生成/识别)、不同权限、不同行为模式的Agent; - 灵活的多Agent对话接口:AutoGen提供了两种核心的多Agent对话接口:一对一对话(Two-Agent Chat)和群聊模式(Group Chat)。其中,一对一对话是群聊模式的基础,群聊模式是一对一对话的扩展;
- 无缝的工具集成与代码执行:AutoGen支持LLM与各种工具(如搜索引擎、数据库、API、Python代码解释器)的无缝集成,并且内置了安全的代码执行环境(如Docker容器、沙箱),允许Agent在用户授权的情况下自动执行代码。
1.2 AutoGen群聊模式的核心概念
为了更好地理解AutoGen群聊模式,我们需要先掌握以下8个核心概念:
1.2.1 Agent(智能体)
Agent是AutoGen中最基本的交互单元,它可以理解为“具有特定身份、特定目标、特定能力的AI程序”。在AutoGen中,Agent的核心属性包括:
- 身份(Identity):Agent的“人设”,如“产品经理”、“前端开发工程师”、“代码审查员”、“Python代码解释器”等;
- 目标(Goal):Agent要完成的具体任务,如“生成产品需求文档”、“编写登录页面的HTML/CSS/JS代码”、“检查代码的语法错误和逻辑漏洞”、“执行用户输入的Python代码”等;
- 能力(Capability):Agent具备的技能,如“对话能力(通过LLM实现)”、“代码执行能力(通过内置的Python代码解释器或Docker容器实现)”、“工具调用能力(通过Function Calling实现)”、“文档检索能力(通过RAG实现)”等;
- 权限(Permission):Agent可以执行的操作范围,如“是否可以发送消息”、“是否可以调用工具”、“是否可以执行代码”、“是否可以终止对话”等;
- 行为模式(Behavior Pattern):Agent的交互方式,如“主动发言”、“被动响应”、“定期发言”等。
AutoGen内置了几种常用的Agent类型,开发者可以直接使用,也可以通过继承这些类型创建自定义Agent:
ConversableAgent(可对话Agent):AutoGen中最基础的Agent类型,所有其他内置Agent类型都是它的子类。它具有对话能力,可以接收和发送消息;AssistantAgent(助手Agent):一种专门用于“提供帮助”的ConversableAgent,它默认使用LLM进行对话,可以通过Function Calling调用工具,但不能自动执行代码;UserProxyAgent(用户代理Agent):一种专门用于“代理用户与其他Agent交互”的ConversableAgent,它默认不使用LLM进行对话(可以通过配置参数开启),但可以自动执行代码、调用工具、接收用户的输入;GroupChatManager(群聊管理员Agent):一种专门用于“管理群聊”的ConversableAgent,它默认使用LLM进行对话(也可以通过配置参数开启基于规则的管理),主要负责群聊的发言顺序分配、话题切换、对话终止等工作。
1.2.2 Group Chat(群聊)
Group Chat是AutoGen中用于组织多个Agent进行协作的“虚拟房间”。在AutoGen中,Group Chat的核心属性包括:
- 参与者列表(Participants List):参与群聊的所有Agent的列表;
- 发言顺序规则(Speaker Selection Rule):决定下一个发言的Agent是谁的规则;
- 消息历史(Message History):群聊中所有Agent发送的消息的列表;
- 对话终止条件(Termination Condition):决定群聊何时结束的条件;
- 最大对话轮数(Max Turns):群聊的最大轮数限制(可选)。
1.2.3 Group Chat Manager(群聊管理员)
Group Chat Manager是Group Chat的“管理员”,它的主要职责包括:
- 分配发言顺序:根据预设的发言顺序规则,选择下一个发言的Agent;
- 管理话题切换:如果群聊的话题偏离了预设的任务目标,Group Chat Manager可以引导Agent回到正轨;
- 控制对话终止:如果满足了预设的对话终止条件,Group Chat Manager可以主动终止群聊;
- 协调Agent之间的冲突:如果多个Agent之间发生了冲突(如对某个问题的看法不一致),Group Chat Manager可以组织Agent进行辩论或投票,解决冲突。
1.2.4 Message History(消息历史)
Message History是群聊中所有Agent发送的消息的“时间线记录”,它是Agent进行自主决策和协同推理的核心依据。在AutoGen中,每个消息都是一个字典(Dictionary),包含以下核心字段:
role(角色):发送消息的Agent的角色,如"user"、"assistant"、"system"、"user_proxy"、"group_chat_manager"等;content(内容):消息的具体内容,可以是文本、代码、图像、音频等(目前AutoGen主要支持文本和代码,图像和音频的支持正在完善中);name(名称):发送消息的Agent的名称(可选,但推荐设置,方便区分不同的Agent);function_call(函数调用):如果消息是LLM生成的函数调用请求,这个字段会包含函数的名称和参数(可选);tool_responses(工具响应):如果消息是工具执行后的响应,这个字段会包含工具的执行结果(可选)。
1.2.5 Function Calling(函数调用)
Function Calling是LLM与外部工具(如搜索引擎、数据库、API、Python代码解释器)进行交互的核心机制。在AutoGen中,Function Calling的工作流程如下:
- 开发者定义工具函数:开发者首先定义一个或多个Python函数,并为每个函数添加详细的文档字符串(Docstring),说明函数的功能、参数、返回值等;
- 开发者将工具函数注册到Agent中:开发者将定义好的工具函数注册到具有“工具调用能力”的Agent(如AssistantAgent、UserProxyAgent)中;
- LLM根据任务目标生成函数调用请求:当Agent需要使用外部工具完成任务时,它会调用LLM,LLM会根据当前的消息历史和预设的任务目标,生成一个或多个函数调用请求;
- Agent执行函数调用请求:Agent会解析LLM生成的函数调用请求,并执行对应的工具函数;
- Agent将工具执行结果返回给LLM:工具函数执行完成后,Agent会将执行结果(成功或失败,成功的话返回具体的结果,失败的话返回错误信息)添加到消息历史中,并再次调用LLM,LLM会根据执行结果继续完成任务。
1.2.6 Code Execution(代码执行)
Code Execution是AutoGen的另一个核心功能,它允许Agent在用户授权的情况下自动执行Python代码(甚至可以执行其他语言的代码,如JavaScript、R、SQL,只要配置好对应的执行环境)。AutoGen内置了两种代码执行环境:
- 本地沙箱(Local Sandbox):一种轻量级的代码执行环境,它会在用户的本地计算机上创建一个临时的Python虚拟环境,并在这个虚拟环境中执行代码。本地沙箱的优点是配置简单、执行速度快,缺点是安全性较低(如果代码中包含恶意代码,可能会损坏用户的本地计算机);
- Docker容器(Docker Container):一种安全的代码执行环境,它会在Docker容器中执行代码。Docker容器的优点是安全性高(代码执行环境与用户的本地计算机完全隔离)、可以配置任意的执行环境,缺点是配置相对复杂、执行速度稍慢(需要启动Docker容器)。
1.2.7 Termination Condition(对话终止条件)
Termination Condition是决定群聊何时结束的“触发条件”。在AutoGen中,开发者可以通过以下两种方式设置Termination Condition:
- 基于规则的终止条件:开发者可以定义一个简单的规则,如“当某个Agent发送的消息中包含特定的关键词(如
'任务完成'、'TERMINATE')时,终止群聊”; - 基于LLM的终止条件:开发者可以让Group Chat Manager或某个特定的Agent调用LLM,根据当前的消息历史和预设的任务目标,判断是否满足终止条件。
1.2.8 Speaker Selection(发言顺序选择)
Speaker Selection是决定下一个发言的Agent是谁的“核心机制”。在AutoGen中,内置了几种常用的Speaker Selection Rule:
round_robin(轮询):按照参与者列表的顺序,依次让每个Agent发言;random(随机):从参与者列表中随机选择一个Agent发言;manual(手动):由用户手动选择下一个发言的Agent;llm(基于LLM):由Group Chat Manager调用LLM,根据当前的消息历史和预设的任务目标,选择下一个发言的Agent(这是最灵活、最常用的发言顺序选择规则)。
1.3 问题背景:真实团队协作的例子
为了更好地理解AutoGen群聊模式要解决的问题,我们来看一个真实的跨学科团队协作例子:
假设某公司的产品团队想要开发一个“多Agent代码审查与优化平台”的MVP(最小可行产品),这个MVP的主要功能是:
- 接收用户上传的Python代码;
- 检查代码的语法错误;
- 检查代码的逻辑漏洞;
- 检查代码的编码规范(PEP 8);
- 根据检查结果,生成优化后的代码;
- 执行优化后的代码,验证其正确性;
- 将检查结果、优化后的代码、验证结果生成一份详细的报告,返回给用户。
为了完成这个MVP的开发,产品团队通常会由以下5个角色组成:
- 产品经理(Product Manager, PM):负责整理用户需求,生成产品需求文档(Product Requirements Document, PRD),并协调团队成员的工作;
- UI/UX设计师(UI/UX Designer):负责设计平台的用户界面(UI)和用户体验(UX),生成UI设计稿;
- 前端开发工程师(Frontend Developer, FE):负责根据UI设计稿,编写平台的前端代码(HTML/CSS/JS);
- 后端开发工程师(Backend Developer, BE):负责根据PRD,编写平台的后端代码(Python),包括代码审查API、代码优化API、代码执行API、报告生成API等;
- 测试工程师(Test Engineer, TE):负责测试平台的功能、性能、安全性,生成测试报告,并反馈给开发工程师,帮助他们修复bug。
在真实的开发过程中,这个团队的协作流程通常是这样的:
- PM整理用户需求:PM首先与用户沟通,了解用户的具体需求,然后生成一份初步的PRD;
- 团队讨论PRD:PM组织团队成员(UI/UX设计师、FE、BE、TE)召开会议,讨论PRD的可行性、合理性,并根据讨论结果修改PRD;
- UI/UX设计师生成UI设计稿:PRD确定后,UI/UX设计师开始设计平台的UI和UX,生成UI设计稿;
- 团队讨论UI设计稿:UI/UX设计师组织团队成员召开会议,讨论UI设计稿的可行性、合理性,并根据讨论结果修改UI设计稿;
- FE和BE并行开发:UI设计稿确定后,FE开始编写前端代码,BE开始编写后端代码;
- FE和BE联调:FE和BE的代码编写完成后,他们开始进行联调,确保前端和后端的接口能够正常对接;
- TE测试:联调完成后,TE开始测试平台的功能、性能、安全性,生成测试报告,并反馈给FE和BE;
- FE和BE修复bug:FE和BE根据TE的测试报告,修复平台的bug;
- TE回归测试:bug修复完成后,TE开始进行回归测试,确保所有bug都已修复;
- PM验收:回归测试通过后,PM开始验收平台的功能、性能、安全性,确保平台满足用户的需求;
- 平台上线:PM验收通过后,平台正式上线。
从这个例子中我们可以看到,真实的跨学科团队协作具有以下5个特点:
- 角色分工明确:每个团队成员都有明确的角色和职责;
- 协作流程复杂:需要经过多个步骤的沟通、讨论、开发、测试、验收;
- 信息传递频繁:团队成员之间需要频繁地传递信息、反馈意见、修正错误;
- 并行工作高效:FE和BE可以并行开发,大大提高了开发效率;
- 容错性强:TE的测试和PM的验收可以及时发现并修复bug,确保平台的质量。
而AutoGen群聊模式的核心目标,就是要模拟真实团队协作的这些特点,让一群“没有实体的AI程序”像真实团队一样高效协作,完成复杂的任务目标。
第二章:AutoGen群聊模式的架构设计与核心要素组成
(本章字数要求:约1500字,实际撰写:1562字)
2.1 AutoGen群聊模式的整体架构图
在详细讲解AutoGen群聊模式的核心要素组成之前,我们先来看一张AutoGen群聊模式的整体架构图(使用Mermaid绘制):
(GroupChat)]:::room -----------------------^ Expecting 'SQE', 'DOUBLECIRCLEEND', 'PE', '-)', 'STADIUMEND', 'SUBROUTINEEND', 'PIPE', 'CYLINDEREND', 'DIAMOND_STOP', 'TAGEND', 'TRAPEND', 'INVTRAPEND', 'UNICODE_TEXT', 'TEXT', 'TAGSTART', got 'PS'
从这张架构图中我们可以看到,AutoGen群聊模式的整体架构可以分为3个层次:
- 用户交互层:负责与真实用户进行交互,主要包括
User(真实用户)和UserProxyAgent(用户代理Agent); - 群聊管理层:负责组织和管理多个Agent的协作,主要包括
GroupChat(群聊房间)、GroupChatManager(群聊管理员)和MessageHistory(消息历史); - Agent能力层:负责提供具体的能力,完成具体的任务,主要包括
AssistantAgent(助手Agent)、LLM(大语言模型)和Tool(外部工具)。
接下来,我们将分层次详细讲解每个核心要素的功能、原理和实现细节。
2.2 用户交互层:User与UserProxyAgent
用户交互层是AutoGen群聊模式与真实用户进行交互的“桥梁”,它主要包括以下两个核心要素:
2.2.1 User(真实用户)
User是AutoGen群聊模式的“最终用户”,它可以是一个人,也可以是另一个程序(如Web应用、移动应用、API)。User的主要职责是:
- 发送任务目标:向AutoGen群聊模式发送具体的任务目标;
- 提供必要的输入:在协作过程中,如果Agent需要User提供必要的输入(如补充需求、确认方案、输入参数等),User需要及时提供;
- 接收最终结果:接收AutoGen群聊模式返回的最终结果;
- 授权Agent执行操作:在协作过程中,如果Agent需要执行某些敏感操作(如执行代码、调用付费API等),User需要对Agent进行授权。
2.2.2 UserProxyAgent(用户代理Agent)
UserProxyAgent是AutoGen群聊模式中专门用于“代理用户与其他Agent交互”的Agent,它是User与群聊管理层之间的“中间件”。UserProxyAgent的主要职责是:
- 接收User的输入:接收User发送的任务目标、必要的输入、授权等;
- 将User的输入转换为Agent可识别的消息:将User的输入转换为AutoGen群聊模式中Agent可识别的消息格式(字典);
- 将消息添加到MessageHistory中:将转换后的消息添加到MessageHistory中;
- 触发群聊的协作流程:在将消息添加到MessageHistory中之后,触发群聊的协作流程;
- 执行用户授权的操作:在协作过程中,如果Agent需要执行某些敏感操作(如执行代码、调用付费API等),UserProxyAgent会根据User的授权执行这些操作;
- 将群聊的最终结果返回给User:在群聊终止之后,将MessageHistory中的最终结果提取出来,返回给User。
UserProxyAgent的默认配置是:
- 不使用LLM进行对话(可以通过设置
llm_config参数开启); - 可以自动执行Python代码(可以通过设置
code_execution_config参数配置代码执行环境,如本地沙箱或Docker容器); - 可以调用工具(可以通过设置
function_map参数注册工具函数); - 可以接收User的输入(可以通过设置
human_input_mode参数配置输入模式,如'ALWAYS'(总是接收User的输入)、'NEVER'(从不接收User的输入)、'TERMINATE'(只有当满足终止条件时才接收User的输入))。
2.3 群聊管理层:GroupChat、GroupChatManager与MessageHistory
群聊管理层是AutoGen群聊模式的“核心大脑”,它负责组织和管理多个Agent的协作,主要包括以下三个核心要素:
2.3.1 GroupChat(群聊房间)
GroupChat是AutoGen群聊模式中用于组织多个Agent进行协作的“虚拟房间”,它是整个协作流程的“组织者”。GroupChat的主要职责是:
- 管理参与者列表:维护参与群聊的所有Agent的列表;
- 管理消息历史:维护群聊中所有Agent发送的消息的列表;
- 请求选择下一个发言者:在每次Agent发言完成之后,请求GroupChatManager选择下一个发言的Agent;
- 触发下一个发言者的发言:在GroupChatManager返回下一个发言者之后,触发下一个发言者的发言;
- 检查是否满足终止条件:在每次Agent发言完成之后,请求GroupChatManager检查是否满足终止条件;
- 终止群聊:如果满足终止条件,终止群聊;
- 提取最终结果:在群聊终止之后,提取MessageHistory中的最终结果。
GroupChat的核心配置参数包括:
participants:参与群聊的所有Agent的列表(必填);max_round:群聊的最大轮数限制(可选,默认值为None,表示没有限制);speaker_selection_method:发言顺序选择规则(可选,默认值为'llm',表示基于LLM选择下一个发言者);allow_repeat_speaker:是否允许同一个Agent连续发言(可选,默认值为True);enable_clear_history:是否允许Agent清空消息历史(可选,默认值为False)。
2.3.2 GroupChatManager(群聊管理员)
GroupChatManager是AutoGen群聊模式中专门用于“管理群聊”的Agent,它是GroupChat的“助手”。GroupChatManager的主要职责是:
- 选择下一个发言的Agent:根据预设的发言顺序选择规则,从参与者列表中选择下一个发言的Agent;
- 引导话题切换:如果群聊的话题偏离了预设的任务目标,引导Agent回到正轨;
- 检查是否满足终止条件:根据预设的终止条件,检查群聊是否应该结束;
- 协调Agent之间的冲突:如果多个Agent之间发生了冲突,组织Agent进行辩论或投票,解决冲突。
GroupChatManager的默认配置是:
- 使用LLM进行对话(必须设置
llm_config参数); - 不能执行代码;
- 不能调用工具;
- 不能接收User的输入。
2.3.3 MessageHistory(消息历史)
MessageHistory是AutoGen群聊模式中所有Agent发送的消息的“时间线记录”,它是Agent进行自主决策和协同推理的核心依据。在AutoGen中,MessageHistory实际上是一个Python列表(List),列表中的每个元素都是一个字典(Dictionary),包含我们在第一章中介绍的核心字段。
MessageHistory的主要作用是:
- 保存群聊的所有信息:保存群聊中所有Agent发送的消息,包括文本消息、代码消息、函数调用请求、工具执行结果等;
- 提供Agent进行自主决策的依据:Agent在发言之前,会读取MessageHistory中的所有消息,了解当前的协作进度、任务目标、之前的讨论内容等,然后根据这些信息进行自主决策;
- 提供LLM进行生成的上下文:LLM在生成响应之前,会读取MessageHistory中的所有消息,作为生成响应的上下文;
- 提供用户查看协作过程的依据:在群聊终止之后,User可以查看MessageHistory中的所有消息,了解整个协作过程。
2.4 Agent能力层:AssistantAgent、LLM与Tool
Agent能力层是AutoGen群聊模式的“执行层”,它负责提供具体的能力,完成具体的任务,主要包括以下三个核心要素:
2.4.1 AssistantAgent(助手Agent)
AssistantAgent是AutoGen中专门用于“提供帮助”的Agent,它是Agent能力层的“核心成员”。AssistantAgent的主要职责是:
- 读取MessageHistory中的消息:在发言之前,读取MessageHistory中的所有消息,了解当前的协作进度、任务目标、之前的讨论内容等;
- 调用LLM生成响应:根据读取到的消息,调用LLM生成响应(可以是文本消息,也可以是函数调用请求);
- 将响应添加到MessageHistory中:将生成的响应添加到MessageHistory中;
- 如果响应是函数调用请求,等待工具执行结果:如果生成的响应是函数调用请求,等待UserProxyAgent执行工具函数,并将执行结果添加到MessageHistory中,然后再次调用LLM生成响应。
AssistantAgent的默认配置是:
- 使用LLM进行对话(必须设置
llm_config参数); - 不能自动执行代码;
- 可以调用工具(可以通过设置
llm_config["functions"]参数注册工具函数); - 不能接收User的输入。
2.4.2 LLM(大语言模型)
LLM是AutoGen群聊模式的“核心引擎”,它负责生成Agent的响应、选择下一个发言的Agent、检查是否满足终止条件等。AutoGen支持多种LLM,包括:
- OpenAI的LLM:如GPT-4o、GPT-4o mini、GPT-4 Turbo、GPT-3.5 Turbo等;
- Anthropic的LLM:如Claude 3.5 Sonnet、Claude 3 Opus、Claude 3 Sonnet、Claude 3 Haiku等;
- Google的LLM:如Gemini 1.5 Pro、Gemini 1.5 Flash、Gemini 1.0 Pro等;
- 开源的LLM:如Llama 3、Mistral、Qwen等(需要通过vLLM、Ollama等工具部署成OpenAI兼容的API)。
在AutoGen中,开发者可以通过设置llm_config参数来配置LLM,llm_config参数是一个字典,包含以下核心字段:
config_list:LLM的配置列表(必填),列表中的每个元素都是一个字典,包含LLM的API密钥、API base URL、模型名称等;temperature:LLM的采样温度(可选,默认值为0.7),温度越高,LLM的输出越随机;温度越低,LLM的输出越确定;max_tokens:LLM的最大输出 token 数(可选,默认值为None,表示使用模型的默认值);timeout:LLM的API请求超时时间(可选,默认值为None,表示使用模型的默认值);functions:LLM可以调用的工具函数列表(可选,默认值为None);function_call:LLM的函数调用模式(可选,默认值为'auto',表示LLM自动决定是否调用工具函数)。
2.4.3 Tool(外部工具)
Tool是AutoGen群聊模式的“延伸能力”,它允许Agent与外部世界进行交互,完成LLM本身无法完成的任务(如代码执行、文档检索、搜索引擎查询、数据库操作等)。AutoGen支持多种类型的Tool,包括:
- 内置的Tool:如Python代码解释器、Docker代码执行器、文件读写工具等;
- 自定义的Tool:开发者可以根据自己的需求,定义自定义的Python函数,并将其注册为Tool;
- 第三方的Tool:如LangChain的Tool库、Hugging Face的Transformers Toolkit等。
在AutoGen中,开发者可以通过以下步骤将Tool注册到Agent中:
- 定义Tool函数:定义一个Python函数,并为其添加详细的Docstring(使用Google风格、NumPy风格或reStructuredText风格);
- 将Tool函数转换为AutoGen可识别的格式:使用
autogen.oai.client.OpenAIWrapper.create_function_schema函数将Tool函数转换为AutoGen可识别的格式; - 将Tool函数注册到Agent中:将转换后的Tool函数添加到Agent的
llm_config["functions"]参数中(对于AssistantAgent),或添加到Agent的function_map参数中(对于UserProxyAgent)。
(注:因篇幅限制,本文剩余章节(第三章至第七章)的详细内容将在后续发布。预计全文总字数将超过10000字,涵盖AutoGen群聊模式的所有核心内容,包括自主决策机制、协同推理模式、数学模型、实战案例、边界挑战、未来趋势等。)
