编辑格式
Aider 使用多种”编辑格式”让大型语言模型(LLM)修改源代码文件。
不同模型对不同编辑格式的适配性各有优劣。
Aider 默认配置为大多数流行常用模型使用最优格式。
您始终可以通过 --edit-format
参数强制使用特定编辑格式。
whole(完整文件)格式
“whole”是最简单的编辑格式。 LLM 被要求返回每个需要修改的源文件的完整更新副本。 虽然简单,但这种方式可能较慢且成本较高,因为即使只修改了几行代码,LLM也必须返回整个文件内容。
whole格式要求在代码块前直接标明文件路径:
show_greeting.py
```
import sys
def greeting(name):
print("Hey", name)
if __name__ == '__main__':
greeting(sys.argv[1])
```
diff(差异)格式
“diff”编辑格式要求LLM以一系列搜索/替换块的形式指定文件修改。 这是一种高效格式,因为模型只需返回文件中被修改的部分。
修改使用类似git合并冲突解决标记的语法格式,文件路径直接放在代码块前:
mathweb/flask/app.py
```
<<<<<<< SEARCH
from flask import Flask
=======
import math
from flask import Flask
>>>>>>> REPLACE
```
diff-fenced(带围栏差异)格式
“diff-fenced”编辑格式基于diff格式,但文件路径放在围栏内部。 这种格式主要用于Gemini系列模型,因为这些模型经常无法完全遵循diff格式指定的围栏方式。
```
mathweb/flask/app.py
<<<<<<< SEARCH
from flask import Flask
=======
import math
from flask import Flask
>>>>>>> REPLACE
```
udiff 格式
“udiff” 编辑格式基于广泛使用的统一差异格式,但经过修改和简化。这是一种高效的格式,因为模型只需要返回文件中发生变更的部分。
这种格式主要适用于 GPT-4 Turbo 系列模型,因为它能减少这些模型的”惰性编码”倾向。使用其他编辑格式时,GPT-4 Turbo 模型往往会省略大段代码,并用”# … 原代码在此处 …“风格的注释来替代。
```diff
--- mathweb/flask/app.py
+++ mathweb/flask/app.py
@@ ... @@
-class MathWeb:
+import sympy
+
+class MathWeb:
```
editor-diff 和 editor-whole 格式
这些是 diff 和 whole 格式的简化版本,旨在与 --editor-edit-format
参数配合使用于架构师模式。实际的编辑格式相同,但 aider 使用了更简洁的提示词,更专注于文件编辑本身而非解决编码任务。
架构师模型负责解决编码任务并提供关于需要做哪些文件修改的纯文本指令。编辑器则解释这些指令来生成语法正确的 diff 或 whole 格式的编辑内容。