Aider 完全指南:从零开始,用 AI 把编程效率提升 4 倍

6 阅读16分钟

适合人群:完全零基础用户 → 日常开发者 → 想深度定制的工程师 GitHubAider-AI/aider | ⭐ 43.6k | Apache 2.0


一、什么是 Aider?为什么值得你花时间学?

想象一下:你不需要打开任何网页版 ChatGPT,不需要来回复制粘贴代码,只需要在终端里说一句「帮我给这个函数加上错误处理」,AI 就直接改好了文件,还顺手帮你提交了一条规范的 git commit。

这就是 Aider(AI pair programmer)——一个住在你终端里的 AI 结对程序员。

它不是另一个玩具级 demo,而是一个在真实大型项目中被数以万计的开发者每天使用的生产工具。据用户统计,每周通过 Aider 处理的 Token 量高达 150 亿,在 OpenRouter 平台的应用排名常年前列。


二、5 分钟快速上手

安装

# 一键安装(推荐)
python -m pip install aider-install
aider-install

或者直接 pip:

pip install aider-chat

第一次运行

# 进入你的项目目录
cd /your/project

# 用 Claude(推荐首选)
aider --model sonnet --api-key anthropic=sk-ant-xxxxx

# 用 DeepSeek(性价比极高,国内友好)
aider --model deepseek --api-key deepseek=sk-xxxxx

# 用 OpenAI GPT-4o
aider --model gpt-4o --api-key openai=sk-xxxxx

你会看到这样的界面

──────────────────────────────────────────
Aider v0.86.0
Model: claude-3-7-sonnet-20250219
Git repo: .git with 127 files
Repo-map: using 1024 tokens, auto refresh
──────────────────────────────────────────
> 

就这样,你的 AI 结对程序员已经就位,等待你的指令。


三、核心工作流程图

在深入功能之前,先看懂 Aider 的整体工作方式。一图胜千言:

┌─────────────────────────────────────────────────────────────────┐
│                    Aider 完整工作流程                             │
└─────────────────────────────────────────────────────────────────┘

    你输入需求
        │
        ▼
┌───────────────┐
│  main.py 解析  │  ← 命令行参数、.aider.conf.yml 配置文件
│  启动 & 路由   │
└───────┬───────┘
        │
        ▼
┌───────────────────────────────────────────────────────────────┐
│                     Repo Map 生成                              │
│                                                               │
│  Tree-sitter 解析所有文件  →  提取函数/类/变量符号              │
│        ↓                                                      │
│  构建引用关系图  →  PageRank 排重要性  →  精简 Token 预算      │
│                                                               │
│  结果示例:                                                    │
│  app.py: class UserService, def create_user, def get_user     │
│  models.py: class User, class Database                        │
└───────────────────────────────────────────────────────────────┘
        │
        ▼
┌───────────────────────────────────────────────────────────────┐
│               组装 LLM Messages(base_coder.py)               │
│                                                               │
│  [System Prompt]  ← 来自对应 Coder 的 *_prompts.py            │
│  [Repo Map]       ← 仓库地图(精简的全局视图)                  │
│  [文件内容]       ← /add 进来的文件全文                         │
│  [对话历史]       ← 自动压缩避免超长                            │
│  [用户请求]       ← 你刚刚输入的内容                            │
└───────────────────────────────────────────────────────────────┘
        │
        ▼
┌───────────────┐      ┌──────────────────────────────────────┐
│  发送给 LLM    │ ───► │  Claude / GPT-4o / DeepSeek / ...    │
│ sendchat.py   │      │  (通过 LiteLLM 统一接入)            │
└───────┬───────┘      └──────────────────────────────────────┘
        │ 流式返回
        ▼
┌───────────────────────────────────────────────────────────────┐
│               解析 & 应用修改(Coder 策略)                     │
│                                                               │
│  EditBlock:   <<<SEARCH>>> 定位  >>>REPLACE>>> 替换           │
│  WholeFile:   直接重写整个文件                                 │
│  UnifiedDiff: 标准 diff 格式                                  │
└───────────────────────────────────────────────────────────────┘
        │
        ▼
┌───────────────┐    ┌─────────────────┐    ┌────────────────┐
│  Linter 检查   │    │  运行测试套件    │    │  自动 git commit │
│ linter.py     │    │ (可选配置)       │    │ repo.py        │
└───────────────┘    └─────────────────┘    └────────────────┘
        │                    │                      │
        └────────────────────┴──────────────────────┘
                             │
                    如有错误,自动反思重试
                             │
                             ▼
                        展示结果,等待下一轮

