构建多智能体对话系统 –AutoGen

AutoGen

AutoGen是一个开源编程框架,用于构建AI代理并促进多个代理之间的合作以解决任务。

AutoGen旨在提供一个易于使用和灵活的框架,以加速对人工智能的开发和研究,如PyTorch的深度学习。

它提供了一些功能,例如可以与其它代理进行交谈的代理,LLM和工具的使用支持,自主与人类交互进行工作流以及多代理对话模式。

AutoGen被明确指出”并非意在成为一个生产就绪的应用”,而是为了”帮助您快速原型化多智能体工作流”。

这一定位使得AutoGen成为一个理想的”创新引擎”或”研究实验田”,用于孵化尖端的智能体AI概念,特别是在复杂的多智能体协作领域。

该框架使用分层和可扩展的设计,层级明确划分了职责,并建立在下面的层级之上。

此设计可以使您能够在不同的抽象级别(从高级API到低级组件)使用框架。

  • Core API:Code API实现了消息传递、事件驱动的代理以及本地和分布式运行时,以实现灵活性和强大功能。它还支持.NET和Python跨语言支持
  • AgentChat API:实现了一个更简单但有主见的API,用于快速原型设计。
  • Extensions API:使第一方和第三方扩展能够不断扩展框架功能。它支持LLM客户端的特定实现以及代码执行等功能。

核心功能与特点
  • 多智能体协作框架
    • 多代理系统(Multi-Agent System):AutoGen支持多个智能体(Agent)之间的协作,每个智能体可以扮演不同角色(如任务规划者、代码生成者、评估者等),通过对话或任务分配共同完成复杂任务。
    • 动态任务分配:智能体之间可以自动协商任务分工,适应不同场景需求。
  • 自动化机器学习(AutoML)
    • 模型选择与超参数优化:自动搜索最佳模型架构和超参数组合,支持主流机器学习库(如Scikit-learn、XGBoost、LightGBM等)。
    • 特征工程自动化:自动进行数据预处理、特征选择和特征生成。
    • 端到端流水线生成:自动进行数据预处理、特征选择和特征生成。
  • 灵活的工作流管理
    • 可视化流程设计:通过图形化界面或代码定义工作流(如DAG,有向无环图),支持复杂任务编排。
    • 可扩展性:支持自定义组件(如数据清洗模块、模块训练器),可集成第三方工具(如TensorFlow、PyTorch)。
  • 与大模型(LLM)深度整合
    • 基于大模型的智能决策:利用大语言模型(如GPT、LLaMA)生成代码、解释结果或优化模型设计。
    • 代码生成与调试:通过自然语言指令生成Python代码,并自动修复错误。
  • 企业级部署支持
    • 云原生架构:支持Azure云平台集成,提供弹性计算资源调度。
    • 模型监控与迭代:内置模型性能跟踪和持续训练机制,确保生产环境模型的稳定性。

技术架构

AutoGen的核心架构基于 模块化设计,主要包含以下组件:

  • 用户接口层:提供Python SDK和Web UI,支持代码编写或拖拽式操作。
  • 任务协调引擎:管理智能体之间的通信和任务分配。
  • 自动化引擎:执行模型训练、超参数调优和特征工程。
  • 模型库与工具集:集成开源模型库(如Hugging Face、ONNX)和自定义模型。
  • 部署与监控模块:支持模型导出为ONNX格式,并部署到AzureML或本地服务器。

安装及使用

AutoGen需要Python3.10或更高版本

Bash
# Install AgentChat and OpenAI client from Extensions
pip install -U "autogen-agentchat" "autogen-ext[openai]"

# Install AutoGen Studio for no-code GUI
pip install -U "autogenstudio"

官方文档给出的例子是使用GPT-4o模型创建助理代理

Python
# 导入asyncio模块,用于处理异步编程
import asyncio
# 从autogen_agentchat.agents模块中导入AssistantAgent类
# 这是一个基于模型的助手代理,能够执行任务并与用户或其他代理交互
from autogen_agentchat.agents import AssistantAgent
# 从autogen_ext.model.openai模块导入OpenAIChatCompletionClient
# 这是用于调用OpenAI的Chat API的客户端类
from autogen_ext.models.openai import GenericOpenAIChatCompletionClient

# 异步Main函数
async def main()->None:

    # OpenAIChatCompletionClient实例 指定使用模型为gpt-4o和APIKey
    model_client = GenericOpenAIChatCompletionClient(model="gpt-4o",api_key="这里输入你的APIKEY")

    #AssistantAgent实例,名称为"assistant"并传入上面的model_client
    agent = AssistantAgent("assistant",model_client=model_client)

    # 打印出agent.run方法
    print(await agent.run(task="你好,请你介绍下自己"))

    # 释放资源 关闭model_client
    await model_client.close()

