抛砖引玉: 介绍命令行AI编程工具aider以及emacs集成aider.el

Aider是什么

Aider 是终端中的 AI 结对编程工具。Aider 让你与大语言模型(LLMs)一起进行结对编程,编辑本地 git 仓库中的代码。你可以启动一个新项目,或者与现有的 git 仓库一起工作。Aider 最适合与 GPT-4 或 Claude 3.5 Sonnet 配合使用,并且几乎可以连接到任何 LLM,比如国产的deepseek,效果和前两者接近,价格只有GPT的1%. Aider的github页面在GitHub - Aider-AI/aider: aider is AI pair programming in your terminal 这个项目目前有接近20k star.

Aider在SWE-bench里,解决实际的coding问题上,取得了不错的成绩。

介绍Aider.el

最近cursor编辑器挺火。作为emacs的老用户,我不想仅仅因为AI就把日常编辑器emacs换成cursor。 Aider目前只有vim和vscode的插件,而Emacs在集成命令行工具这点上有着传统, 我就自己写了一个, 抛砖引玉: GitHub - tninja/aider.el: aider emacs plugin for https://github.com/paul-gauthier/aider

这个插件比直接用命令行的aider有下列优势:

  1. 提供了弹出菜单:无需记住命令。(aider-transient-menu)
  2. Emacs 中的 Git 仓库特定 aider 会话:自动识别当前文件的 Git 仓库,并为其创建新的 aider 会话。不同的 Git 仓库可以有多个 aider 会话。这样可以同时在几个rep上工作,不互相干扰
  3. 基于区域的重构支持:你可以在文件中选择一个区域(例如代码块),并请求 aider 对其进行重构。

实际上,这个插件本身大部分是用aider / aider.el来产生的。

如果您对AI辅助编程感兴趣,也和我一样不想离开emacs环境,也许您可以试试看aider以及aider.el,有任何关于aider.el的反馈和意见,请告诉我。谢谢。

24 个赞

这个看着很高级啊,会自动map整个代码仓库的上下文。

用它解决一些相对简单的编程问题,感觉还行,能节省一些精力,也挺好玩。我尝试过elisp, python, java,都能写。 还没弄明白怎么用它解决比较复杂的编程问题。

谢谢大牛的lsp-bridge,每天都在用。

1 个赞

上午才再用,aider 非常强,虽然代码生成的速度没那么快,但是,它使用思维链的方式,从代码阅读,审查,和纠正的角度,它已经接近 o1-preview

1 个赞

10月2号,o1-preview和o1-mini的api对L3级以上的用户也开放了。我尝试了用aider接了一下,感觉对代码的解释,和对Exception stack trace的解读都强了一些,代价是贵,用aider问o1-mini一个问题要花5美分。

我刚才试了一下, 在 OpenRouter 的网页上问 Claude 3.5 , 6毛一次, Aider问一次Calude 3.5 1.4元一次, DeepSeek 3分钱一次

直接用 DeepSeek 效果已经很不错

DeepSeek 主要是速度慢。

这点确实,有点慢。我再测试一下,看它会不会乱写函数。之前至少阅读完整个源代码之后,只针对有关联的代码进行分析和修改,不会跟 Cursor 一样,不时来一个全部修改,老自己添加函数(即便功能一样的函数已经存在的情况下)

Deepseek确实是慢一些 不过,它在aider的benchmark非常好 Aider LLM Leaderboards | aider

考虑到这么便宜的价格 真是可以随便用了

旧版v2的deepseek benchmark也很好 而且明显快

1 个赞

怎么让 aider.el 先生成一个 diff buffer, 而不是直接 commit ?

我想生成 diff buffer 以后, 手动 apply/drop 微调补丁后再生成 commit

确实 如果能先生成diff buffer, review之后再commit要放心一些 说实话我也不知道怎么做 aider.el 目前仅仅把命令发给aider

现在的workaround 有

  1. 调用magit log看commit 不满意的话用aider.el undo , 可以撤销commit痕迹

  2. 用architect discussion,aider会建议解决方案,同意了的话再让它改

(setq aider-args '(“–no-auto-commits” “–model” “openrouter/deepseek/deepseek-coder”))

可以加 --no-auto-commits 选项, 这样 AI 改动的代码还处于 diff 状态, 上图是我用 eaf-git 客户端review diff的方式。

这样不满意的地方可以直接撤销, 而不是每次都用 git reset 命令去操作。

2 个赞

好的 谢谢!我也去试试看

晚上用 aider 的 repo-map 修复了两个bug:

sort-tab close tab经常不生效, 需要第二次才行, aider + deepseek 分析是 dolist 里面的 kill-buffer 不是同步的, 会失败, 用 mapc 替代 dolist 后修复了。

第二个 bug 是 eaf-git 里面的 delete_hunk 一直是有问题的, 导致我只能 stage_hunk 不能根据选中的 hunk 针对性的做 delete_hunk 操作。 一顿 aider 问, aider 自动写补丁全自动搞定了。

在这之前, 如果要修复这种有逻辑关联性的bug, 我需要拷贝相关代码到 poe.com 的Web界面, 做很多描述, 现在只用把相关的文件 aider /add 后, 直接问问题就好了, 确实非常方便。

2 个赞

谢谢分享 没想到aider可以修复复杂的问题 在和aider对话的时候有什么技巧吗?

就是正常问, 让aider一直改代码, 然后配合上面的 --no-auto-commits 参数, 这样AI可以一直生成 diff 文件, 我只用审查 diff 文件做测试就好了。

如果不加上 --no-auto-commits , AI每次有方案就自己写一个补丁, 中间很多方案都是不靠谱的, 就会产生很多垃圾补丁。

3 个赞

这样与aider / deepseek的交流,是需要自己额外支付一些的么?还是可以做到免费?

我是买的 OpenRouter 的收费服务, OpenRouter 基本上提供了所有著名大模型的API, 可以自由切换。

Claude 3.5 最强, 但是聊一次 0.6 ~ 1.5 元, DeepSeek 能力可以, 就是速度是 Claude 3.5 的1/3, 但是价格是一次几分钱。

2 个赞

Deepseek的模型非常便宜 太良心了。抛开可能带来的生产力提升不说 个人认为花费少量的费用去学习和实践有潜力的新的生产力工具 是值得的