四、基础示例:新手入门(Hello, Aider!)

示例 1:给现有函数添加功能

假设你有一个 utils.py

def add(a, b):
    return a + b

在 Aider 中输入:

> /add utils.py
> 给 add 函数加上类型检查,如果传入的不是数字就抛出 TypeError

Aider 会修改文件并输出:

utils.py
<<<<<<< SEARCH
def add(a, b):
    return a + b
=======
def add(a, b):
    if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
        raise TypeError(f"Expected numbers, got {type(a).__name__} and {type(b).__name__}")
    return a + b
>>>>>>> REPLACE

然后自动提交:feat: Add type checking to add function

示例 2:从零创建新文件

> 创建一个 config.py,用 dataclass 实现一个应用配置类,
  包含数据库 URL、端口、debug 模式,支持从环境变量读取默认值

Aider 会直接创建文件、写入代码,并提交。

示例 3:使用常用聊天命令

Aider 内置了丰富的斜杠命令,以 / 开头:

/add src/api.py src/models.py   # 把文件加入对话上下文
/drop models.py                 # 把不需要的文件移出
/diff                           # 查看所有 AI 修改的 diff
/undo                           # 撤销上一次修改(git reset --hard HEAD~1)
/git log --oneline              # 直接在 aider 里执行 git 命令
/run pytest tests/              # 运行测试
/ask 这段代码的时间复杂度是多少?  # 只问答,不改代码
/help                           # 查看所有命令

五、Coder 体系:Aider 最核心的设计

这是 Aider 架构中最精妙的部分,理解它能让你用得更高级。

Coder 继承关系图

                    ┌────────────────┐
                    │  Coder(基类)  │
                    │  base_coder.py │
                    └───────┬────────┘
                            │ 继承
          ┌─────────────────┼──────────────────────┐
          │                 │                      │
┌─────────▼──────┐  ┌───────▼───────┐  ┌──────────▼──────┐
│  EditBlockCoder │  │  WholeFileCoder│  │  UnifiedDiffCoder│
│  (默认,最常用) │  │  (重写整个文件) │  │  (diff 格式)    │
└────────────────┘  └───────────────┘  └─────────────────┘
          │                 │
┌─────────▼──────┐  ┌───────▼───────┐
│  AskCoder      │  │  PatchCoder   │
│  (只问不改)   │  │  (patch 格式) │
└────────┬───────┘  └───────────────┘
         │ 继承
┌────────▼───────┐
│ ArchitectCoder │   ← 双模型协作的高级模式
│ (architect)    │
└────────────────┘

另外独立的:
┌────────────────┐  ┌────────────────┐
│  ContextCoder  │  │   HelpCoder    │
│  (自动选文件)  │  │  (问 aider 用法)│
└────────────────┘  └────────────────┘

每个 Coder 怎么选?

模式命令适用场景
diff(默认)--edit-format diff日常修改,Token 最省
whole--edit-format whole小文件重写
ask/ask 你的问题只想问代码,不想改
architect--architect复杂功能,需要先规划再实现
context--edit-format context让 Aider 自己决定改哪些文件

六、Repo Map:Aider 的"望远镜"

这是 Aider 区别于其他 AI 工具的核心竞争力,也是它能在大型项目里表现好的秘密。

工作原理图

你的代码仓库(可能有几百个文件)
            │
            ▼
┌───────────────────────────────────────────────────────┐
│                Tree-sitter 语法解析                    │
│                                                       │
│  Python: def, class, import                           │
│  JS/TS:  function, class, export                      │
│  Go:     func, type, package                          │
│  Rust:   fn, struct, impl, trait                      │
│  + 100 种语言...                                      │
└───────────────────────┬───────────────────────────────┘
                        │ 提取符号
                        ▼
              ┌─────────────────┐
              │  符号引用关系图   │
              │                 │
              │  A.foo() 调用    │
              │  B.bar() 调用    │
              │  C.baz() ←── 被  │
              │  多处引用         │
              └────────┬────────┘
                       │
                       ▼
              ┌─────────────────┐
              │   PageRank 算法  │   ← 被更多地方引用 = 更重要
              │  (类似 Google    │
              │   网页排名原理)  │
              └────────┬────────┘
                       │ 按 Token 预算裁剪
                       ▼
