菜单

执行环境

相关源文件

执行环境是gpt-engineer中的一个核心子系统,它为运行生成的代码提供了一个标准化的接口。它抽象了代码执行的地点和方式,为上传代码、运行命令和下载结果提供了统一的API。这使得代理可以在不关心底层执行基础设施的情况下操作代码。

有关代码文件如何存储和管理的信息,请参阅内存和存储

架构概述

执行环境系统遵循清晰的接口-实现模式,允许在保持一致API的同时进行多种实现。

来源:gpt_engineer/core/base_execution_env.py8-42 gpt_engineer/core/default/disk_execution_env.py36-111 gpt_engineer/core/default/file_store.py10-62 gpt_engineer/core/default/simple_agent.py27-58

BaseExecutionEnv 接口

BaseExecutionEnv 抽象基类定义了所有执行环境实现必须遵循的约定。此接口为在不同环境中运行代码提供了基础。

关键方法

方法目的返回类型
run(command, timeout)执行命令并捕获输出Tuple[str, str, int] (stdout, stderr, returncode)
popen(command)运行命令并返回进程Popen
upload(files)将文件上传到执行环境BaseExecutionEnv (self)
download()从执行环境中下载文件FilesDict

来源:gpt_engineer/core/base_execution_env.py8-42

文件上传和下载流程

下图说明了文件如何在执行环境中流动

来源:gpt_engineer/core/default/disk_execution_env.py55-60 gpt_engineer/core/default/file_store.py39-62

DiskExecutionEnv 实现

DiskExecutionEnv 类是gpt-engineer中BaseExecutionEnv的主要实现。它在本地文件系统上执行代码,使用FileStore捕获输出和管理文件存储。

初始化

DiskExecutionEnv 可以使用可选的工作目录路径进行初始化。如果未提供路径,则会创建一个临时目录。

来源:gpt_engineer/core/default/disk_execution_env.py52-53

运行命令

run方法在工作目录中执行命令,并捕获标准输出、标准错误和返回码。它还处理超时和键盘中断。

来源:gpt_engineer/core/default/disk_execution_env.py72-111

文件管理

DiskExecutionEnv 使用 FileStore 来处理文件操作。

  • upload(files):将文件写入工作目录。
  • download():从工作目录读取文件,并将其作为 FilesDict 返回。

来源:gpt_engineer/core/default/disk_execution_env.py55-60 gpt_engineer/core/default/file_store.py39-62

与代理系统集成

gpt-engineer中的代理,例如SimpleAgent,在工作流中会使用执行环境来运行和测试代码。

来源:gpt_engineer/core/default/simple_agent.py27-88

使用示例

这是一个代理如何使用执行环境来生成、测试和迭代代码的基本示例

  1. 生成代码并将其保存到 FilesDict
  2. 将文件上传到执行环境
  3. 运行命令来测试代码
  4. 下载任何修改过的文件
  5. 分析结果并进行改进

这个模式是gpt-engineer工作流的核心,使代理能够执行和评估生成的代码。

来源:gpt_engineer/core/default/simple_agent.py70-88

技术细节

子进程管理

DiskExecutionEnv 在管理子进程时,会仔细考虑以下因素:

  • 输出捕获:stdout和stderr都会被实时捕获。
  • 超时处理:命令可以设置在指定时间后超时。
  • 中断处理:键盘中断会被捕获并得到妥善处理。
  • 工作目录:命令将在工作目录的上下文中执行。

来源:gpt_engineer/core/default/disk_execution_env.py72-111

FileStore

FileStore 类负责低级文件操作。

  • 创建工作目录(临时或指定路径)。
  • 使用 push 将文件写入磁盘。
  • 使用 pull 从磁盘读取文件。
  • 处理文件编码问题。

来源:gpt_engineer/core/default/file_store.py10-62

与其他组件的关系

执行环境与gpt-engineer系统中的几个其他组件进行交互

  • 代理系统:代理使用执行环境来运行代码。
  • 内存系统:这两个系统都管理文件,但目的不同(执行 vs. 持久化)。
  • 文件处理FilesDict 类用于在系统之间传输文件。

来源:gpt_engineer/core/default/simple_agent.py27-88 gpt_engineer/core/default/disk_execution_env.py36-111