菜单

改进现有代码

相关源文件

此页面介绍了如何使用 gpt-engineer 通过有针对性的更改来改进现有代码库。与涵盖从头开始创建新项目的基本用法不同,改进模式会对现有文件应用特定更改,以增强、调试或为您的代码添加功能。

改进过程概述

改进过程遵循以下关键步骤:

  1. 文件选择:选择代码库中要改进的文件。
  2. AI 分析:LLM 根据您的改进提示分析您的代码。
  3. Diff 生成:系统以 Git diff 格式生成更改。
  4. 验证和更正:Diff 将针对原始代码进行验证。
  5. 审查和应用:您在应用更改之前进行审查和批准。

这种方法可以对代码库进行精确、增量式的改进,同时保持现有代码结构的完整性。

来源:gpt_engineer/applications/cli/main.py428-551 gpt_engineer/core/default/steps.py341-360

使用改进模式

命令行用法

要改进现有代码,请运行 gpt-engineer 并使用 -i--improve 标志。

这将激活改进模式,该模式会使用与代码生成模式不同的提示与 LLM 进行交互,并使用增强的文件处理系统来处理代码更改。

改进模式的附加可选标志

标志描述
--skip-file-selection-s跳过交互式文件选择并使用生成的 TOML 文件。
--diff_timeout N设置 diff 正则表达式超时(默认值:3)。

来源:gpt_engineer/applications/cli/main.py282-366

文件选择

当您运行改进命令时,gpt-engineer 会要求您选择要考虑改进的文件。您可以单独选择文件,也可以使用预定义的文件组。

来源:gpt_engineer/applications/cli/main.py516-520 gpt_engineer/applications/cli/file_selector.py

技术组件

Diff 系统架构

改进模式使用专门的 diff 系统来表示、验证和应用代码更改。该系统使用统一的 Git diff 格式,该格式提供了一种精确指定行级更改的方法。

来源:gpt_engineer/core/diff.py44-420 gpt_engineer/core/chat_to_files.py69-120 gpt_engineer/core/files_dict.py19-89

核心改进函数

改进过程由 steps.py 文件中的几个关键函数驱动。

  1. improve_fn:协调改进过程的主函数。
  2. _improve_loop:处理与 AI 的交互,并在需要时优化 diff。
  3. salvage_correct_hunks:处理、验证和应用 diff。
  4. handle_improve_mode:管理整体改进过程(包括错误处理)的顶层函数。

来源:gpt_engineer/core/default/steps.py271-397

Diff 格式和过程

Diff 格式

改进模式使用统一的 Git diff 格式来传达更改。以下是预期格式的示例:

格式包括:

  • 更改前(---)和更改后(+++)的文件路径。
  • Hunk 标头(@@ -12,3 +12,4 @@),指示更改的起始行和长度。
  • 上下文行(未更改,以空格开头)。
  • 删除的行(以 - 开头)。
  • 添加的行(以 + 开头)。

该系统还可以处理新文件的创建。

来源:gpt_engineer/preprompts/file_format_diff1-42

验证和更正 Diff

改进系统的一个关键功能是它能够验证和更正可能与原始代码不完全匹配的 diff。此过程涉及:

  1. 查找每个 hunk 的正确起始点。
  2. 验证上下文行是否与原始代码匹配。
  3. 更正行号并根据需要调整 hunk。
  4. 删除无法更正的无效 hunk。

这种强大的验证可确保即使 LLM 对代码结构的理解不完美,也可以应用更改。

来源:gpt_engineer/core/diff.py288-378 gpt_engineer/core/chat_to_files.py123-161

高级用法

自定义 Diff 超时

在解析复杂的 diff 时,正则表达式匹配可能会超时。您可以使用 --diff_timeout 参数调整超时值。

这将超时时间从默认的 3 秒增加到 5 秒,这可以帮助处理更大或更复杂的 diff。

来源:gpt_engineer/applications/cli/main.py376-380 gpt_engineer/core/chat_to_files.py123-161

改进过程中的 Linting

改进过程可以在将代码发送到 LLM 之前自动对其进行 linting。这确保代码遵循标准的格式约定,从而使 AI 更容易理解和修改。

Linting 在文件选择过程中进行控制,并对代码应用语言适用的格式化程序。

来源:gpt_engineer/applications/cli/main.py521-523

优化 Diff

如果 AI 生成了无效的 diff,系统会尝试通过将详细的错误信息发送回 AI 并请求更正来优化它们。

这种重试机制提高了生成更改的质量,并处理了初始 diff 无法正确应用的边缘情况。

来源:gpt_engineer/core/default/steps.py324-337

与 gpt-engineer 集成

改进模式与 gpt-engineer 系统的其余部分进行了深度集成。

来源:gpt_engineer/applications/cli/cli_agent.py185-232 gpt_engineer/core/default/steps.py271-312

最佳实践

为了最有效地改进代码,请遵循以下建议:

  1. 在提示中明确具体:清楚地描述需要改进、修复或添加的内容。
  2. 仅选择相关文件:选择过多的文件可能会使 AI 感到困惑,并导致更改不够精确。
  3. 仔细审查更改:在应用更改之前,务必仔细审查建议的更改,以确保它们符合您的意图。
  4. 从小处着手改进:对于大型代码库,一次专注于改进一个组件。
  5. 提供上下文:包括有关代码目的的信息以及您希望通过改进实现的目标。

改进模式是增强现有代码库同时保持其结构和完整性的强大工具。通过使用精确的 diff 而不是从头开始重新生成文件,它能够实现由 AI 指导的、专注的、增量式的改进。