┌──────────────────────────────────────────────────────┐
│  最终 Repo Map(注入给 LLM,精准又省 Token)           │
│                                                      │
│  app/models.py:                                      │
│  │ class User:                                       │
│  │   def authenticate(self, password):...            │
│  │   def get_profile(self):...                       │
│  app/api.py:                                         │
│  │ def login(request):...                            │
│  │ def register(request):...                         │
└──────────────────────────────────────────────────────┘

为什么这很重要? 如果直接把所有文件内容塞给 LLM,几百个文件会直接爆掉 context window,而且费钱又慢。Repo Map 让 LLM 用 1/10 的 Token 就能理解整个项目结构。


七、进阶示例:日常开发场景

示例 4:重构一个复杂函数

> /add src/payment.py src/models.py
> payment.py 里的 process_payment 函数太长了,超过 100 行,
  帮我把它拆分成几个小函数,每个只做一件事,保持原来的对外接口不变

示例 5:写测试

> /add src/user_service.py tests/test_user_service.py
> 为 UserService 类的所有公开方法写 pytest 单元测试,
  用 mock 替换数据库依赖,覆盖正常情况和边界情况

示例 6:修复 Bug(提供错误信息)

> /add src/api.py
> 运行时报这个错误:
  AttributeError: 'NoneType' object has no attribute 'user_id'
  在 api.py89 行的 get_current_user 函数里
  帮我修复,并确保添加适当的空值检查

示例 7:读取网页内容作为参考

> /web https://docs.pydantic.dev/latest/concepts/validators/
> /add src/schemas.py
> 参考刚才的 pydantic 文档,把 schemas.py 里的所有 validator 
  升级到 pydantic v2 的新写法

示例 8:添加图片上下文(截图 / 设计稿)

> /add src/components/Button.tsx
> 参考这张截图,实现这个按钮组件的样式
(然后把截图拖进终端或用 /image 命令)

八、Architect 模式:大项目的"双模型协作"

当你面对一个复杂需求——比如"为这个项目添加用户鉴权系统"——让一个 LLM 又规划又写代码往往效果不理想。Architect 模式解决了这个问题。

双模型协作流程

你输入需求:
"为这个 Flask API 添加 JWT 鉴权,
 包括登录接口、token 刷新、以及保护已有的 /user 路由"
         │
         ▼
┌────────────────────────────────────────────────┐
│  ARCHITECT MODEL(规划者)                      │
│  通常是更强的模型(如 claude-3-7-sonnet)         │
│                                                │
│  输出:                                         │
│  "需要修改以下文件:                              │
│   1. requirements.txt  ← 添加 PyJWT 依赖        │
│   2. auth.py(新建)    ← JWT 工具函数           │
│   3. routes/auth.py(新建)← 登录/刷新接口       │
│   4. routes/user.py    ← 添加 @jwt_required     │
│   5. app.py            ← 注册 auth Blueprint"  │
└────────────────────────┬───────────────────────┘
                         │ 规划内容作为指令
                         ▼
┌────────────────────────────────────────────────┐
│  EDITOR MODEL(执行者)                         │
│  专门负责写具体代码,不需要理解全局                │
│                                                │
│  逐文件执行修改,使用 SEARCH/REPLACE 精准改代码   │
└────────────────────────────────────────────────┘

如何启用

# 方式 1:命令行
aider --architect --model claude-3-7-sonnet-20250219

# 方式 2:指定不同的规划和执行模型
aider --architect --model claude-3-7-sonnet-20250219 \
      --editor-model deepseek/deepseek-chat

# 自动接受不需要人工确认
aider --architect --auto-accept-architect

九、Git 集成:自动提交与版本控制

这是 Aider 让开发者"上瘾"的功能之一。

自动 Commit Message 生成

Aider 内部有一个专门的 prompt(来自 prompts.py)调用 LLM 生成符合 Conventional Commits 规范的提交信息:

实际生成示例:
feat: Add JWT authentication middleware to user routes
fix: Handle NullPointerException in payment processor
refactor: Extract validation logic into separate helper functions
test: Add unit tests for UserService.authenticate method

常用 Git 操作

# 查看 Aider 做的所有改动
> /diff

