553 - 《调研 Aider》

发布于 2025年4月17日

接着调研又一个 Code Agent 工具,这应该是目前最成熟的一个,花了我好多时间来看。

1、介绍。

Aider 是又一个 Code Agent CLI,基于 Python 实现。

特性。

  • browser 模式,通过 --browser 开启
  • 集成 Git,可以做 commit
  • Architect 模式,可以使用两个不同的模型来完成每个编码任务:一个 “Architect 模型” 负责描述如何解决编码问题,一个 “Editor 模型” 将 Architect 的提议转化为具体的代码编辑。
  • 代码 Linting 和测试,默认情况下,每次编辑文件后都会运行内置的 linter,并在发现语法错误时提供修复建议,支持多种语言
  • 模型别名,比如 3 表示 gpt-3.5-turbo,sonnet 表示 claude-3-5-sonnet-20240620 等,可以在 .aider.conf.yml 中自定义
  • 无限输出,对于支持 prefill 的模型,比如 Claude 3.5 Sonnet、DeepSeek Coder 和 Mistral,可以绕过模型限制,生成非常长的回复
  • 提示缓存,对于支持 Prompt Cache 的模型,比如 Anthropic 的 Sonnet 和 Haiku、DeepSeek 的 Chat,开启后可以节省成本并加快编码速度
  • 与 IDE/编辑器的集成,Aider 的 --watch-files 模式可以任何 IDE 或编辑器集成,注释里带 AI、AI! 或 AI? 的都会被识别
  • Slash 命令,可以用以 / 开头的命令来执行各种操作
  • 语音输入,基于 portaudio 录音然后调用 OpenAI 的 Whisper 接口转文本
  • Docker 运行,处于安全考虑

快速上手。

brew install portaudio
uv pip install --system aider-chat boto3
aider

命令行参数。

  • 模型和密钥
    • --model <模型名称>,指定 LLM 模型,可以用完整的模型名称,也可以用别名
    • --api-key <提供商>=<密钥>,提供密钥,比如 aider --model deepseek --api-key deepseek=YOUR_DEEPSEEK_API_KEY(注:通过环境变量比如 OPENAI_API_KEY 也有效)
    • --list-models <部分模型名称>,列出和名称匹配的模型,比如 aider --list-models turbo
  • 浏览器模式
    • --browser,启用 浏览器 UI
  • 架构模式
    • --architect,启用架构模式,使用两个不同的模型完成编码任务:一个 Architect 模型负责描述解决方案,一个 Editor 模型将提议转化为代码编辑
    • --editor-model <模型名称>,在 Architect 模式下指定用于生成具体文件编辑指令的 Editor 模型
  • Lint 和测试
    • --lint,运行代码 linter 并尝试修复错误
    • --lint-cmd <命令>,配置要使用的自定义代码 linter 命令
    • --test,运行测试命令并尝试修复失败的测试
    • --test-cmd <命令>,配置要使用的自定义测试命令
  • 配置类
    • --config-file <文件路径>,指定 YAML 配置文件路径,默认会找 .aider.conf.yml 文件
    • --model-settings-file <文件路径>,指定包含模型特定设置的文件路径. 默认是 .aider.model.settings.yml
    • --model-metadata-file <文件路径>,指定包含模型元数据(如上下文窗口大小和成本)的文件路径. 默认是 .aider.model.metadata.json
    • --alias <别名定义>,在命令行中定义模型别名. 例如,aider --alias “fast:gpt-4o-mini”. 可以在配置文件中定义更持久的别名
    • --editor <编辑器命令>,指定要与 /editor 命令一起使用的文本编辑器
    • --line-endings <类型>,设置文件写入的行尾格式
    • --map-tokens <tokens>,为存储库映射设置令牌预算
    • --subtree-only,将 Aider 限制在当前目录子树中,这有助于处理大型代码库
    • --watch-files,启用文件监视模式,Aider 将监视源文件的更改,并响应你在代码注释中添加的指令
  • GIT 相关
    • --attribute-commit-message <前缀>,为所有提交消息添加一个前缀
    • --no-git,在没有 git 仓库的情况下运行 Aider
  • 其他略

