本文档详细介绍了 gpt-engineer 中的内存和存储子系统,它们负责在代码生成和改进过程中持久化代码、数据和日志。这些系统提供基于文件的存储接口,并管理磁盘上项目文件的组织。
有关使用这些存储系统的执行环境的信息,请参阅 执行环境。
在 gpt-engineer 架构中,内存和存储组件在操作之间的持久化数据方面起着核心作用。主要的实现是用于键值存储的 DiskMemory 和用于管理执行环境中文件的 FileStore。
来源:gpt_engineer/core/default/simple_agent.py47-68 gpt_engineer/core/default/disk_execution_env.py36-54
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() | 将文件存储转换为字典 |
| 转换为 JSON | to_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 类专门为执行环境管理文件存储。与 DiskMemory 专注于持久化不同,FileStore 侧重于临时工作区管理。
来源:gpt_engineer/core/default/file_store.py10-62
默认情况下,FileStore 会创建一个临时目录用于存储文件,以确保执行过程中的隔离。
系统会从目录名称生成一个唯一标识符。
来源:gpt_engineer/core/default/file_store.py31-37
FileStore 提供了在内存和执行环境之间传输文件的方法。
| 操作 | 方法 | 描述 |
|---|---|---|
| 推送 | push(files) | 将 FilesDict 的内容写入存储目录。 |
| Pull | pull() | 将文件从存储读取到 FilesDict。 |
| Lint | linting(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 类演示了在代理操作中如何使用内存。
代理可以使用以下命令进行初始化,并带有默认配置:
这会创建 DiskMemory 和 DiskExecutionEnv 的实例,并配置了相应的路径。
来源:gpt_engineer/core/default/simple_agent.py60-68 gpt_engineer/core/default/simple_agent.py70-89
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(a90fcd)