Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >AutoGen AI智能体框架开发者指南

AutoGen AI智能体框架开发者指南

作者头像
云云众生s
发布于 2025-01-09 03:05:12
发布于 2025-01-09 03:05:12
40502
代码可运行
举报
文章被收录于专栏:云云众生s云云众生s
运行总次数:2
代码可运行

AutoGen在Python开发者中很受欢迎,因为它可以用来构建多智能体AI系统。以下是入门方法。

译自 A Developer's Guide to the AutoGen AI Agent Framework,作者 Janakiram MSV。

AutoGen 是 Python 开发者中流行的框架,用于通过复杂的、对话驱动的协作和人机交互功能构建多智能体 AI 系统。由Microsoft Research开发的开源 AutoGen 以其灵活的代理架构、高级对话管理和安全代码执行功能而脱颖而出。该框架使开发人员能够创建复杂的多个代理系统,其中代理可以参与动态对话,在安全环境中执行代码,并将人工反馈无缝集成到其工作流程中。

类似于我介绍 CrewAI 的方式,我将使用我在之前的文章中定义的AI 代理结构

AutoGen 和 AI 代理的结构

AutoGen 通过其复杂的架构实现了 AI 代理结构的关键组件,从而能够创建多功能且强大的多智能体系统。让我们探讨 AutoGen 如何结合每个基本要素:

角色

AutoGen 允许开发人员通过其灵活的代理配置系统创建不同的代理角色。每个代理都可以定义特定的角色、能力和个性特征,这些特征会影响其行为和决策过程。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
coding_agent = AssistantAgent(
    name="Python Developer",
    system_message="Expert Python developer with focus on code quality and optimization",
    llm_config={"temperature": 0.7}
)
 
reviewer_agent = AssistantAgent(
    name="Code Reviewer",
    system_message="Senior developer specialized in code review and best practices",
    llm_config={"temperature": 0.2}
)

请注意system_message如何用于定义代理的角色。这些角色为多智能体系统中的专业行为和专业知识奠定了基础。

指令

AutoGen 通过其复杂的报文传递系统实现指令处理。代理可以接收、解释和执行复杂的指令,同时在整个对话流程中保持上下文:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
user_proxy = UserProxyAgent(
    name="User_Proxy",
    system_message="A proxy for human user, providing project requirements and feedback.",
    human_input_mode="TERMINATE",
    code_execution_config={"work_dir": "coding_project"}
)
 
coding_agent = AssistantAgent(
    name="Coding_Assistant",
    system_message="You are a helpful AI assistant specialized in writing Python scripts with robust error handling.",
    llm_config={"config_list": [{"model": "gpt-4o"}]}
)
 
# Initiate the chat with the task
user_proxy.initiate_chat(
    recipient=coding_agent, 
    message="Develop a Python script for processing CSV files with error handling"
)

任务

AutoGen 中的任务通过其对话驱动的架构进行管理。代理可以通过多轮对话和嵌套工作流程来处理复杂的任务。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
async def development_workflow():
    # Initial code development
    code_response = await coding_agent.generate_response(task_message)
    # Code review phase
    review_response = await reviewer_agent.review_code(code_response)
    # Iterative improvement based on review
    if review_response.has_feedback:
        improved_code = await coding_agent.update_code(review_response.feedback)

AutoGen 的任务管理系统支持同步和异步执行模式。

规划

AutoGen 通过多种方法实现复杂的规划能力:ReAct(推理和行动)模式和基于反思的决策。开发人员可以选择与用例一致的特定提示工程技术,并将其与代理一起使用。

下面的代码片段演示了 AutoGen 代理如何使用 ReAct 提示来解决问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#  (Example code for ReAct would go here)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ReAct_prompt = """
Answer the following questions as best you can. You have access to tools provided.
 
