本文内容基于 Linux.do 论坛的讨论,并对 Aider 的配置和使用进行补充说明。站内已有关于 aider-chat 的共建文档,本文旨在提供更具体的配置指导。
Aider 内置了对许多主流 LLM 提供商和模型的支持,开箱即用。然而,考虑到许多用户会使用各种中转服务,了解其连接机制很重要。
Aider 通过 模型 ID 的前缀 来判断使用哪个渠道以及对应的 API 格式。例如,配置 openai/claude-3.7-sonnet-think 意味着:
- 使用
openai前缀,表示遵循 OpenAI 的 API 格式进行请求。 - 请求的模型 ID 是
claude-3.7-sonnet-think。
因此,推荐的最佳实践是使用像 New API 这样的工具,将你的各种 LLM 渠道统一转换为 OpenAI 兼容的接口。这样,你只需要一份 Aider 配置即可适配所有模型。
Aider 允许为不同的任务指定不同的模型,主要分为三类:
- 主模型 (model): 执行核心编码任务,如
/code、/ask、/help等指令都使用此模型。 - 编辑器模型 (editor-model): 在
/architect模式下,规划步骤使用主模型,而具体的代码编辑则由此模型完成。建议: 选择一个指令遵循能力强、幻觉较低的模型(通常非纯推理优化模型表现更好)。 - 弱模型 (weak-model): 用于生成 Git commit messages(通过
/commit指令)。通常选择一个价格便宜、性能尚可的小模型即可。
Aider 提供两种主要的编辑模式:
- diff 模式: 使用类似
git diff的格式来描述文件更改。这种模式通常更节省 token。 - whole 模式: 重新输出整个需要修改的文件内容。
选择建议: 大部分情况下 diff 模式效率更高。但某些模型可能在处理 diff 格式时容易出错或产生幻觉。如果遇到问题,可以尝试切换到 whole 模式。更多详细说明请参考 Aider 官方文档。
以下是一个配置示例,你可以将其保存在用户主目录下的 .aider.conf.yml 文件中。
# .aider.conf.yml (通常放置在家目录 ~/.aider.conf.yml)
openai-api-base: https://your-new-api-endpoint.com/v1 # 替换为你的 New API 或兼容 OpenAI 的中转地址
# openai-api-key: ${OPENAI_API_KEY} # 可以直接引用环境变量,或在 .env 文件中设置
model: openai/claude-3.7-sonnet-think # 主力编码模型
editor-model: openai/claude-3.5-sonnet # architect 模式下的编辑模型
weak-model: openai/deepseek-chat # 生成 commit message 的模型
editor: nvim # /edit 命令调用的编辑器 (可选: vi, code, etc.)
edit-format: diff # /code 模式使用的编辑格式
# editor-edit-format: editor-diff # /architect 模式下的编辑格式 (可选, 默认可能与 edit-format 一致或有特定优化)
architect: true # 默认启用 architect 模式 (可以设为 false)
cache-prompts: true # 启用提示缓存以节省 token (对某些官方 API 可能更有效)
read: # 启动时默认读取的规则文件或目录 (相对于项目根目录)
同时,在家目录创建 .env 文件来存放 API 密钥:
OPENAI_API_KEY="sk-your-openai-or-newapi-key"
# OPENROUTER_API_KEY="sk-or-v1-your-openrouter-key" # 如果使用 OpenRouter
# ANTHROPIC_API_KEY="sk-ant-..." # 如果直接使用 Anthropic
完成配置后,直接在你的项目工程目录下运行 aider 命令即可启动。如果想直接编辑特定文件,可以使用 aider /path/to/your/file.ext。
这是一个从 https://leeorz.me/posts/aider/configuring-aider-with-llms 下的原始话题分离的讨论话题

