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。