# 后悔了?一键撤销最近一次 AI 修改
> /undo

# 在 aider 里直接跑 git 命令
> /git log --oneline -10
> /git diff HEAD~2
> /git stash

工作流建议

┌─────────────────────────────────────────────────────┐
│  推荐的 Aider + Git 工作流                           │
│                                                     │
│  1. git checkout -b feature/new-auth               │
│     (先开新分支)                                   │
│                                                     │
│  2. aider --model sonnet                           │
│     (启动 aider)                                   │
│                                                     │
│  3. 和 aider 对话,每个小改动自动产生 commit          │
│                                                     │
│  4. git log --oneline                              │
│     (看 aider 帮你积累了哪些提交)                   │
│                                                     │
│  5. git rebase -i HEAD~5                           │
│     (根据需要整理提交历史)                          │
│                                                     │
│  6. git merge feature/new-auth                     │
│     (合入主分支)                                   │
└─────────────────────────────────────────────────────┘

十、IDE 集成:Watch 模式

不想切换到终端?Aider 的 Watch 模式让你在任何编辑器(VS Code、Cursor、Vim……)里直接触发 AI 修改。

工作方式

┌──────────────┐         ┌────────────────────────────────┐
│  你的 IDE     │         │  Aider Watch 模式(后台运行)   │
│              │         │                                │
│ 在代码里加    │──写入──►│  监听所有文件变化               │
│ 特殊注释:    │         │  检测到 AI! 注释 → 触发对话     │
│              │         │  Aider 修改代码 → 删除注释      │
│ # AI! 把这个  │         └────────────────────────────────┘
│ 函数改成异步  │
│ def fetch_data():...
└──────────────┘

启动方式:
aider --watch-files

实际操作示例

在 VS Code 里,你只需要在代码里写:

# AI! 为下面这个类添加 __repr__ 和 __eq__ 方法
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

保存文件,Aider 自动检测到注释,执行修改,删掉注释,你只需要回到 IDE 看结果。


十一、高级功能:完整配置参考

.aider.conf.yml 配置文件

把常用配置写进项目根目录,再也不用每次敲参数:

# .aider.conf.yml(放在项目根目录)

# 模型配置
model: claude-3-7-sonnet-20250219

# 使用 architect 模式
architect: true
editor-model: deepseek/deepseek-coder-v2

# 自动提交
auto-commits: true
commit-prompt: "请用中文生成 commit message"

# Lint 和测试
lint-cmd: "flake8 ."
test-cmd: "pytest tests/ -x"
auto-test: true

# 上下文控制
map-tokens: 2048
max-chat-history-tokens: 8192

# 界面
dark-mode: true
pretty: true
stream: true

常用命令行参数速查

# 指定要编辑的文件(启动时就加载)
aider src/main.py src/utils.py

# 只读文件(作为参考,不让 AI 修改)
aider --read docs/api_spec.md --add src/api.py

# 禁用自动提交(自己控制 git)
aider --no-auto-commits

# 显示所有发送给 LLM 的消息(调试用)
aider --verbose

# 把对话记录保存到文件
aider --chat-history-file .aider.chat.history

# 使用本地 Ollama 模型
aider --model ollama/qwen2.5-coder:7b

# 通过 OpenRouter 使用各种模型
aider --model openrouter/google/gemini-2.0-flash-exp:free \
      --api-key openrouter=sk-or-xxxxx

十二、高级示例:大型项目实战场景

示例 9:一次性重构多个文件(Architect 模式)

aider --architect --auto-accept-architect
> 我们的项目从同步改成异步架构。
  请帮我:
  1. 把 services/ 目录下所有服务类的方法改成 async/await
  2. 对应更新 routes/ 里的路由处理函数
  3. 更新 tests/ 里的测试用 pytest-asyncio
  相关文件都在这些目录里,你来决定需要修改哪些文件

Architect 模型会先扫描仓库地图,规划出修改方案,再逐文件执行。

示例 10:利用 /run 实现测试驱动开发

> /add src/calculator.py tests/test_calculator.py
> 先帮我写 test_calculator.py 里的测试:
  测试 Calculator 类的 add/subtract/multiply/divide 方法,
  包括除零的边界情况

(写完测试)

> /run pytest tests/test_calculator.py
(测试全部失败,因为还没实现)

> 现在帮我实现 calculator.py,让刚才写的测试全部通过

