菜单

内存与存储

相关源文件

本文档详细介绍了 gpt-engineer 中的内存和存储子系统,它们负责在代码生成和改进过程中持久化代码、数据和日志。这些系统提供基于文件的存储接口,并管理磁盘上项目文件的组织。

有关使用这些存储系统的执行环境的信息,请参阅 执行环境

系统架构中的内存和存储

在 gpt-engineer 架构中,内存和存储组件在操作之间的持久化数据方面起着核心作用。主要的实现是用于键值存储的 DiskMemory 和用于管理执行环境中文件的 FileStore

内存和存储组件关系图

来源:gpt_engineer/core/default/simple_agent.py47-68 gpt_engineer/core/default/disk_execution_env.py36-54

核心内存系统:DiskMemory

DiskMemory 类实现了一个基于文件的键值存储系统,它扩展了 BaseMemory 接口。它是 gpt-engineer 的主要持久化层。

来源:gpt_engineer/core/default/disk_memory.py36-63 gpt_engineer/core/default/disk_memory.py144-173 gpt_engineer/core/default/disk_memory.py174-196 gpt_engineer/core/default/disk_memory.py198-214 gpt_engineer/core/default/disk_memory.py216-226 gpt_engineer/core/default/disk_memory.py243-286

键值存储操作

DiskMemory 提供了一个字典状的接口,其中键对应文件名,值对应文件内容

操作方法描述
创建/更新__setitem__(key, val)使用给定的键和内容创建或更新文件
读取__getitem__(key)读取给定键的文件的内容
删除__delitem__(key)删除给定键的文件或目录
检查是否存在__contains__(key)检查具有给定键的文件是否存在
迭代__iter__()迭代内存目录中的所有文件键
数量__len__()计算内存目录中文件的数量
转换为字典to_dict()将文件存储转换为字典
转换为 JSONto_json()将文件存储转换为 JSON 字符串
列出路径to_path_list_string()生成文件路径字符串

来源:gpt_engineer/core/default/disk_memory.py64-86 gpt_engineer/core/default/disk_memory.py144-173 gpt_engineer/core/default/disk_memory.py174-196 gpt_engineer/core/default/disk_memory.py198-214 gpt_engineer/core/default/disk_memory.py216-226 gpt_engineer/core/default/disk_memory.py243-286

日志功能

DiskMemory 通过 log 方法提供日志功能,该方法将带时间戳的条目追加到专用“logs”目录中的文件中。

archive_logs 方法会将当前日志移动到带时间戳的目录中以进行历史保存。

来源:gpt_engineer/core/default/disk_memory.py288-316 gpt_engineer/core/default/disk_memory.py318-326

特殊格式处理

DiskMemory 内置了对图像文件(PNG、JPEG)的处理,在读取时将它们转换为 Base64 编码的字符串。

来源:gpt_engineer/core/default/disk_memory.py81-114

文件存储系统:FileStore

FileStore 类专门为执行环境管理文件存储。与 DiskMemory 专注于持久化不同,FileStore 侧重于临时工作区管理。

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

临时目录管理

默认情况下,FileStore 会创建一个临时目录用于存储文件,以确保执行过程中的隔离。

系统会从目录名称生成一个唯一标识符。

来源:gpt_engineer/core/default/file_store.py31-37

文件传输操作

FileStore 提供了在内存和执行环境之间传输文件的方法。

操作方法描述
推送push(files)FilesDict 的内容写入存储目录。
Pullpull()将文件从存储读取到 FilesDict
Lintlinting(files)对文件应用代码 linting。

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

路径管理

paths.py 模块定义了 gpt-engineer 中使用的标准路径,确保文件组织的统一性。

路径常量

常量描述
META_DATA_REL_PATH".gpteng"元数据目录相对路径
MEMORY_REL_PATH".gpteng/memory"内存目录相对路径
CODE_GEN_LOG_FILE"all_output.txt"代码生成日志文件名
IMPROVE_LOG_FILE"improve.txt"代码改进日志文件名
DIFF_LOG_FILE"diff_errors.txt"diff 错误日志文件名
DEBUG_LOG_FILE"debug_log_file.txt"调试日志文件名
ENTRYPOINT_FILE"run.sh"入口脚本文件名
ENTRYPOINT_LOG_FILE"gen_entrypoint_chat.txt"入口生成日志文件名
PREPROMPTS_PATH预提示目录的路径系统提示模板的位置

来源:gpt_engineer/core/default/paths.py43-52

路径构建函数

该模块提供了构建完整路径的实用函数。

来源:gpt_engineer/core/default/paths.py55-86

文件系统组织

gpt-engineer 项目的标准文件系统组织遵循以下结构。

来源:gpt_engineer/core/default/paths.py43-52

与执行环境集成

DiskExecutionEnv 类使用 FileStore 来管理执行文件。

执行环境提供以下方法:

  • upload(files):将文件传输到执行目录。
  • download():在执行后检索文件。
  • run(command, timeout):执行具有上传文件的命令。

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

与代理系统集成

SimpleAgent 类演示了在代理操作中如何使用内存。

代理可以使用以下命令进行初始化,并带有默认配置:

这会创建 DiskMemoryDiskExecutionEnv 的实例,并配置了相应的路径。

来源:gpt_engineer/core/default/simple_agent.py60-68 gpt_engineer/core/default/simple_agent.py70-89