Use the following format:
 
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take
Action Input: the input to the action
Observation: the result of the action
... (this process can repeat multiple times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question
 
Begin!
Question: {input}
"""
 
# Define the ReAct prompt message. Assuming a "question" field is present in the context
 
 
def react_prompt_message(sender, recipient, context):
    return ReAct_prompt.format(input=context["question"])
 
 user_proxy.initiate_chat(
        assistant,
        message=react_prompt_message,
        question="What is the result of super bowl 2024?",
    )

缓存和内存

AutoGen 提供强大的缓存和内存功能,可增强代理性能和上下文感知能力。该框架支持多种内存类型,包括短期内存、长期内存、语义内存和情景记忆,使代理能够保持上下文并从之前的交互中学习。其缓存机制允许重用 API 请求,从而提高可重复性和降低计算成本。

AutoGen 通过与 ZepMem0 等高级内存管理平台的无缝集成,提供灵活的长期内存支持。通过利用这些外部内存系统,AutoGen 代理可以维护持久上下文,检索相关的历史信息,并增强长期推理能力。

Zep 的时间知识图谱和 Mem0 的混合数据库方法可以直接插入 AutoGen 的代理架构中,从而实现超越传统上下文窗口限制的复杂内存管理。这种方法使开发人员能够创建更具上下文感知能力和自适应能力的 AI 代理,以便在复杂的交互场景中学习、记忆和推理。

以下代码片段演示了 Mem0 如何与 AutoGen 集成:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
memory = MemoryClient(api_key="mem0_key")  # Initialize Mem0 memory client
memory.add(messages=[{"role": "user", "content": "Query about TV issue"}], user_id="case_123")  # Store memory
memories = memory.search("TV issue", user_id="case_123")  # Retrieve relevant memories
agent.generate_reply(messages=[{"content": f"Context: {memories}", "role": "user"}])  # Use in agent response

工具

AutoGen 提供强大的工具集成功能,使代理能够与外部工具、API 和自定义函数无缝交互。开发人员可以直接将Python 函数命令行工具或外部 API 注册到代理的配置中,从而允许在对话期间动态调用工具。该框架支持自动工具选择、参数推断和结果解释,使复杂的多步骤任务更易于管理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def calculator(operation, x, y):
    if operation == 'add':
        return x + y
    if operation == 'subtract':
        return x - y
    if operation == 'multiply':
        return x * y

assistant = AssistantAgent(
    name="Math_Assistant",
    llm_config={
        "config_list": [{"model": "gpt-4"}],
        "tools": [
            {"function": calculator, "name": "math_operations"}
        ]
    }
)

此示例演示了开发人员如何轻松地将自定义函数集成到工具中,使代理能够在各种领域中以最小的配置开销动态执行复杂任务。

委托

AutoGen 的委托机制通过智能任务路由和动态角色分配,实现了复杂的多代理协作。代理可以根据专业知识、当前上下文和任务复杂性,自主地将任务委托给最合适的团队成员。该框架支持显式和隐式委托策略,允许代理移交子任务、请求专业知识或协作解决复杂问题。委托通过智能路由机制进行,该机制评估代理能力、系统消息和之前的交互历史。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
coding_agent = AssistantAgent(
    name="Python_Developer",
    system_message="Expert in writing Python code with strong algorithmic skills",
    llm_config={"config_list": [{"model": "gpt-4"}]}
)
reviewer_agent = AssistantAgent(
    name="Code_Reviewer",
    system_message="Specialized in code quality assessment and optimization",
    llm_config={"config_list": [{"model": "gpt-4"}]}
)
group_chat = GroupChat(
    agents=[coding_agent, reviewer_agent],
    messages=[],
    max_round=5,
    speaker_selection_method="auto"
)
manager = GroupChatManager(groupchat=group_chat)

以上代码片段说明了 AutoGen 的委托框架,其中代理可以根据其专业角色和系统消息动态交互、委托任务和协作。

AutoGen框架的独特特性

对话驱动架构

AutoGen的核心在于其复杂的对话驱动架构,该架构能够实现代理之间自然而动态的交互。该框架支持多轮对话并持久保留上下文,允许代理保持连贯的讨论并在之前的交互基础上进行构建。代理可以根据对话上下文和代理能力动态路由消息并选择合适的响应者。

人机协同集成

AutoGen提供了复杂的人机协同功能,能够将人工监督和反馈无缝集成到AI工作流程中。该框架提供多种交互模式(TERMINATE、NEVER、VERIFY)和可配置的干预点,允许开发者设计具有适当人工监督级别的系统。

基于Docker的代码执行

AutoGen提供了一个复杂的基于Docker代码执行环境,它结合了安全、灵活性和强大的执行能力。此系统允许代理在隔离的容器中安全地执行代码,同时保持对运行时环境的完全控制。

复杂的对话结构

AutoGen通过其GroupChat和嵌套对话功能支持复杂的对话模式。该框架支持具有动态发言者选择和分层对话管理的复杂多代理交互。

结论

AutoGen代表了AI代理解剖学的复杂实现,它通过高级功能扩展了传统概念,使其适用于现实世界的应用。其对话驱动架构、人机协同功能和安全的代码执行环境使其成为构建复杂多代理系统的强大框架。

通过提供强大的代理交互、任务管理和工作流编排工具,AutoGen使开发人员能够创建智能、适应性和安全的AI应用程序。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-082,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Tello SDK 2.0使用指南(上)
要进行 Socket 通信,我们需要使用 socket 模块,首先需要创建一个 Socket 对象。下面是两种创建方式:
云深无际
2020/11/11
2.1K0
Tello SDK 2.0使用指南(上)
Python-Socket通信
很久之前Python就业班就已经学过了,昨天回头看朋友的面经发现他面试的过程被问到这方便的问题,回头想想记忆有点模糊了,重写一篇博客重点复习下Socket通信。
用户2700375
2022/09/28
5020
Python-Socket通信
python 获取本机IP地址
方法一: 通常使用socket.gethostbyname()方法即可获取本机IP地址,但有时候获取不到(比如没有正确设置主机名称),示例代码如下:
py3study
2020/01/13
5.5K0
Python的socket使用
socket(简称 套接字) 是进程间通信的一种方式,实现不同主机间的进程间通信,比如QQ socket.socket(AddressFamily, Type) Address Family:可以选择 AF_INET(用于 Internet 进程间通信) 或者 AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET Type:套接字类型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 协议)或者 SOCK_DGRAM(数据报套接字,主要用于 UDP 协议) UDP发送数据
IT架构圈
2018/05/31
1K0
Python 抓取并解码原始数据包
应用Python支持的混杂模式,抓取流经网卡的数据包,并对IP以及ICMP数据包进行拆包,打印出我们所需要的字段信息。
王瑞MVP
2022/12/28
8920
UDP-用户数据报协议1.介绍2.udp网络程序-发送数据udp网络程序-发送、接收数据echo服务器广播用代码给飞秋发信息收消息_没绑定端口号收消息_绑定端口多线程聊天
UDP --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
Python攻城狮
2018/08/23
1.5K0
UDP-用户数据报协议1.介绍2.udp网络程序-发送数据udp网络程序-发送、接收数据echo服务器广播用代码给飞秋发信息收消息_没绑定端口号收消息_绑定端口多线程聊天
SSDP协议的Python示例「建议收藏」
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
8280
【测试开发】python系列教程:socket模块
Python中的socket模块是底层的网络接口, socket模块提供了标准的BSD SocketAPI和服务器中心类,可以简化网络服务器的开发。该模块提供了两个基本的Socket模块:服务端Socket和客户端Socket。当创建了一个服务端Socket之后,这个Socket就会在本机的一个端口上等待连接,客户端Socket会访问这个端口,当两者完成连接之后,就可以进行交互了。
雷子
2023/08/21
2390
【测试开发】python系列教程:socket模块
Python中socket的UDP学习(1)
TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。
萌海无涯
2019/08/03
5480
制作一个私人的简易聊天器,邀请ta来聊天吧,Python搭建UDP网络通信模型
互联网的本质是什么?其实就是信息的交换。就比如我们常用的QQ、微信等。那么如何将自己的信息发送到其他人的电脑上呢?
松鼠爱吃饼干
2021/11/16
6050
制作一个私人的简易聊天器,邀请ta来聊天吧,Python搭建UDP网络通信模型
python socket
TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。所以在进行TCP链接时首先要开启服务器端口。
py3study
2020/01/19
5640
Python使用UDP广播实现服务器自动发现
机房管理软件或者教学软件一般都由服务器和客户端组成,当客户端启动之后会自动搜索服务器,这是如何实现的呢?下面通过一段代码来演示其中一种比较高效的方法。 客户端代码: import socket import time def findServer(): #创建socket对象 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #绑定socket sock.bind(('', 5000)) while True: #接收信
Python小屋屋主
2018/04/16
3.1K0
python 网络编程(udp)
        什么是UDP:UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。这与面向流字符的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联系。         接收端是服务器(server),发送端是客户机(client)。 python中网络编程需要先import  socket包: import sys import socket        为发送目的端开一个变量,保存其IP地址及端口,
微风、掠过
2018/04/10
8550
Python使用UDP协议打造在线时间服务器
代码原理:服务端监听特定的端口,如果收到客户端发来的请求就把服务器上的当前时间发给客户端,而客户端收到时间之后立刻打印输出,当然也可以改成做别的事情,例如调整客户端的系统时间。 服务端代码: import socket from datetime import datetime #使用IPV4协议,使用UDP协议传输数据 s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #绑定端口和端口号,空字符串表示本机任何可用IP地址 s.bind(('', 500
Python小屋屋主
2018/04/16
1.5K0
python控制windows窗口,并输入数据_python执行windows命令
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
全栈程序员站长
2022/11/10
6840
Python—socket编程
应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字 (Socket)的接口,区分不同应用程序进程间的网络通信和连接。
码农编程进阶笔记
2021/07/20
4330
Python—socket编程
应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字 (Socket)的接口,区分不同应用程序进程间的网络通信和连接。
全栈程序员站长
2022/07/11
3910
Python学习之旅(三十四)
使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包
py3study
2020/01/20
3460
python获取本机IP、mac地址、计
在python中获取ip地址和在php中有很大不同,在php中往往比较简单。那再python中怎么做呢?我们先来看一下python 获得本机MAC地址:import...
py3study
2020/01/10
3.9K0
Python网络编程
TCP 客户端与服务器之间建立连接需要进行三次握手 客户端--->服务器 服务器--->客户端 客户端--->服务器,这样做的好处是可以保证数据的完整缺点是慢.
云深无际
2020/11/19
7830
Python网络编程
推荐阅读
相关推荐
Tello SDK 2.0使用指南(上)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验