Aider 会看到测试的失败输出,自动把错误信息作为上下文来写实现代码。

示例 11:自动化代码审查

# 使用 --message 参数做无交互的批量操作
aider --message "检查这个文件里是否有 SQL 注入漏洞,找到的话帮我修复" \
      --yes-always \
      src/database.py

示例 12:结合 shell 命令做持续集成

#!/bin/bash
# 脚本化使用 aider

# 自动修复 flake8 报的所有问题
flake8 . > /tmp/lint_errors.txt
aider --message "$(cat /tmp/lint_errors.txt)" \
      --message "修复上面所有 lint 错误" \
      --yes-always \
      $(flake8 . --format='%(path)s' | sort -u)

十三、核心源码架构图(给想深入的开发者)

aider/                          # 主包
│
├── main.py                     # 程序入口,解析 CLI 参数,初始化一切
├── args.py                     # 所有命令行参数定义(argparse)
│
├── coders/                     # ★ 核心:代码修改策略
│   ├── base_coder.py           # 基类(run()主循环、消息组装、git提交)
│   ├── editblock_coder.py      # 默认策略(SEARCH/REPLACE块)
│   ├── architect_coder.py      # 双模型协作(规划→执行)
│   ├── wholefile_coder.py      # 重写整个文件
│   ├── udiff_coder.py          # unified diff 格式
│   ├── patch_coder.py          # patch 格式
│   ├── ask_coder.py            # 只问答不改代码
│   ├── context_coder.py        # 自动选取需修改的文件
│   ├── help_coder.py           # 回答 aider 使用问题
│   └── *_prompts.py            # 每个 Coder 对应的 System Prompt
│
├── repomap.py                  # ★ Repo Map(Tree-sitter + PageRank)
├── repo.py                     # Git 操作封装(GitPython)
├── models.py                   # 模型配置(能力、限制、别名)
├── llm.py                      # LLM 调用(基于 LiteLLM 统一接入)
├── sendchat.py                 # 消息合法性检查与发送
│
├── commands.py                 # 所有 /斜杠命令 的实现
├── prompts.py                  # 全局 Prompt(commit、历史摘要等)
├── history.py                  # 对话历史压缩(防止超 context window)
│
├── io.py                       # 终端 I/O(彩色输出、用户输入)
├── linter.py                   # 自动 lint 检查
├── scrape.py                   # 抓取网页内容(/web 命令)
├── voice.py                    # 语音转文字(OpenAI Whisper)
├── watch.py                    # 文件监听(IDE 集成模式)
│
└── queries/                    # Tree-sitter 查询规则(每种语言一个文件)
    ├── tree-sitter-python-tags.scm
    ├── tree-sitter-javascript-tags.scm
    └── ... (100+ 种语言)

benchmark/                      # LLM 代码能力基准测试框架
tests/                          # pytest 测试套件

关键数据流(一次对话的完整路径)

用户输入
  │
  ├─► commands.py(如果以 / 开头)
  │     └─► 直接执行命令(/add /undo /diff...)
  │
  └─► base_coder.run()
        │
        ├─► repomap.get_repo_map()     # 生成仓库地图
        ├─► _get_files_content()       # 读取已添加文件内容
        ├─► history.summarize()        # 必要时压缩历史
        │
        ├─► 组装 Messages 列表
        │     [system] + [repo_map] + [files] + [history] + [user_msg]
        │
        ├─► sendchat.send_with_retries()  # 发送,含重试逻辑
        │     └─► litellm.completion()
        │
        ├─► 流式接收响应,实时打印
        │
        ├─► editblock_coder.apply_updates()  # 解析并应用修改
        │     └─► search_replace.py          # 精确的 SEARCH/REPLACE 引擎
        │
        ├─► linter.lint_edited_files()  # 可选:自动 lint
        ├─► 运行测试命令(可选)
        │
        ├─► repo.commit()               # git add + commit
        │     └─► LLM 生成 commit msg   # 使用 prompts.commit_system
        │
        └─► 等待下一轮输入

十四、对话历史的智能压缩机制

当你和 Aider 聊了很久,历史消息会很长。Aider 有一套聪明的解决方案:

