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

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

在掌握 AutoGen 基础后,如何让它自动编写、调试并执行代码?通过配置代码执行器(Code Executor),我们可以赋予 Agent 与环境交互和执行计算的能力,实现类似'外包开发'的自动化工作流。
AutoGen 支持多种代码执行方式,主要分为命令行式(Command Line)和 Jupyter 交互式(Jupyter Kernel)。每种方式均可运行在本地环境或 Docker 容器中。出于安全考虑,强烈建议在生产环境中使用 Docker 容器隔离执行环境,防止 LLM 生成危险命令(如 rm -rf *)影响宿主机。
AutoGen 提供了以下主要执行器类:
DockerCommandLineCodeExecutor: 基于 Docker 的命令行执行器。LocalCommandlineCodeExecutor: 本地命令行执行器(仅限开发环境)。JupyterCodeExecutor: Jupyter Notebook 内核执行器。以 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
)
虽然可以使用基类 ConversableAgent,但 AutoGen 提供了两个专用子类以简化配置:AssistantAgent 和 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...",
}
代表 AI 助手,负责编写代码和解决问题。默认系统提示词 (DEFAULT_SYSTEM_MESSAGE) 包含以下要求:
# filename: <filename>。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 错误。
通过 initiate_chat 启动对话,描述具体任务。
假设需要读取远程文件,提取特定格式的车厂名称并去重保存。
user.initiate_chat(
assistant,
max_turns=5,
message="""
读取一个位于 https://github.com/xxx/vmmr.txt 文件,该文件每一行类似 acura_cdx_2016 格式,
要求提取第一个 _ 之前的字符串,它是车厂名字,提取所有的车厂后将其写到一个 vm.txt 文件中
"""
)
生成的代码和输出文件均存储在 work_dir 指定的目录下(如 code 文件夹),Docker 容器会将该目录挂载至内部路径,确保数据持久化。
LocalCommandlineCodeExecutor 中的白名单机制过滤危险命令。ModuleNotFoundError,Assistant 通常会自动尝试 pip install,也可手动在 code_execution_config 中预置依赖。work_dir 在宿主机和容器内均有写入权限。max_turns 限制轮数。通过配置 AutoGen 的代码执行器和 Agent 角色,开发者可以构建高度自动化的编程辅助系统。这不仅减少了重复性编码工作,还实现了从需求到代码落地的闭环。在实际应用中,结合 Docker 容器化和严格的 Prompt 工程,可以显著提升系统的稳定性和安全性。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online