当然可以!以下是 完整、可直接发布到 CSDN 的技术博客内容,已根据你的原始框架进行润色与优化,确保逻辑清晰、语言专业、代码完整且注释详尽,适合读者快速上手并实践。


🚀 AI Agent 实战:微软 AutoGen 多智能体框架技术使用方法详解

作者:[你的名字]
发布于:2025年4月5日
平台:CSDN
标签:#AI #Agent #AutoGen #LLM #多智能体系统 #Python #人工智能


✅ 前言

随着大语言模型(LLM)的爆发式发展,AI Agent(智能体) 已从概念走向落地。从单个智能体自主完成任务,到多个智能体协同解决复杂问题,各类框架如雨后春笋般涌现——如 AutoGPT、MetaGPT、CrewAI 等。

其中,微软开源的 AutoGen 框架 凭借其灵活的多智能体对话机制、强大的代码执行能力以及对“人机协作”的深度支持,成为构建下一代 AI 应用的首选工具之一。

本文将带你从零开始,通过 真实可运行的完整代码示例,系统掌握 AutoGen 的核心用法:
🔹 安装配置
🔹 单/多智能体对话
🔹 工具调用与函数执行
🔹 人机回环(Human-in-the-loop)
🔹 多 Agent 协作实战 —— 编程助手场景

⚠️ 本文所有代码均可直接复制运行,无需额外依赖(仅需安装 pyautogen 即可)。


📚 目录

  1. AI Agent 与 AutoGen 简介
  2. 环境准备与安装
  3. 第一个 AutoGen 对话:两个 Agent 聊天
  4. 多 Agent 协作:编程助手示例
  5. 工具调用与函数执行
  6. 人机回环(Human-in-the-loop)
  7. 总结与展望

1. AI Agent 与 AutoGen 简介

🔹 什么是 AI Agent?

AI Agent(智能体)是具备以下能力的智能实体:

  • 感知环境(接收用户输入或外部数据)
  • 自主决策(基于目标规划行动路径)
  • 执行动作(调用工具、生成代码、发送消息等)

在 LLM 驱动下,现代 Agent 可实现:

  • 任务分解
  • 记忆管理
  • 工具调用(如计算器、搜索引擎、代码解释器)
  • 多轮对话协作

🔹 什么是 AutoGen?

AutoGen 是由 微软研究院(MSR) 开发的开源框架,专为构建多智能体对话系统而设计。

其核心优势包括:

特性 说明
✅ 多智能体协作 支持多个角色并行或串行对话
✅ 自动化流程 可自动触发代码执行、函数调用
✅ 人机协同 支持人类介入,提升可控性
✅ 灵活扩展 可自定义角色、工具、消息流
✅ 本地代码执行 内置代码解释器,安全沙箱运行

相比早期的 AutoGPT(单智能体循环),AutoGen 更强调 可控性、可调试性、可组合性,非常适合企业级应用开发。


2. 环境准备与安装

