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

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

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

花里胡哨发布于 2025/2/6更新于 2026/6/223 浏览
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. 总结
    • 💰 8折买阿里云服务器限时8折了解详情
    • Magick API 一键接入全球大模型注册送1000万token查看
    • 🤖 一键搭建Deepseek满血版了解详情
    • 一键打造专属AI 智能体了解详情
    极客日志微信公众号二维码

    微信扫一扫,关注极客日志

    微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

    更多推荐文章

    查看全部
    • HTML Popover API:原生浮层交互的零 JS 解决方案
    • HTML Popover API 原生实现浮层交互,无需 JavaScript 依赖
    • Spring Cloud Zuul 服务网关介绍及入门
    • 基于分布式光纤声波传感(DAS)的无人机入侵探测技术与应用
    • RTX 5090D 部署 LLaMA-Factory:PyTorch 与 CUDA 版本兼容性实战
    • llama.cpp Docker 镜像国内加速下载地址
    • 向日葵连接 Ubuntu 22.04 无显示器黑屏解决方案
    • Apache Answer 开源问答平台本地部署与公网访问指南
    • Python缠论分析指南:代码实现精准买卖点识别
    • core-js 包结构与配置策略:Polyfill 解决前端兼容性问题
    • OpenClaw SOUL.md:用 Markdown 定义代理身份与行为边界
    • OpenClaw MacOS 安装前环境变量设置教程
    • Figma Make 实测:AI 辅助前端代码生成的可行性分析
    • Linux 项目环境搭建:libwebkit2gtk-4.1-0 安装详解
    • openclaw 升级及 Peekaboo 插件安装授权指南 (macOS)
    • OpenClaw 插件更新:支持一键接入 QQ 与飞书机器人
    • Seedance 2.0 字节跳动 AI 视频生成模型介绍
    • Flutter 三方库 wallet_connect 的鸿蒙化适配指南:Web3 钱包连接与 DApp 授权
    • Unity 接入 DeepSeek 实现 AI 对话完整步骤
    • Ubuntu 支持的桌面环境及安装方法

    相关免费在线工具

    • 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