# 1、项目介绍
## 1.1、本次分享介绍
(1)AutoGen框架介绍
(2)AutoGen功能测试
相关视频:
https://www.bilibili.com/video/BV1tGzSYxEZe/
https://youtu.be/jbEXvhWACqk
## 1.2 AutoGen介绍
AutoGen是微软发布的一个用于构建AI Agent系统的开源框架,简化了事件驱动、分布式、可扩展和弹性Agent应用程序的创建过程
通过AutoGen可以快速构建AI Agent协作的系统并自主或在人类监督下执行任务
github地址:https://github.com/microsoft/autogen
### (1)版本
**AutoGen0.2**
当前的稳定版本,一直维护
**AutoGen0.4**
是最新架构的第一版本,此版本仍处于开发阶段
V0.4版本是对AutoGen的一次从头开始的重写,目的是为构建Agent创建一个更健壮、可扩展、更易用的跨语言库
这是一个突破性的变化,该版本后续还会支持AutoGen Studio
预计会在年底(2024)前发布0.4新版本
本期视频内容均为使用V0.4版本进行相关介绍和代码测试
### (2)核心功能
**异步消息传递**
Agent通过异步消息进行通信,支持事件驱动和请求/响应交互模式
**全面的类型支持**
在所有的接口中使用类型,并在构建时强制进行类型检查,注重质量和内聚性
**可拓展性和分布式**
设计复杂的分布式Agent应用网络,可跨组织边界运行
**模块化和可扩展**
利用可插拔组件定制系统,支持自定义Agent、工具、模型等
**跨语言支持**
跨不同编程语言,目前支持python和.NET,不久会支持更多语言
**可观察性和调试**
用于跟踪、追踪和调试Agent交互和工作流的内置功能和工具,包括支持行业标准的OpenTelemetry
### (3)应用接口
AutoGen的应用接口采用分层架构设计,存在多套软件接口
目前,应用程序可以使用3个主要应用接口:Core、AgentChat、Extensions
**Core:事件驱动型接口,核心接口,autogen-core**
按照Agent模式构建
支持Agent之间异步消息传递(类似于RPC),或通过主题广播(类似pub/sub)来处理和生成类型化消息
Agent可以是分布式的,可以用不同的编程语言实现,同时还可以相互通信
如果要是想构建可扩展性的事件驱动Agent系统,可以从Core接口开始
**AgentChat:任务驱动型应用接口,autogen-agentchat**
建立在Core核心层之上,抽象了许多底层系统概念
允许定义会话Agent,将它们组织成Team,然后运行Team协作完成任务
如果要是只想基于任务去构建Agent系统,可以从AgentChat接口开始
**Extensions:第三方系统接口,扩展包,autogen-ext**
主要为第三方系统实现的核心接口,如OpenAI模型客户端接口等
除内置扩展外,该扩展包还容纳社区贡献的扩展接口
### (4)Agent属性
**name**
指定Agent的名称
**model_client**
指定Agent使用的大语言模型
**description**
Agent的描述信息
**handoffs**
负责Agent的移交
**system_message**
Agent的系统提示词
**tools**
提供给Agent使用的工具集合
### (5)Team:官方提供5中预设Team
在AgentChat中Team由一个或多个Agent组成,定义了Agent组如何协作完成任务
Team通过接收任务和返回任务结果与应用程序交互
Team是有状态的,并在多个任务中保持上下文,需要终止条件来决定何时停止处理当前任务
**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**
官方正在开发中,相应源码暂没相关注释
### (6)Team:运行接口
**run()**
处理任务并返回任务结果
**run_stream()**
类似于run(),处理任务并返回异步生成器消息内容和最终任务结果
**reset()**
若上一个任务与下一个任务无关,则重置Team的状态
否则,Team可以利用上一个任务的上下文来处理下一个任务
### (7)Termination:终止Team
Team运行后可以一直运行下去,在很多情况下需要知道何时停止运行,这就是终止条件的作用
终止条件是有状态的,但在每次运行run()或run_stream()结束后会自动重置
多个终止条件支持使用AND或OR运算符进行组合
目前支持如下8种终止条件:
**MaxMessageTermination**
在生成指定数量的消息,包括Agent和Task消息