菜单

系统架构

相关源文件

本文档提供了 gpt-engineer 架构的全面概述,解释了主要组件及其如何交互以促进 AI 辅助代码生成和改进。系统架构采用模块化方法设计,能够实现灵活性、可扩展性和关注点的清晰分离。

有关 gpt-engineer 中使用的关键概念和术语的信息,请参阅 关键概念。有关特定组件的详细信息,请参阅 技术参考 部分。

架构设计概述

GPT-Engineer 遵循干净的架构模式,包含核心领域实体、接口抽象和具体实现。该系统围绕一个命令行界面设计,该界面协调各种组件之间的交互,以根据自然语言提示生成或改进代码。

上图说明了 gpt-engineer 的高层架构,展示了用户如何与 CLI 交互,CLI 使用 CliAgent 来协调 AIDiskMemoryDiskExecutionEnv 等核心组件之间的交互。

来源: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

BaseAgent 是一个抽象基类,它定义了代理的接口,包含两个主要方法:

  • init(prompt):从提示生成代码
  • improve(files_dict, prompt):根据提示改进现有代码

CliAgent

CliAgent 是 CLI 使用的具体实现,它:

  • 管理代码生成生命周期
  • 协调 AI、内存和执行环境之间的交互
  • 配置和执行不同的生成策略(标准、精简、澄清)
  • 通过 diffs 处理代码改进

来源:gpt_engineer/core/base_agent.py16-31 gpt_engineer/applications/cli/cli_agent.py36-232

AI接口

AI 接口负责与语言模型进行通信。

AI 类

AI 类为语言模型提供了一个统一的接口,具有以下职责:

  • 管理与不同 LLM 提供商的 API 通信
  • 处理消息格式和对话管理
  • 跟踪 token 使用量

此图显示了 AI 类如何提供与各种语言模型提供商开始和继续对话的方法。

来源:gpt_engineer/applications/cli/main.py457-465

文件处理系统

文件处理系统负责代码文件的创建、操作和存储。

FilesDict

FilesDict 是一个特殊的字典类,代表一组文件,并具有以下方法:

  • 将文件转换为对聊天友好的格式
  • 将文件转换为对日志友好的格式
  • 文件验证

聊天到文件的转换

该系统包含以下实用工具:

  • 从 LLM 输出中解析代码块(chat_to_files_dict
  • 提取和应用 diffs 到现有代码(parse_diffsapply_diffs
  • 验证和校正 diffs

此图说明了文件处理系统如何将 LLM 的聊天输出转换为代码文件,以及它如何处理用于代码改进的 diffs。

来源:gpt_engineer/core/default/steps.py148-150 gpt_engineer/core/default/steps.py347-360

记忆系统

内存系统负责代码和相关数据的持久化。

BaseMemory

BaseMemory 是一个接口,定义了数据如何存储和检索,包含以下方法:

  • __getitem__(key):检索值
  • __setitem__(key, val):存储值
  • log(key, val):记录信息

DiskMemory

DiskMemory 是一个具体的实现,它将数据存储在磁盘上,具有:

  • 基于文件的存储组织
  • 日志归档功能
  • 项目内存管理

来源:gpt_engineer/core/base_memory.py15 gpt_engineer/applications/cli/main.py500

执行环境

执行环境负责运行生成的代码。

BaseExecutionEnv

BaseExecutionEnv 是一个抽象类,定义了代码如何执行,包含以下方法:

  • run(command, timeout):执行命令
  • popen(command):创建进程
  • upload(files):将文件上传到环境
  • download():从环境中下载文件

DiskExecutionEnv

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 集成和用户交互

CLI 提供了用户与 gpt-engineer 交互的主要入口点

此图显示了用户如何与 gpt-engineer CLI 交互,它提供了代码生成和改进的不同模式和选项。

来源: gpt_engineer/applications/cli/main.py271-279 gpt_engineer/applications/cli/main.py281-380

横切关注点

提示处理

提示是 gpt-engineer 功能的核心

Prompt 类

Prompt 类封装了用户指令,包含

  • 文本内容
  • 可选的图像内容,用于支持视觉能力的模型
  • 特定于入口点的指令

PrepromptsHolder

PrepromptsHolder 管理用于指导 AI 的系统提示

  • 路线图说明
  • 代码生成模板
  • 改进说明
  • 理念和编码标准

来源: gpt_engineer/applications/cli/main.py496-498 gpt_engineer/core/preprompts_holder.py7-29

语言模型集成

GPT-Engineer 支持多个语言模型提供商

  • OpenAI (默认)
  • Azure OpenAI
  • Anthropic
  • 开源 LLM

集成通过统一的 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 接口文件处理系统执行环境内存和存储