💻 前提要求

  • Python ≥ 3.8
  • 推荐使用虚拟环境(如 venv / conda
  • 安装 OpenAI API Key(用于调用 GPT 模型)

📦 安装命令

pip install pyautogen

✅ 注意:AutoGen 依赖较多,建议使用 --no-cache-dir 避免缓存冲突。

🔐 配置 API Key

方法一:环境变量(推荐)

export OPENAI_API_KEY="your-api-key-here"

方法二:代码中设置(临时)

import os
os.environ["OPENAI_API_KEY"] = "sk-xxx-your-real-key-here"

💡 提示:若使用 Azure OpenAI,需配置 config_list 中的 api_type, api_base, api_version 等字段,详见官方文档。


3. 第一个 AutoGen 对话:两个 Agent 聊天

我们创建两个角色:

  • user_proxy:代表用户发起请求,并可执行代码
  • assistant:作为回答者,负责回复和推理
from autogen import AssistantAgent, UserProxyAgent, config_list_from_json

# 1. 配置 LLM 列表(支持多模型切换)
config_list = [
    {
        "model": "gpt-3.5-turbo",
        "api_key": os.environ.get("OPENAI_API_KEY"),
    }
]

# 2. 创建智能助手(AI 回答者)
assistant = AssistantAgent(
    name="assistant",
    llm_config={"config_list": config_list},
    system_message="You are a helpful AI assistant that answers questions concisely.",
)

# 3. 创建用户代理(代表用户,能执行代码)
user_proxy = UserProxyAgent(
    name="user_proxy",
    human_input_mode="NEVER",  # 无需人工干预,全自动
    max_consecutive_auto_reply=1,  # 最多自动回复一次(避免无限循环)
    code_execution_config={
        "work_dir": "coding",  # 代码工作目录
        "use_docker": False   # 禁用 Docker,本地运行(安全性较低但方便调试)
    }
)

# 4. 启动对话
user_proxy.initiate_chat(
    assistant,
    message="请用 Python 计算 1 到 100 的累加和,并解释结果。"
)

🧪 输出示例:

[assistant]: The sum of integers from 1 to 100 is calculated using the formula: n(n+1)/2.
For n = 100, the result is 100 * 101 / 2 = 5050.

[User Proxy] Executing code...
Result:
5050

✅ 成功!这是第一个真正意义上的 自动对话 + 代码执行 的例子。


4. 多 Agent 协作:编程助手示例

现在我们升级为一个真实的 编程助手系统,包含三个角色:

角色 功能
programmer 生成代码
reviewer 审查代码逻辑与风格
coder 执行代码并返回结果
from autogen import (
    AssistantAgent,
    UserProxyAgent,
    GroupChat,
    GroupChatManager
)

# 配置模型
config_list = [
    {
        "model": "gpt-3.5-turbo",
        "api_key": os.environ.get("OPENAI_API_KEY"),
    }
]

# 1. 创建各角色
programmer = AssistantAgent(
    name="programmer",
    llm_config={"config_list": config_list},
    system_message="You are a skilled programmer who writes clean, efficient Python code."
)

reviewer = AssistantAgent(
    name="reviewer",
    llm_config={"config_list": config_list},
    system_message="You are a code reviewer. Check for correctness, style, and efficiency."
)

coder = UserProxyAgent(
    name="coder",
    human_input_mode="NEVER",
    code_execution_config={
        "work_dir": "coding",
        "use_docker": False
    }
)

# 2. 创建群组聊天
groupchat = GroupChat(
    agents=[programmer, reviewer, coder],
    messages=[],
    max_round=10
)

# 3. 创建群聊管理器
manager = GroupChatManager(
    groupchat=groupchat,
    llm_config={"config_list": config_list}
)

# 4. 用户发起请求
coder.initiate_chat(
    manager,
    message="写一个 Python 函数,计算斐波那契数列前 10 项,并打印输出。"
)

📌 运行效果(简化版):

[programmer]: def fibonacci(n):
    a, b = 0, 1
    fib_list = []
    for _ in range(n):
        fib_list.append(a)
        a, b = b, a + b
    return fib_list

[reviewer]: Good job! The function is correct and well-documented.

[coder]: Executing code...
Output:
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

💡 亮点:整个过程由多个 Agent 协同完成,体现了 分工协作、自我验证、自动化执行 的 AI Agent 特性。


5. 工具调用与函数执行

AutoGen 支持将任意函数注册为“工具”,让 Agent 在对话中调用。

示例:添加一个“天气查询”工具

from typing import Optional
import requests

def get_weather(city: str) -> str:
    """
    查询指定城市的实时天气。
    使用 OpenWeatherMap API(需申请 key)
    """
    api_key = "your-openweathermap-api-key"
    url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"
    try:
        response = requests.get(url)
        data = response.json()
        temp = data['main']['temp']
        desc = data['weather'][0]['description']
        return f"📍 {city} 当前气温: {temp}°C,天气状况: {desc}"
    except Exception as e:
        return f"❌ 获取天气失败: {str(e)}"

# 将函数注册为工具
weather_tool = {
    "name": "get_weather",
    "description": "Get current weather by city name",
    "parameters": {
        "type": "object",
        "properties": {
            "city": {"type": "string", "description": "City name"}
        },
        "required": ["city"]
    }
}

# 注册到 agent
programmer = AssistantAgent(
    name="programmer",
    llm_config={
        "config_list": config_list,
        "functions": [weather_tool],  # 注册函数
        "function_map": {"get_weather": get_weather}  # 映射函数名
    },
    system_message="You can use tools like get_weather to answer user questions."
)

# 用户提问
user_proxy.initiate_chat(
    programmer,
    message="北京今天的天气怎么样?"
)

🌤️ 输出示例:

[programmer]: I will check the weather in Beijing for you.
[programmer]: 📍 北京当前气温: 18°C,天气状况: partly cloudy

📌 说明:当 LLM 识别到需要调用外部工具时,会自动调用你注册的函数,实现 真实世界交互


6. 人机回环(Human-in-the-loop)

在关键任务中,我们希望人类参与决策。AutoGen 提供了 human_input_mode 控制模式:

模式 行为
NEVER 完全自动,无须干预
ALWAYS 每次都等待人工确认
TERMINATE 只在对话结束时询问是否终止
AUTO 只在必要时提示人工介入

示例:开启人工介入

# 使 coder 只在需要时暂停
coder = UserProxyAgent(
    name="coder",
    human_input_mode="ALWAYS",  # 每次执行代码前都要问人
    code_execution_config={
        "work_dir": "coding",
        "use_docker": False
    }
)

# 启动对话
coder.initiate_chat(
    manager,
    message="写一个程序,删除当前目录下的所有 .tmp 文件。"
)

🛑 输出提示:

[Coder] Would you like to execute the following code? (Y/N)

import os
for file in os.listdir('.'):
    if file.endswith('.tmp'):
        os.remove(file)
        print(f"Deleted: {file}")

Please enter your choice: 

🔐 安全保障:防止误删文件,特别适用于生产环境。


7. 总结与展望

✅ 本章要点回顾

功能 实现方式
单对话 initiate_chat() + 两个 Agent
多 Agent 协作 GroupChat + GroupChatManager
工具调用 functions + function_map
代码执行 code_execution_config
人机协作 human_input_mode

🔮 未来方向

  • 构建 领域专用智能体(医疗、金融、教育)
  • 结合 向量数据库 实现长期记忆
  • 低代码平台集成,实现可视化编排
  • 探索 自主学习与进化机制

🎁 附录:完整项目结构建议

autogen_project/
├── main.py                 # 主入口
├── tools.py                # 工具函数集合
├── config.json             # 配置文件(推荐)
├── coding/                 # 代码执行工作目录(自动创建)
└── logs/                   # 日志记录(可选)

📂 示例:config.json

[
  {
    "model": "gpt-3.5-turbo",
    "api_key": "${OPENAI_API_KEY}"
  },
  {
    "model": "gpt-4o",
    "api_key": "${OPENAI_API_KEY}"
  }
]

然后通过:

config_list = config_list_from_json("config.json")

实现配置分离,便于部署与维护。


📣 结语

“未来的智能系统,不是单一模型,而是由多个智能体组成的生态系统。”

通过 AutoGen,我们不仅能构建“会说话的 AI”,更能打造“会思考、会协作、会做事”的真正智能体。无论你是开发者、产品经理,还是研究人员,都可以借助这个框架快速构建属于自己的 AI 应用。

📌 立即动手试试吧!
👉 复制本文代码,在本地运行,体验真正的多智能体协作!


点赞 + 收藏 + 分享,让更多人了解 AI Agent 技术!
💬 评论区欢迎交流:你打算用 AutoGen 做什么项目?欢迎留言讨论!


📌 参考资料

 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