asyncio.run(main())

当然也可以选择其他人模型进行创建(其他支持的Models),我这里使用了Ollma,但这需要安装扩展

Bash
pip install -U "autogen-ext[ollama]"

安装成功后,就可以愉快地使用啦

Python
# 导入asyncio模块,用于处理异步编程
import asyncio
# 从autogen_core.models中导入UserMessage类,表示用户消息对象
from autogen_core.models import UserMessage
# 从autogen_ext.models.ollama导入OllamaChatCompletionClient类,用于与本地Ollama模型进行交互
from autogen_ext.models.ollama import OllamaChatCompletionClient

# 异步Main函数
async def main()->None:

    # 创建一个OllamaChatCompletionClient实例,指定使用的模型为"qwen3:0.6b"
    # 这里的模型名需要确保已经在本地通过Ollama正确拉取并可用
    model_client = OllamaChatCompletionClient(model="qwen3:0.6b")

    # 使用await调用create方法,向模型发送用户消息
    # 消息内容为“你好,请你介绍下自己”,来源标记为"user"
    response = await model_client.create([UserMessage(content="你好,请你介绍下自己", source="user")])

    # 打印模型返回的响应结果
    print(response)

    # 释放资源 关闭model_client
    await model_client.close()

# 启动异步事件循环,并运行main函数
asyncio.run(main())

当然,除了使用不同的模型外,Autogen还提供了支持Python、.NET、AutoGen Studio的使用。

下面我们来演示下对于.NET的支持:

首先还是老样子,使用Nuget安装AutoGen包

锵锵!下面就是一个基于AutoGen的简单多智能体对话系统:

C#

//获取环境变量中的 OpenAI API 密钥,如果没有设置则抛出异常
var openAIKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY") ?? throw new Exception("Please set OPENAI_API_KEY environment variable.");

//创建一个OpenAI模型配置对象,使用指定的API密钥和模型名称"gpt-3.5-turbo" 初始化配置。
var gpt35Config = new OpenAIConfig(openAIKey, "gpt-3.5-turbo");


//创建一个助手代理,使用指定的系统消息和LLM配置
//名字为"assistant",系统消息定义其角色:帮助用户完成任务
//LLM配置使用之前创建的gpt35Config,温度设置为0,表示输出更确定性(不随机)
//.RegisterPrintMessage() 是注册一个钩子函数,用于在控制台中漂亮地打印对话内容
var assistantAgent = new AssistantAgent(
    name: "assistant",
    systemMessage: "You are an assistant that help user to do some tasks.",
    llmConfig: new ConversableAgentConfig
    {
        Temperature = 0,
        ConfigList = [gpt35Config],
    }).RegisterPrintMessage();


//创建一个用户代理,名字为"user"
//人类输入模式设置为总是(ALWAYS),表示每次都会等待用户输入
//同样注册了.RegisterPrintMessage() 来美化控制台输出
var userProxyAgent = new UserProxyAgent(
    name: "user",
    humanInputMode: HumanInputMode.ALWAYS)
    .RegisterPrintMessage();


//启动对话流程
//用户代理将与助手代理进行对话
//初始消息:"Hey assistant, please do me a favor."
//最多允许进行 10 轮对话(maxRound)
await userProxyAgent.InitiateChatAsync(
    receiver: assistantAgent,
    message: "Hey assistant, please do me a favor.",
    maxRound: 10);

AutoGen Studio:交互式探索多代理工作流

这是一个由AutoGen提供支持的界面,它允许您:

  • 通过点击、拖放界面(例如,您可以选择两个代理的参数,这两个代理将进行通信以解决您的任务)
  • 使用我们的UI与指定的代理创建聊天会话并查看结果(例如,查看聊天记录、生成的文件和所用时间)
  • 解释性地为您的代理添加技能并完成更多任务
  • 将您的会话发布到本地库

安装和使用

安装:

Bash
pip install autogenstudio

打开:这将在指定的端口上启动应用程序。

Bash
autogenstudio ui --port 8081

打开后的UI界面就是这样的:

侧边栏:

  • Team Builder:通过拖拉的方式创建自己的工作流
  • Playground:运行自己创建好的工作流
  • Gallery:Agent的组成组件、Agent可调用的工具、模型
  • Deploy:可部署为Python Restful API 和 Docker容器

学习参考:

订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
滚动至顶部