# AutoGenV04Test **Repository Path**: tedchen888/AutoGenV04Test ## Basic Information - **Project Name**: AutoGenV04Test - **Description**: AutoGen最新架构v0.4正式发布第一个稳定版本,v0.4是对AutoGen的一次从头开始的重写,目的是为构建Agent创建一个更健壮、可扩展、更易用的跨语言库,其应用接口采用分层架构设计,存在多套软件接口用以满足不同的场景需求 。 - **Primary Language**: Python - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-01-15 - **Last Updated**: 2025-01-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1、项目介绍 ## 1.1、本次分享介绍 **(第一期)[2025.1.12]AutoGen v0.4稳定版本框架介绍及AgentChat应用接口功能测试** https://www.bilibili.com/video/BV17WcVeZERm/ https://youtu.be/7H00xQK8rDM **(第二期)[2025.1.13]AutoGen v0.4稳定版本Studio低代码平台使用** https://www.bilibili.com/video/BV1qTcUe4EQx/ https://youtu.be/eH65c1bfM3Q ## 1.2 AutoGen介绍 AutoGen是微软发布的一个用于构建AI Agent系统和应用程序的开源框架 github地址:https://github.com/microsoft/autogen 文档地址:https://microsoft.github.io/autogen/stable/index.html 最新架构AutoGen v0.4正式发布第一个稳定版本 v0.4版本是对AutoGen的一次从头开始的重写,目的是为构建Agent创建一个更健壮、可扩展、更易用的跨语言库 AutoGen v0.4的应用接口采用分层架构设计,存在多套软件接口用以满足不同的场景需求 **(1)Magentic-One CLI** 基于控制台的多Agent助手,用于执行基于 Web 和文件的任务。 基于 AgentChat 构建 **(2)Studio** 一款无需编写代码即可进行原型设计和管理Agent的应用程序。基于 AgentChat 构建 **(3)Core:事件驱动型接口,核心接口,autogen-core** 用于构建可扩展的多Agent人工智能系统的事件驱动编程框架 **(4)AgentChat:任务驱动型应用接口,autogen-agentchat** 用于构建会话式单Agent和多Agent应用程序的编程框架,建立在Core核心层之上,抽象了许多底层系统概念 **(5)Extensions:第三方系统接口,扩展包,autogen-ext** 与外部服务或其他库交互的 Core 和 AgentChat 组件的实现。可以查找并使用社区扩展或创建自己的社区扩展 如OpenAI模型客户端接口等,除内置扩展外,该扩展包还容纳社区贡献的扩展接口 ## 1.3 AgentChat:任务驱动型应用核心概念 ### 1.3.1 Models 大模型 Agent需要访问LLM模型服务 由于有许多不同的提供者具有不同的API,autogen-core为模型客户端实现了一个协议 而autogen-ext为流行的模型服务实现了一组模型客户端,如OpenAI、本地模型 ### 1.3.2 Messages 消息通信 在AgentChat中,消息促进与其他Agent、orchestrators和applications的通信和信息交换 AgentChat支持各种消息类型,每种消息类型均针对特定目的而设计 **(1)Agent-Agent Messages** 此消息类型允许文本和多模式通信,并包含其他消息类型,例如TextMessage或MultiModalMessage **(2)Internal Events** 这些消息用于传达Agent本身内的事件和操作信息 ### 1.3.3 Agents 智能体 **AgentChat提供了一组预设Agents,每个Agent在响应消息的方式上都有所不同:** AssistantAgent:是一个内置的Agent,使用大语言模型,并且具有使用工具的能力 UserProxyAgent:接受用户输入的Agent将其作为响应返回 CodeExecutorAgent:可以执行代码的Agent OpenAIAssistantAgent:由 OpenAI Assistant 支持的Agent,能够使用自定义工具 MultimodalWebSurfer:一种多模式Agent,可以搜索网络并访问网页以获取信息 FileSurfer:可以搜索和浏览本地文件以获取信息的Agent VideoSurfer:可以观看视频以获取信息的Agent **(1)所有Agent共享以下属性和方法** **name** 指定Agent的唯一名称 **description** Agent的描述信息 **model_client** 指定Agent使用的大语言模型 **on_messages()** 向Agent发送一系列ChatMessage并获取Response **on_messages_stream()** 与on_messages()相同,但返回AgentEvent或ChatMessage的迭代器,后跟Response作为最后一项 **on_reset()** 将Agent重置为其初始状态 **run()和run_stream()** 分别调用on_messages()和on_messages_stream()的便捷方法,但提供与Teams相同的接口 **(2)AssistantAgent是一个内置的Agent,其相关额外属性** **tools** 提供给Agent使用的工具集合 **system_message** Agent的系统提示词 **model_context** 使用模型上下文 ### 1.3.4 Teams 团队 在AgentChat中Team由一个或多个Agent组成,定义了Agent组如何协作完成任务 Team通过接收任务和返回任务结果与应用程序交互 Team是有状态的,并在多个任务中保持上下文,需要终止条件来决定何时停止处理当前任务 **AgentChat提供了一组预设Teams:** **BaseGroupChat** Team的基类,其他4中Team预设类别均继承该基类 **RoundRobinGroupChat** 该预设Team中的参与者(Agent)以顺序循环的方式轮流向所有参与者发布信息 该预设Team允许所有的Agent共享上下文,并以循环方式轮流做出响应 其属性如下: participants:设置Team的参与者(Agent) ,List列表 termination_condition:Team终止条件,默认None则无限期运行 max_turns:Team支持的最大会话回合数,默认None则无限制 **SelectorGroupChat** 该预设Team中的参与者(Agent)以推荐选择的方式轮流向所有参与者发布信息 每次消息发布后,都会使用ChatCompletionClient(LLM)选择下一个发言者(Agent) 其属性如下: participants:设置Team的参与者(Agent) ,List列表 model_client:设置LLM,ChatCompletionClient termination_condition:Team终止条件,默认None则无限期运行 max_turns:Team支持的最大会话回合数,默认None则无限制 selector_prompt:用于选择下一个发言者(Agent)的prompt模版 allow_repeated_speaker:是否允许连续选择同一个发言者(Agent),默认False则不允许 selector_func:自定义选择器函数,用于获取对话历史记录并返回下一个发言者(Agent),若启动该功能则LLM选择会失效,若该函数返回None,则LLM会主动接管进行下一位发言者(Agent)的选择 **Swarm** 该预设Team中的参与者(Agent)以移交方式向所有参与者发布信息 参与者列表中的第一个参与者是初始发言者,下一位发言者是根据HandoffsMessage消息中指定的参与者。若无移交信息,则当前发言者继续发言 其属性如下: participants:设置Team的参与者(Agent) ,List列表 termination_condition:Team终止条件,默认None则无限期运行 max_turns:Team支持的最大会话回合数,默认None则无限制 **MagenticOneGroupChat** 一个通用的多Agent系统,用于解决各种领域的开放式网络和基于文件的任务 它代表了多Agent系统向前迈出的重要一步,在多项Agent基准测试中取得了极具竞争力的性能 其属性如下: participants:设置Team的参与者(Agent) ,List列表 termination_condition:Team终止条件,默认None则无限期运行 max_turns:Team支持的最大会话回合数,默认None则无限制 **(1)Team管理** **run()** 处理任务并返回任务结果 **run_stream()** 类似于run(),处理任务并返回异步生成器消息内容和最终任务结果 **reset()** 将清除Team的状态,包括所有Agent。它将调用每个Agent的on_reset()方法来清除Agent的状态 **set()** 将停止Team。将在当前Agent的轮次结束时停止Team。因此,Team可能不会立即停止。这允许当前Agent完成其轮次,并在Team停止之前向Team广播最终消息,从而保持Team状态一致 **中止Team 传递给cancellation_token参数** 可以中止对run()或run_stream()的调用 在执行期间,通过设置传递给cancellation_token参数的CancellationToken ### 1.3.5 Human-in-the-Loop 人类反馈 通过应用程序与Team交互的主要方式有两种: **(1)在运行期间提供反馈:** 在Team运行期间,通过UserProxyAgent提供反馈 UserProxyAgent是一个特殊的内置Agent,充当用户向Team提供反馈的Agent 当UserProxyAgent在运行期间被调用时,它会阻止Team的执行,直到用户提供反馈或出错为止。这会使Team处于无法挽救或恢复的不稳定状态 由于此方法的阻止性质,建议仅将其用于需要用户立即反馈的简短交互,例如通过单击按钮请求批准或不批准 **(2)为下一次运行提供反馈** Team运行终止后,应用程序或用户提供反馈,Team带着反馈再次运行 这种方法在Team和应用程序/用户之间进行异步通信的持久会话中非常有用:一旦Team完成运行,应用程序就会保存Team的状态,将其放入持久存储中,并在反馈时恢复Team 提供两种方式: 设置最大回合数,以便Team始终在指定回合数后停止 使用TextMentionTermination和HandoffTermination等终止条件,让Team根据Team的内部状态决定何时停止并交回控制权 ### 1.3.6 Termination 终止条件 Team运行后可以一直运行下去,在很多情况下需要知道何时停止运行,这就是终止条件的作用 终止条件是有状态的,但在每次运行run()或run_stream()结束后会自动重置 多个终止条件支持使用AND或OR运算符进行组合 目前支持如下8种终止条件: **MaxMessageTermination** 在生成指定数量的消息,包括Agent和Task消息后则终止 **TextMentionTermination** 当在消息中提到特定的文本或字符串则终止 **TokenUsageTermination** 当使用了一定数量的tokens时则终止 **TimeoutTermination** 在指定的持续时间(以秒为单位)后终止 **HandoffTermination** 在请求移交至特定目标后终止。特别适合需要用户干预的场景 **SourceMatchTermination** 在特定的Agent做出响应之后终止 **ExternalTermination** 允许从运行外部对终止进行控制。特被适合用户界面集成(如聊天中的停止按钮)场景 **StopMessageTermination** 当Agent发出StopMessage时终止 # 2、前期准备工作 ## 2.1 开发环境搭建:anaconda、pycharm anaconda:提供python虚拟环境,官网下载对应系统版本的安装包安装即可 pycharm:提供集成开发环境,官网下载社区版本安装包安装即可 **可参考如下视频:** 集成开发环境搭建Anaconda+PyCharm https://www.bilibili.com/video/BV1q9HxeEEtT/?vd_source=30acb5331e4f5739ebbad50f7cc6b949 https://youtu.be/myVgyitFzrA ## 2.2 大模型相关配置 (1)GPT大模型使用方案(第三方代理方式) (2)非GPT大模型(阿里通义千问、讯飞星火、智谱等大模型)使用方案(OneAPI方式) (3)本地开源大模型使用方案(Ollama方式) **可参考如下视频:** 提供一种LLM集成解决方案,一份代码支持快速同时支持gpt大模型、国产大模型(通义千问、文心一言、百度千帆、讯飞星火等)、本地开源大模型(Ollama) https://www.bilibili.com/video/BV12PCmYZEDt/?vd_source=30acb5331e4f5739ebbad50f7cc6b949 https://youtu.be/CgZsdK43tcY # 3、项目初始化 ## 3.1 下载源码 GitHub或Gitee中下载工程文件到本地,下载地址如下: https://github.com/NanGePlus/AutoGenV04Test https://gitee.com/NanGePlus/AutoGenV04Test ## 3.2 构建项目 使用pycharm构建一个项目,为项目配置虚拟python环境 项目名称:AutoGenV04Test 虚拟环境名称保持与项目名称一致 ## 3.3 将相关代码拷贝到项目工程中 直接将下载的文件夹中的文件拷贝到新建的项目目录中 ## 3.4 安装项目依赖 命令行终端中执行如下命令安装依赖包 pip install -U "autogen-agentchat" pip install "autogen-ext[openai]" pip install asyncio==3.4.3 # 4、测试 ## 4.1 AgentChat框架基本功能测试 相关测试代码在BasicTest文件夹下 ## 4.2 AutoGen Studio低代码平台使用 (1)运行如下命令安装依赖包 pip install -U autogenstudio (2)命令行终端启动服务,运行如下命令 autogenstudio ui --port 8081 支持修改相关参数自定义应用程序如下: **--host ** 指定主机地址,默认为localhost **--appdir ** 指定存储应用程序文件(如数据库和生成的用户文件)的文件夹。默认为用户主目录中的.autogenstudio文件夹 **--port ** 指定端口号。默认为8080 **--upgrade-database** 升级数据库架构。默认为False **--reload** 启用在对代码进行更改时自动重新加载服务器。默认为 False **--database-uri** 指定数据库URI (4)登录平台使用 http://localhost:8081/