本文档提供了 gpt-engineer 架构的全面概述,解释了主要组件及其如何交互以促进 AI 辅助代码生成和改进。系统架构采用模块化方法设计,能够实现灵活性、可扩展性和关注点的清晰分离。
有关 gpt-engineer 中使用的关键概念和术语的信息,请参阅 关键概念。有关特定组件的详细信息,请参阅 技术参考 部分。
GPT-Engineer 遵循干净的架构模式,包含核心领域实体、接口抽象和具体实现。该系统围绕一个命令行界面设计,该界面协调各种组件之间的交互,以根据自然语言提示生成或改进代码。
上图说明了 gpt-engineer 的高层架构,展示了用户如何与 CLI 交互,CLI 使用 CliAgent 来协调 AI、DiskMemory 和 DiskExecutionEnv 等核心组件之间的交互。
来源:gpt_engineer/applications/cli/main.py280-560 gpt_engineer/applications/cli/cli_agent.py36-232
该系统围绕几个关键的抽象及其实现构建,并按层次结构组织,以促进代码重用和扩展。
上面的类图显示了系统中关键类之间的关系。BaseAgent 抽象类定义了代理的接口,而 CliAgent 提供了一个具体的实现,用于协调代码生成和改进过程。
来源:gpt_engineer/core/base_agent.py16-31 gpt_engineer/applications/cli/cli_agent.py36-232 gpt_engineer/core/base_memory.py15 gpt_engineer/core/base_execution_env.py8-42 gpt_engineer/core/preprompts_holder.py7-29
代码生成工作流是一个多步骤过程,可将自然语言提示转换为可执行代码。
顺序图说明了代码生成工作流,展示了 CliAgent 如何通过代码生成、入口点创建和代码执行等多个步骤来处理用户的提示。
来源:gpt_engineer/applications/cli/cli_agent.py152-183 gpt_engineer/core/default/steps.py121-150 gpt_engineer/core/default/steps.py153-202 gpt_engineer/core/default/steps.py205-268
代码改进工作流允许根据自然语言指令修改现有代码。
此顺序图显示了代码改进工作流,其中现有代码根据提示进行修改。FileSelector 允许用户选择要改进的文件,并且 CliAgent 使用 improve_fn 函数来生成和应用改进。
来源:gpt_engineer/applications/cli/main.py514-541 gpt_engineer/applications/cli/cli_agent.py185-232 gpt_engineer/core/default/steps.py271-312 gpt_engineer/core/default/steps.py315-337
Agent 系统是 gpt-engineer 中的主要协调器,负责协调组件之间的交互以生成或改进代码。
BaseAgent 是一个抽象基类,它定义了代理的接口,包含两个主要方法:
init(prompt):从提示生成代码improve(files_dict, prompt):根据提示改进现有代码CliAgent 是 CLI 使用的具体实现,它:
来源:gpt_engineer/core/base_agent.py16-31 gpt_engineer/applications/cli/cli_agent.py36-232
AI 接口负责与语言模型进行通信。
AI 类为语言模型提供了一个统一的接口,具有以下职责:
此图显示了 AI 类如何提供与各种语言模型提供商开始和继续对话的方法。
来源:gpt_engineer/applications/cli/main.py457-465
文件处理系统负责代码文件的创建、操作和存储。
FilesDict 是一个特殊的字典类,代表一组文件,并具有以下方法:
该系统包含以下实用工具:
chat_to_files_dict)parse_diffs、apply_diffs)此图说明了文件处理系统如何将 LLM 的聊天输出转换为代码文件,以及它如何处理用于代码改进的 diffs。
来源:gpt_engineer/core/default/steps.py148-150 gpt_engineer/core/default/steps.py347-360
内存系统负责代码和相关数据的持久化。
BaseMemory 是一个接口,定义了数据如何存储和检索,包含以下方法:
__getitem__(key):检索值__setitem__(key, val):存储值log(key, val):记录信息DiskMemory 是一个具体的实现,它将数据存储在磁盘上,具有:
来源:gpt_engineer/core/base_memory.py15 gpt_engineer/applications/cli/main.py500
执行环境负责运行生成的代码。
BaseExecutionEnv 是一个抽象类,定义了代码如何执行,包含以下方法:
run(command, timeout):执行命令popen(command):创建进程upload(files):将文件上传到环境download():从环境中下载文件DiskExecutionEnv 是一个具体的实现,它在本地文件系统上执行代码。
来源: gpt_engineer/core/base_execution_env.py8-42 gpt_engineer/applications/cli/main.py503
GPT-Engineer 提供多种代码生成和处理策略
标准代码生成过程使用
gen_code:从提示生成代码gen_entrypoint:创建可执行入口点 (run.sh)execute_entrypoint:执行生成的代码替代代码生成策略包括
lite_gen:仅使用主提示进行简化生成clarified_gen:在代码生成前与用户进行交互式澄清self_heal:自动修复无法正常运行的代码此图展示了不同的代码生成策略如何将用户提示转换为代码,以及不同的执行策略如何处理生成的代码。
来源: gpt_engineer/core/default/steps.py121-150 gpt_engineer/tools/custom_steps.py122-195 gpt_engineer/tools/custom_steps.py198-233 gpt_engineer/tools/custom_steps.py40-119
CLI 提供了用户与 gpt-engineer 交互的主要入口点
此图显示了用户如何与 gpt-engineer CLI 交互,它提供了代码生成和改进的不同模式和选项。
来源: gpt_engineer/applications/cli/main.py271-279 gpt_engineer/applications/cli/main.py281-380
提示是 gpt-engineer 功能的核心
Prompt 类封装了用户指令,包含
PrepromptsHolder 管理用于指导 AI 的系统提示
来源: gpt_engineer/applications/cli/main.py496-498 gpt_engineer/core/preprompts_holder.py7-29
GPT-Engineer 支持多个语言模型提供商
集成通过统一的 API 接口管理,该接口处理身份验证、提示格式化和响应处理。
来源:gpt_engineer/applications/cli/main.py457-465
GPT-Engineer 包含多个用于高级功能的扩展点
基准测试系统允许针对 APPS、MBPP 等标准数据集评估不同的代理实现。
GPT-Engineer 可以处理多种语言的代码
| 语言 | 文件扩展名 |
|---|---|
| Python | .py |
| JavaScript | .js, .mjs |
| TypeScript | .ts, .tsx |
| HTML | .html, .htm |
| CSS | .css |
| Java | .java |
| C# | .cs |
| Ruby | .rb, .erb |
| PHP | .php, .phtml, .php3 等。 |
| Go | .go |
| Rust | .rs |
| C++ | .cpp, .cc, .cxx, .h, .hpp, .hxx |
| C | .c, .h |
| Markdown | .md |
| Arduino C | .ino |
来源: gpt_engineer/tools/supported_languages.py8-58
GPT-Engineer 的架构设计注重模块化和可扩展性,允许灵活的代码生成和改进工作流程。该系统遵循清晰的关注点分离原则,组件之间具有明确定义的接口,便于扩展或替换各个部分。该架构支持多种代码生成策略,以满足不同的用户需求,从简单的生成到交互式澄清和自动修复。
有关特定组件的详细实现信息,请参阅 技术参考 部分,特别是 CLI 和代理系统、AI 接口、文件处理系统、执行环境 和 内存和存储。