子命令,以 / 开头,用于执行特定操作。

  • /add: 添加文件到聊天会话
  • /architect: 进入 architect/editor 模式,该模式利用两种不同的语言模型. 一个 architect 模型描述如何解决编码问题,而一个 editor 模型将该提案转换为特定的文件编辑
  • /ask: 切换到 ask 模式,在该模式下,它将讨论你的代码并回答有关代码的问题,但不会对文件进行任何更改
  • /chat-mode: 切换到新的聊天模式,可选 codearchitectaskhelp
  • /code: 切换回 code 模式,在该模式下,它将修改你的代码
  • /drop: 从聊天会话中删除文件,用于释放上下文空间
  • /edit: /editor 命令的别名
  • /editor: 打开你配置的文本编辑器,以便你可以编写更广泛或更复杂的提示. Aider 将等待你关闭编辑器后再继续。可以使用 --editor 命令行参数、AIDER_EDITOR 环境变量或 .aider.conf.yml 文件中的 editor: 设置来配置编辑器
  • /editor-model: 在 architect 模式下切换 Editor Model 到一个新的语言模型.
  • /exit: 退出 Aider
  • /git: 运行 git 命令
  • /help: 你可以询问有关使用 Aider、自定义设置、故障排除、使用 LLM 等问题
  • /lint: lint 并修复已添加到聊天中的所有文件
  • /load: 从指定文件中加载并执行一系列命令
  • /ls: 列出当前聊天会话或存储库中的文件
  • /model: 切换主语言模型
  • /read: 将文件的内容读取到聊天上下文中,这些文件通常标记为只读,可以来自文件系统上的任何位置,包括 git 存储库外部
  • /reasoning-effort: 对于支持此功能的模型(如 o3-mini 和 Grok 3 Mini),此命令允许你控制模型的推理水平
  • /run: 用于运行 shell 命令,接受完整的 shell 命令,! 是此命令的别名
  • /save: 此命令将创建一个包含 /add/read-only 命令的文件,该文件可用于在以后的聊天会话中重新创建当前文件上下文
  • /settings: 此命令用于显示活动的 Aider 设置.
  • /test: 运行测试命令并尝试修复
  • /think-tokens: 对于支持思考令牌的模型(如 Sonnet),此命令允许你设置思考令牌预算,可能使用人类可读的格式(例如,8k,0.5M)
  • /tokens: 报告上下文窗口的令牌使用情况
  • /undo: 撤消 Aider 所做的最后一次更改,可以多次使用
  • /voice: 使用语音输入
  • /web: 抓取 URL 的内容,将其转换为 Markdown 并添加到聊天中,你也可以直接将 URL 粘贴到聊天中
  • /weak-model: 指定用于提交消息和聊天历史记录摘要等任务的模型
  • /clear: 清除对话历史记录
  • /clipboard: 将图像或文本从剪贴板粘贴到聊天中
  • /copy-context: 将当前代码上下文复制到剪贴板
  • /diff: 调用 git diff 以显示所做的更改,使用你首选的 diff 工具
  • /context: 自动识别给定请求需要编辑哪些文件

2、实现。

1)watch 模式。

主要代码在 watch.py。流程是这样,后台线程监视文件 -> 检测到变化 -> filter_func 检查(gitignore + AI 注释)-> 如果通过,记录变化文件并中断用户输入 -> process_changes 被调用 -> 自动添加文件 -> 根据 ai!/ai? 选择提示 -> 提取所有 AI 注释及上下文 -> 生成最终提示 -> 发送给 LLM。

两个相关提示词,! 用前者,? 用后者。

I've written your instructions in comments in the code and marked them with "ai"
You can see the "AI" comments shown below (marked with █).
Find them in the code files I've shared with you, and follow their instructions.

After completing those instructions, also be sure to remove all the "AI" comments from the code too.
/ask
Find the "AI" comments below (marked with █) in the code files I've shared with you.
They contain my questions that I need you to answer and other instructions for you.

2)Voice 模式。

主要代码在 voice.py。流程是这样,Voice Mode 通过 sounddevice 录制音频,使用 queue 缓冲数据,通过 prompt_toolkit 提供交互式录音提示,用 soundfilepydub 处理音频文件,最后调用 litellm (Whisper API) 进行转录,并将结果插入到用户的下一个输入提示中。

3)Prompt Cache 。

Aider 的 Prompt Cache 通过在发送给 LLM 的消息中添加特殊的 cache_control 头部来工作,比如 cache_control: {"type": "ephemeral"} 。它标记了提示中相对静态的部分(如系统指令、文件内容、仓库地图),让支持此功能的 LLM 提供商(如 Anthropic)可以缓存这些部分。当后续请求包含相同的可缓存部分时,提供商可

内容预览已结束

此内容需要会员权限。请先登录以查看完整内容。