跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI

AutoGen 多智能体教程:代码执行器与 Agent 实例化

AutoGen 框架中代码执行器的配置与使用,涵盖 Docker 与本地命令行两种执行模式的安全差异。详细讲解了 AssistantAgent 与 UserProxyAgent 的初始化参数及默认行为,并通过实际案例演示了从任务下发、代码生成、依赖安装到结果验证的完整自动化流程。文章强调了容器隔离的重要性,提供了常见问题的排查思路及最佳实践建议,帮助开发者构建稳定的多智能体协作系统。

花里胡哨发布于 2025/2/6更新于 2026/10/2298 浏览
AutoGen 多智能体教程:代码执行器与 Agent 实例化

AutoGen 多智能体教程:代码执行器与 Agent 实例化

在掌握 AutoGen 基础后,如何让它自动编写、调试并执行代码?通过配置代码执行器(Code Executor),我们可以赋予 Agent 与环境交互和执行计算的能力,实现类似'外包开发'的自动化工作流。

1. 代码执行器 (Code Executor)

AutoGen 支持多种代码执行方式,主要分为命令行式(Command Line)和 Jupyter 交互式(Jupyter Kernel)。每种方式均可运行在本地环境或 Docker 容器中。出于安全考虑,强烈建议在生产环境中使用 Docker 容器隔离执行环境,防止 LLM 生成危险命令(如 rm -rf *)影响宿主机。

1.1 执行器类型

AutoGen 提供了以下主要执行器类:

  • DockerCommandLineCodeExecutor: 基于 Docker 的命令行执行器。
  • LocalCommandlineCodeExecutor: 本地命令行执行器(仅限开发环境)。
  • JupyterCodeExecutor: Jupyter Notebook 内核执行器。

1.2 Docker 执行器配置

以 DockerCommandLineCodeExecutor 为例,初始化参数包括:

  • image: Docker 镜像名称,默认为 python:3-slim。
  • container_name: 容器名称,若为 None 则自动生成。
  • timeout: 代码执行超时时间(秒)。
  • work_dir: 工作目录,默认当前目录。注意:此目录会被映射到容器内部,用于文件读写。
  • auto_remove: 执行完成后是否自动删除容器。
  • stop_container: 是否自动停止容器。
示例代码
from autogen.coding.docker_commandline_code_executor import DockerCommandLineCodeExecutor

work_dir = "code"
executor = DockerCommandLineCodeExecutor(
    image="python:3-slim",
    container_name="autogen-python3",
    timeout=60,
    work_dir=work_dir,
    auto_remove=True,
    stop_container=True
)

2. Agent 实例化

虽然可以使用基类 ConversableAgent,但 AutoGen 提供了两个专用子类以简化配置:AssistantAgent 和 UserProxyAgent。

2.1 UserProxyAgent

