常见问题解答

使用 /help <问题>获取关于使用 aider 的帮助, 包括自定义设置、故障排除、使用 LLM 等方面的疑问。

如何将所有文件添加到聊天中?

用户经常询问如何将仓库中的多个或所有文件添加到聊天中。这通常不是一个好主意,可能会弊大于利。

最佳做法是考虑完成任务需要修改哪些文件,然后只添加这些文件到聊天中。

当用户想要添加”所有文件”时,通常是认为这能为LLM提供关于整个代码库的有用上下文。实际上,Aider会自动为LLM提供关于Git仓库的大量额外上下文信息。它会根据当前聊天内容分析整个代码库,构建一个紧凑的仓库地图

添加大量与当前任务无关的文件通常会分散LLM的注意力或使其困惑。这会导致代码生成质量下降,有时甚至无法正确编辑文件。此外,添加额外文件还会增加token消耗。

重申一下,通常最好只添加需要修改的文件到聊天中。如果仍希望添加大量文件,可以:

  • 启动aider时使用通配符:aider src/*.py
  • 在聊天中使用带通配符的/add命令:/add src/*.py
  • /add命令一个目录名,它会递归添加该目录下的所有文件:/add src

能否在大型(单体)仓库中使用 aider?

Aider 可以在任何规模的代码仓库中工作,但针对超大型仓库的快速响应性能尚未做专门优化。不过,您可以通过以下方式提升使用体验。

在参考这些大型仓库专用建议前,请务必先查看通用使用技巧。无论仓库规模大小,合理选择加入对话的文件才能获得最佳效果。

优化方案

  1. 限定工作子树
    您可以切换到仓库中包含目标代码的子目录,并使用 --subtree-only 参数。这会指示 aider 忽略启动目录之外的仓库内容。

  2. 使用忽略文件
    创建 .aiderignore 文件来排除与当前任务无关的仓库部分。该文件遵循 .gitignore 的语法规范。例如在单体仓库中聚焦特定目录时,可配置如下:

# 忽略所有内容
/*

# 允许特定目录及其内容
!foo/
!bar/
!baz/

# 允许这些目录下的嵌套文件
!foo/**
!bar/**
!baz/**

通过 --aiderignore <文件名> 可指定自定义忽略规则文件。建议为前端、后端等不同工作场景准备多个预设配置。

能否同时使用 aider 处理多个 git 仓库?

目前 aider 一次只能处理一个代码仓库。

如果需要处理多个相互关联的仓库,可以尝试以下方法:

  • 在需要修改的 repo-A 中运行 aider,并使用 /read 命令以只读方式添加另一个 repo-B 的文件。这样可以让 aider 查看来自其他仓库的关键函数或文档。
  • 在每个仓库中运行 aider --show-repo-map > map.md 创建仓库地图。然后可以在 repo-A 中运行 aider,并通过 /read ../path/to/repo-B/map.md 分享另一个仓库的高层结构图。
  • 使用 aider 编写仓库文档。在每个仓库中运行 aider docs.md,与 aider 协作编写一些 Markdown 文档。然后在编辑 repo-A 时,可以通过 /read ../path/to/repo-B/docs.md 读取来自另一个仓库的文档。
  • 在 repo A 中,让 aider 编写一个小脚本来演示你想在 repo B 中使用的功能。然后在 repo B 中使用 aider 时,可以通过 /read 命令引入该脚本。

如何启用仓库地图功能?

根据你使用的 LLM 模型,aider 可能会默认禁用仓库地图功能:

Repo-map: disabled

这是因为性能较弱的模型容易被仓库地图的内容淹没并产生混淆。它们有时会错误地尝试编辑仓库地图中的代码。默认禁用仓库地图通常是有充分理由的。

如果你想强制启用该功能,可以使用 --map-tokens 1024 参数运行 aider。

如何将 git 历史记录包含在上下文中?

当开始一个新的 aider 会话时,你可以将最近的 git 历史记录包含在聊天上下文中。这有助于为 LLM 提供关于近期更改的信息。具体操作如下:

  1. 使用 /run 命令配合 git diff 来显示最近的更改:
    /run git diff HEAD~1
    

    这将在聊天历史中包含最后一次提交的差异。

  2. 要包含多个提交的差异,可以增加波浪号后的数字:
    /run git diff HEAD~3
    

    这将显示最近三次提交的更改。

请注意,聊天历史已经包含了当前会话期间所做的更改,因此这个技巧最适用于开始一个新的 aider 会话时,你想提供关于近期工作的上下文。

你也可以使用 aider 来审查 PR 分支:

/run git diff one-branch..another-branch

...

将 6.9k 令牌的命令输出添加到聊天中?(Y)是/(N)否 [是]: 是

/ask 这个更改与 FooBar 类的交互方式是否存在问题?

当然,你也可以在 aider 之外准备差异输出,然后将其作为文件提供给 aider 读取:

$ git diff -C10 v1..v2 > v1-v2-changes.diff
$ aider --read v1-v2-changes.diff

Aider v0.77.2.dev+import
主模型:anthropic/claude-3-7-sonnet-20250219 使用差异编辑格式,8k 思考令牌
──────────────────────────────────
v1-v2-changes.diff
> 你在这个 PR 中看到任何潜在的 bug 吗?

注意:/git 命令不适用于此目的,因为它的输出不会包含在聊天中。

如何从源代码本地运行 aider?

要本地运行该项目,请按照以下步骤操作:


# 克隆仓库
git clone git@github.com:Aider-AI/aider.git


# 进入项目目录
cd aider


# 建议创建虚拟环境


# 以可编辑/开发模式安装 aider,

# 这样它就会从这些源文件的最新副本运行
python -m pip install -e .

运行本地版本的 aider

python -m aider


## 我可以修改 aider 使用的系统提示词吗?

添加自定义指令最便捷的方式是使用[约定文件](https://aider.chat/docs/usage/conventions.html)。

不过,aider 的设计支持以模块化方式使用不同的实际系统提示词和编辑格式。如果你查看 `aider/coders` 子目录,会发现其中包含一个基础编码器及其基础提示词,还有多个具体的编码器实现。

如果你想尝试修改系统提示词,这份关于[在代码编辑上对 GPT-3.5 和 GPT-4 进行基准测试](https://aider.chat/docs/benchmarks.html)的文档可能提供有用的背景信息。

虽然关于如何添加新编码器子系统的文档不够完善,但你或许可以修改现有实现或以其为模板添加新的实现。

以下是几个可供修改的起点文件:

Wholefile 编码器目前是 GPT-3.5 的默认选择。你可以通过 `--edit-format whole` 手动选择它:
- wholefile_coder.py
- wholefile_prompts.py

Editblock 编码器目前是 GPT-4o 的默认选择。你可以通过 `--edit-format diff` 手动选择它:
- editblock_coder.py
- editblock_prompts.py

Universal diff 编码器目前是 GPT-4 Turbo 的默认选择。你可以通过 `--edit-format udiff` 手动选择它:
- udiff_coder.py
- udiff_prompts.py

在试验编码器后端时,使用 `--verbose --no-pretty` 参数运行 aider 会很有帮助,这样你可以看到对话中与 LLM 交互的所有原始信息。

你也可以参考[安装 aider 开发版本的说明](https://aider.chat/docs/install/optional.html#install-the-development-version-of-aider)。

## 你使用哪些LLM来构建aider?

Aider自身编写了大量代码,通常每个版本中约70%的新代码都是由它自己生成的。
人们经常问我,在开发aider时使用了哪些LLM模型。
下表展示了我近期使用的模型统计,数据来源于我的
[aider分析](https://aider.chat/docs/more/analytics.html)的
[公开日志](https://github.com/aider-ai/aider/blob/main/aider/website/assets/sample-analytics.jsonl)。

<!--[[[cog
import sys
sys.path.append(".")
import scripts.my_models as my_models
stats = my_models.collect_model_stats()
html = my_models.format_html_table(stats)
cog.out(html)
]]]-->
<style>
table { border-collapse: collapse; width: 100%; }
th, td { padding: 8px; text-align: left; border-bottom: 1px solid #ddd; }
th { background-color: #f2f2f2; }
tr:hover { background-color: #f5f5f5; }
.right { text-align: right; }
</style>
<table>
<tr><th>模型名称</th><th class='right'>总Token数</th><th class='right'>百分比</th></tr>
<tr><td>anthropic/claude-sonnet-4-20250514</td><td class='right'>557,537</td><td class='right'>43.6%</td></tr>
<tr><td>gemini/gemini-2.5-pro-exp-03-25</td><td class='right'>459,688</td><td class='right'>36.0%</td></tr>
<tr><td>gemini/gemini-2.5-pro</td><td class='right'>167,714</td><td class='right'>13.1%</td></tr>
<tr><td>o3</td><td class='right'>44,529</td><td class='right'>3.5%</td></tr>
<tr><td>gemini/gemini-2.5-pro-preview-05-06</td><td class='right'>40,256</td><td class='right'>3.1%</td></tr>
<tr><td>gemini/gemini-2.5-flash-preview-05-20</td><td class='right'>7,638</td><td class='right'>0.6%</td></tr>
<tr><td>gemini/REDACTED</td><td class='right'>643</td><td class='right'>0.1%</td></tr>
</table>

{: .note :}
部分模型显示为REDACTED,因为它们是新模型或不太流行的模型。
Aider的分析系统只记录"知名"LLM的名称。
<!--[[[end]]]-->

## "aider编写了xx%代码"的统计是如何计算的?

[Aider与git深度集成](/docs/git.html),因此aider的所有代码变更都会以正确的归属提交到代码库中。这些[统计数据](https://github.com/Aider-AI/aider/blob/main/scripts/blame.py)是通过类似`git blame`的方式计算得出的,统计每个版本中所有新增代码行的作者。只计算源代码文件中的行数,不包括文档或提示文件。

## 为什么aider在请求将新文件加入聊天后会忽略/丢弃其建议的编辑?

如果aider提示您将新文件加入聊天并且您同意,它会重新提交原始请求。LLM的回复表明它需要查看另一个文件(而您同意了),这通常意味着LLM本应从一开始就能查看/编辑该文件。如果没有访问权限,LLM更有可能对请求的变更做出错误的实现。LLM经常会为它们需要但没有的文件产生幻觉内容。因此在这种情况下,aider会重新提交原始请求。

## 为什么aider有时会停止在回复中高亮显示代码?

Aider会显示从LLM返回的markdown格式响应。通常,LLM会使用三重反引号标记的markdown"代码块"来回复代码,例如:

这是一些代码:

print("hello")

但是如果您向聊天中添加了包含三重反引号的文件,aider就需要告诉LLM使用不同的标记符。否则,LLM无法安全地将其编辑的代码中包含的三重反引号放入返回的代码块中。在这种情况下,aider会使用类似`<source>...</source>`的标记符。

这样做的副作用是aider输出的代码可能不再被正确高亮显示。如果您向聊天中添加了包含代码块的markdown文件,您最常会注意到这种情况。

## 为什么 LLM 会用我意料之外的语言与我对话?

Aider 会尽力提示模型使用您系统配置的语言。  
但大型语言模型(LLM)并不完全可靠,有时它们会决定使用意料之外的语言进行对话。  
Claude 尤其喜欢用法语交流。

您可以通过 `--chat-language <language>` 显式设置 aider 要求模型使用的语言。  
但 LLM 可能不会完全遵循这个设定。

## 我可以分享我的 aider 聊天记录吗?

是的,您现在可以用美观的方式分享 aider 聊天日志。

1. 从 `.aider.chat.history.md` 复制您想分享的 markdown 格式日志,创建一个 GitHub gist。或者以任何您喜欢的方式在网络上发布原始 markdown 日志。

https://gist.github.com/Aider-AI/2087ab8b64034a078c0a209440ac8be0


2. 获取 gist URL 并附加到以下地址后:

https://aider.chat/share/?mdurl=


这将生成如下所示的 URL,可以像在终端中看到的那样展示聊天历史:

https://aider.chat/share/?mdurl=https://gist.github.com/Aider-AI/2087ab8b64034a078c0a209440ac8be0 ```

在 aider 运行时我可以自己编辑文件吗?

可以。当您发送每条消息时,aider 总是从文件系统读取文件的最新副本。

不过在等待 aider 完成回复期间,编辑已加入聊天会话的文件可能不太明智。
您的编辑和 aider 的编辑可能会产生冲突。

什么是 Aider AI LLC?

Aider AI LLC 是开发 aider AI 编码工具的公司。
Aider 是 开源的,可以在 GitHub 上获取, 采用 Apache 2.0 许可证


目录