• 项目地址:https://github.com/paul-gauthier/aider
  • 编程语言:主要使用 Python
  • Star:8.9K+
  • 功能:在终端中直接与 GPT-3.5/GPT-4 交互,编写或修改代码
  • 主要优点:增加了代码生成的可控性,一次可以修改多个文件

1 编程工具

以前我们使用的辅助编辑工具多数是嵌入在 IDE 里的插件,主要提供代码段和建议。或者与 Agent 结合,实现复杂项目。相对来说比较细碎且不可控,还是主要以人为主。

另外,编程时使用大模型和问答场景一样,也存在数据问题,例如如何精准地提问、如何在有限的上下文限制下传达重要信息、如何判断哪些信息最相关,以及如何在解决问题时节约 token 等。

与问答不同之处在于,编程返回内容有更高要求,生成的程序需要可执行,并且在修改代码的场景中最好能看到代码对比效果。同时,我们还有一些工具可以辅助生成数据,例如语法检查工具,在运行的错误信息传给大模型继续修改。通过 Agent 之间的配合可以实现多步组合效果。

目前这些功能基本由本地端的编程工具控制,最好能让程序员更为可控,比如批量调用;再如简化工作流程:查 -> 改 -> 测 -> 查 -> 改 -> 测 -> 查... 让机器实现这种机械化、可描述、且可示例的工作。

进一步思考编码工作,可以将其分为两部分:一是目前模型擅长的工作和容易描述的重复性工作可以交给模型来完成;二是对于人或模型来说都相对复杂的工作,则可以通过模型来辅助工作。

第一次看到 aider 工具时,觉得与当前的工具相比小而美,可能有用。自己试用之后,感觉非常兴奋——你可以将他视为一个初级程序员。

2 针对问题

  • 对于复杂代码、他人编写的代码或很久前的代码,存在 N 个文件,不确定该修改哪一个。
  • 使用 IDE 编程助手插件时,无法确保将所需内容全部传递给模型。
  • 将代码通过聊天界面传递给模型时可能需要自行筛选,非常繁琐。
  • 不知道如何撰写最有效的提示。

3 代码分析

  • 代码量:8000+ 行 Python 代码
  • 主要逻辑:5000+ 行位于 aider 目录下
  • 修改编码逻辑:2000+ 行位于 aider/coder 目录下
    • 实现不同粒度分析修改代码
    • xx_prompts.py 主要包含各种提示

4 使用方法

1
2
3
4
5
$ pip install aider-chat
$ export OPENAI_API_KEY=your-key-goes-here
$ cd 项目目录
$ aider # aider -4 调用gpt4; aider -3 调用gpt3
> /help

虽然作者提供了 Dockerfile,但工具依赖不多。如果有 Python 环境,建议直接装 aider 库。

该工具的交互设计非常好,可以设定不同模型,不同交互单位:文件或代码块;在交互界面,命令可以通过 "/" 调出,也可以直接与模型进行文本聊天,还支持语音输入。

除了以上提到的交互方式,还可以将 aider 视为一个可执行的命令,在 shell 中调用,或者通过 Python 程序调用。

5 帮助文档

  • 源码目录下的 examples 是一些使用的入门和启发用法。
  • 源码目录下的 docs 几乎包含了所有常见问题的答案。

6 常见用途

  • 批量修改
    • 批量添加测试用例
    • 批量添加注释
    • 批量添加 try/cache
    • 批量更改包名
    • 批量规范化格式(如驼峰命名)
    • 批量更改命名规则
    • 批量将功能生成 Agent
  • 自动生成和更新 README.md 文件
  • 根据需求修改当前代码
  • 示例某种框架或逻辑的实现方法
  • 代码 debug,用 run 方式运行时报错传递给模型
  • 代码重构
  • 结合代理(Agent)实现更复杂的功能(需要自行实现)
  • 生成代码地图:https://aider.chat/docs/repomap.html,代码实现:repomap.py,并将其传递给模型,模型可以提供引入其他文件的建议。