代表人类用户,负责接收需求、审查代码并执行反馈。关键参数如下:

  • human_input_mode: 默认 "ALWAYS",表示每次都需要人工确认;父类默认为 "TERMINATE"。
  • llm_config: 默认为 False,因为代理本身不直接调用 LLM 生成回复,而是转发给 Assistant。
  • code_execution_config: 指定使用的代码执行器配置。
  • DEFAULT_USER_PROXY_AGENT_DESCRIPTIONS = {
        "ALWAYS": "An attentive HUMAN user who can answer questions about the task, and can perform tasks such as running Python code or inputting command line commands at a Linux terminal and reporting back the execution results.",
        "TERMINATE": "A user that can run Python code or input command line commands at a Linux terminal and report back the execution results.",
        "NEVER": "A computer terminal that performs no other action than running Python scripts...",
    }
    

    2.2 AssistantAgent

    代表 AI 助手,负责编写代码和解决问题。默认系统提示词 (DEFAULT_SYSTEM_MESSAGE) 包含以下要求:

    1. 分步骤完成任务,先解释计划再执行代码。
    2. 代码块需标注类型(Python 或 Shell)。
    3. 如需保存文件,第一行必须包含 # filename: <filename>。
    4. 遇到错误需自行分析并修正,而非请求用户修改。
    5. 任务完成时输出 TERMINATE。
    示例代码
    from autogen import AssistantAgent, UserProxyAgent
    
    assistant = AssistantAgent(
        name="assistant",
        llm_config=llm_config,  # 需预先配置好 LLM 连接信息
        code_execution_config=False,  # 助手本身不执行代码,由 UserProxy 执行
    )
    
    user = UserProxyAgent(
        name="executor",
        code_execution_config={"executor": executor},
        human_input_mode="ALWAYS",
        default_auto_reply="continue"  # 避免空回复导致某些 API 报错
    )
    

    注意: 设置 default_auto_reply="continue" 是为了兼容部分大模型接口(如通义千问),防止因空内容返回 400 错误。

    3. 任务执行流程

    通过 initiate_chat 启动对话,描述具体任务。

    3.1 场景示例

    假设需要读取远程文件,提取特定格式的车厂名称并去重保存。

    user.initiate_chat(
        assistant, 
        max_turns=5, 
        message="""
        读取一个位于 https://github.com/xxx/vmmr.txt 文件,该文件每一行类似 acura_cdx_2016 格式,
        要求提取第一个 _ 之前的字符串,它是车厂名字,提取所有的车厂后将其写到一个 vm.txt 文件中
        """
    )
    

    3.2 交互过程

    1. Assistant 生成代码: 根据任务编写 Python 脚本,包含文件名注释。
    2. User 审查: 检查逻辑是否正确(例如是否需要去重)。
    3. 执行与反馈: User 将代码发送给执行器运行。若报错(如缺少依赖),Assistant 会自动安装依赖并重新运行。
    4. 结果确认: 代码执行成功后,Assistant 总结结果并终止对话。

    生成的代码和输出文件均存储在 work_dir 指定的目录下(如 code 文件夹),Docker 容器会将该目录挂载至内部路径,确保数据持久化。

    4. 安全与最佳实践

    4.1 安全性

    • 容器隔离: 始终优先使用 Docker 执行器,避免 LLM 误操作宿主机文件系统。
    • 权限控制: 限制容器的网络访问权限,仅允许必要的出站请求。
    • 命令过滤: 利用 LocalCommandlineCodeExecutor 中的白名单机制过滤危险命令。

    4.2 常见问题排查

    • 依赖缺失: 若代码运行时报错 ModuleNotFoundError,Assistant 通常会自动尝试 pip install,也可手动在 code_execution_config 中预置依赖。
    • 文件路径: 确保 work_dir 在宿主机和容器内均有写入权限。
    • API 限流: 长时间对话可能导致 Token 超限,建议设置 max_turns 限制轮数。

    5. 总结

    通过配置 AutoGen 的代码执行器和 Agent 角色,开发者可以构建高度自动化的编程辅助系统。这不仅减少了重复性编码工作,还实现了从需求到代码落地的闭环。在实际应用中,结合 Docker 容器化和严格的 Prompt 工程,可以显著提升系统的稳定性和安全性。

    目录

    1. AutoGen 多智能体教程:代码执行器与 Agent 实例化
    2. 1. 代码执行器 (Code Executor)
    3. 1.1 执行器类型
    4. 1.2 Docker 执行器配置
    5. 示例代码
    6. 2. Agent 实例化
    7. 2.1 UserProxyAgent
    8. 2.2 AssistantAgent
    9. 示例代码
    10. 3. 任务执行流程
    11. 3.1 场景示例
    12. 3.2 交互过程
    13. 4. 安全与最佳实践
    14. 4.1 安全性
    15. 4.2 常见问题排查
    16. 5. 总结

    更多推荐文章

    查看全部
    • 阿里开源 Page-Agent:一行 JS 代码让大模型寄生前端 DOM
    • WebGIS 开发工程师成长指南
    • FastGPT 集成 MCP 协议构建工具增强型智能体
    • 物联网时序数据存储方案:Apache IoTDB 集群部署及 TimechoDB 优势
    • MATLAB 实现基于 DQN-MLP 的无人机三维路径规划
    • node-llama-cpp 错误处理与调试:解决本地 AI 开发常见问题
    • RoboBrain2.0 具身大脑模型复现:统一感知、推理和规划能力
    • 使用 OpenClaw 搭建企业微信 AI Agent 实现自动化客服
    • 大模型 AI 产品经理学习路线:从基础到实战
    • 区块链基础:Web3 底层核心的分布式信任技术
    • Qwen3Guard-Gen-WEB 实战测评:真实业务场景下的安全审核表现
    • VS Code 配置 Anaconda Python 环境
    • 网络安全学习指南:从零基础到网络攻防工程师进阶
    • DEIM 实时目标检测算法及 Visdrone2019 数据集实战
    • SQLAlchemy Enum 定义枚举列时报错:'list' object has no attribute 'replace' 解决方案
    • 无线蜂窝网络:构建万物互联的无形之网
    • AI 算法工程师的职业困境与向开发转型的路径分析
    • PyCharm Copilot 插件中 Claude 模型不可用问题排查
    • 机器人数值优化基础:从理论到实战指南
    • 基于 Pydantic AI 与 Llama3.3 构建智能研究代理实战

    相关免费在线工具

    • RSA密钥对生成器

      生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

    • Mermaid 预览与可视化编辑

      基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

    • 随机西班牙地址生成器

      随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

    • curl 转代码

      解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

    • Base64 字符串编码/解码

      将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

    • Base64 文件转换器

      将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online