正常聊天状态:
┌─────────────────────────────────┐
│ [msg 1] 用户:帮我写个登录接口    │
│ [msg 2] AI:好的,已创建...       │
│ [msg 3] 用户:加上 OAuth 支持     │  ← 这些消息会积累
│ [msg 4] AI:已修改 auth.py...    │
│ [msg 5] 用户:加上速率限制        │
│   ...(几十轮对话)               │
└─────────────────────────────────┘
         快超出 context window 了!
                  │
                  ▼
┌─────────────────────────────────────────────────────┐
│  history.py 触发压缩                                 │
│                                                     │
│  调用 LLM,使用 prompts.summarize 提示词:           │
│  "请用第一人称(以用户视角)总结这段对话历史,          │
│   必须包含文件名、函数名、修改了什么..."               │
│                                                     │
│  输出摘要:                                          │
│  "I asked you to build a login system. You created  │
│   auth.py with JWT support and added OAuth via      │
│   google-oauth2 library. We also added rate         │
│   limiting in middleware.py using Redis..."         │
└─────────────────────────────────────────────────────┘
         压缩后继续对话,AI 仍然记得之前做了什么

十五、支持的模型全景

┌─────────────────────────────────────────────────────────────┐
│                   Aider 支持的 LLM 生态                      │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ★★★ 推荐首选(综合最佳)                                    │
│  • Claude 3.7 Sonnet     aider --model sonnet               │
│  • DeepSeek R1/V3        aider --model deepseek             │
│  • OpenAI o3-mini        aider --model o3-mini              │
│  • GPT-4o                aider --model gpt-4o               │
│                                                             │
│  ★★  性价比之选                                              │
│  • Claude Haiku 3.5      aider --model haiku                │
│  • DeepSeek Coder V2     aider --model deepseek/...         │
│  • Gemini 2.0 Flash      aider --model gemini/...           │
│                                                             │
│  ★   本地模型(完全离线)                                     │
│  • Qwen2.5-Coder         aider --model ollama/qwen2.5-coder │
│  • CodeLlama             aider --model ollama/codellama     │
│  • 任何 Ollama 模型       aider --model ollama/<模型名>       │
│                                                             │
│  💡  通过 OpenRouter 访问几乎所有模型                         │
│  aider --model openrouter/<provider>/<model-name>           │
│        --api-key openrouter=sk-or-xxxxx                     │
└─────────────────────────────────────────────────────────────┘

十六、开发者贡献指南(想参与开源的同学)

搭建开发环境

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

# 2. 创建虚拟环境(建议放在项目外面)
python3 -m venv ../aider_venv
source ../aider_venv/bin/activate   # macOS/Linux
# 或 ../aider_venv/Scripts/activate  # Windows

# 3. 以开发模式安装(改代码后立即生效)
pip install -e .
pip install -r requirements.txt
pip install -r requirements/requirements-dev.txt

# 4. 安装 pre-commit 钩子(自动格式化)
pre-commit install

# 5. 运行测试验证环境
pytest tests/basic/test_coder.py -v

代码风格约定

  • Python 3.9-3.12 兼容
  • 最大行长 100 字符
  • 不使用 type hints(这是项目的刻意选择)
  • 使用 Black + isort 格式化(pre-commit 自动处理)
  • 测试文件放 tests/,命名 test_*.py

如果想添加对新 LLM 的支持

主要修改 aider/models.py,添加模型的能力配置(context window、edit format、是否支持图片等)。


十七、常见问题与解决

Q:Aider 修改了我不想改的文件怎么办?

> /undo   # 立即撤销最近一次修改

Q:Token 消耗太多怎么优化?

# 减少 repo map 的 token 用量
aider --map-tokens 1024

# 使用更便宜的模型做编辑,只用贵的模型规划
aider --architect --model claude-3-7-sonnet \
      --editor-model deepseek/deepseek-chat

Q:想把 Aider 用在没有 git 的目录?

aider --no-git

Q:想让 Aider 读取某个参考文档但不修改它?

> /read-only docs/api_spec.md

Q:Aider 改错了,能看到具体改了什么?

> /diff    # 查看所有 aider 做的 diff
> /git log # 查看提交历史

十八、学习路线总结

┌──────────────────────────────────────────────────────────────┐
│                  Aider 学习路线图                              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  🟢 第一阶段:入门(1天)                                      │
│     ✅ 安装 & 配置 API Key                                    │
│     ✅ /add /drop /undo /diff 基本命令                        │
│     ✅ 用 aider 完成一个小改动并查看 git commit               │
│                                                              │
│  🟡 第二阶段:日常使用(1周)                                  │
│     ✅ 建立 .aider.conf.yml 配置文件                          │
│     ✅ 熟悉 /ask /run /web 命令                               │
│     ✅ 掌握多文件上下文管理(/add /drop)                      │
│     ✅ 理解何时用 --read-only                                 │
│                                                              │
│  🟠 第三阶段:进阶(1个月)                                    │
│     ✅ 启用 Architect 模式处理复杂需求                         │
│     ✅ 配置自动 lint + 测试(--lint-cmd / --test-cmd)         │
│     ✅ 使用 Watch 模式与 IDE 集成                              │
│     ✅ 了解不同 edit-format 的适用场景                         │
│                                                              │
│  🔴 第四阶段:深度定制(进阶开发者)                           │
│     ✅ 阅读 base_coder.py 理解核心循环                        │
│     ✅ 理解 repomap.py 的 PageRank 机制                       │
│     ✅ 为新模型贡献 models.py 配置                            │
│     ✅ 运行 benchmark/ 评测自定义模型的代码能力               │
│                                                              │
└──────────────────────────────────────────────────────────────┘

十九、与同类工具对比

┌────────────────┬──────────┬──────────┬──────────┬──────────┐
│ 功能           │  Aider   │ Copilot  │ Cursor   │ Continue │
├────────────────┼──────────┼──────────┼──────────┼──────────┤
│ 开源免费       │   ✅     │   ❌     │   ❌     │   ✅     │
│ 任意 LLM      │   ✅     │   ❌     │   部分   │   ✅     │
│ 本地模型       │   ✅     │   ❌     │   ❌     │   ✅     │
│ Git 自动提交   │   ✅     │   ❌     │   ❌     │   ❌     │
│ 全仓库上下文   │   ✅     │   部分   │   ✅     │   部分   │
│ 终端原生       │   ✅     │   ❌     │   ❌     │   ❌     │
│ IDE 插件依赖   │   ❌     │   需要   │   需要   │   需要   │
│ 语音输入       │   ✅     │   ❌     │   ❌     │   ❌     │
│ Architect 模式 │   ✅     │   ❌     │   ❌     │   ❌     │
└────────────────┴──────────┴──────────┴──────────┴──────────┘

Aider 的核心优势:完全开源、不绑定任何 IDE、与 git 深度集成、可接入任意 LLM,是工程师精确控制 AI 修改代码的首选工具。


二十、一句话总结每个核心模块

模块一句话描述
main.py程序大门,解析参数、初始化所有组件
base_coder.py整个系统的心脏,主循环就在这里
repomap.py"望远镜",用 PageRank 让 LLM 看懂整个项目
editblock_coder.py默认的外科手术式修改,精准定位再替换
architect_coder.py先规划后执行的双模型协作模式
context_coder.py自动判断该改哪些文件,无需手动 /add
repo.pygit 的贴心助手,自动 commit + undo 支持
prompts.py存放 commit message 生成、历史摘要等全局 Prompt
history.py对话太长时自动压缩,不让 LLM "失忆"
sendchat.py确保消息格式合法,负责重试和流式输出
linter.py改完代码自动 lint,保持代码质量
watch.pyIDE 集成桥梁,监听文件注释触发 AI
voice.py对着麦克风说话就能改代码
scrape.py把网页文档喂给 LLM 作为参考

结语

Aider 不只是一个工具,它代表了一种新的编程范式:开发者负责方向和决策,AI 负责执行和细节。你不再是一个人面对代码,而是随时有一位深度理解你整个代码库的 AI 结对程序员在旁。

它的设计哲学是"让开发者始终掌控":AI 改了什么你一眼就能看到(git diff),不满意可以立即撤销(/undo),你决定哪些文件进入上下文(/add /drop),你选择用哪个模型。这种透明度和可控性,是它在专业开发者中广受好评的根本原因。

现在就试试吧:

pip install aider-chat
cd /your/favorite/project
aider --model deepseek --api-key deepseek=your-key

然后输入你的第一个需求,感受一下被 AI 结对编程加持的开发体验。


📖 官方文档aider.chat

💬 Discord 社区discord.gg/Tv2uQnR88V

GitHubgithub.com/Aider-AI/ai…

📊 LLM 基准测试排行aider.chat/docs/leader…