就是正常问, 让aider一直改代码, 然后配合上面的 --no-auto-commits 参数, 这样AI可以一直生成 diff 文件, 我只用审查 diff 文件做测试就好了。
如果不加上 --no-auto-commits , AI每次有方案就自己写一个补丁, 中间很多方案都是不靠谱的, 就会产生很多垃圾补丁。
就是正常问, 让aider一直改代码, 然后配合上面的 --no-auto-commits 参数, 这样AI可以一直生成 diff 文件, 我只用审查 diff 文件做测试就好了。
如果不加上 --no-auto-commits , AI每次有方案就自己写一个补丁, 中间很多方案都是不靠谱的, 就会产生很多垃圾补丁。
这样与aider / deepseek的交流,是需要自己额外支付一些的么?还是可以做到免费?
我是买的 OpenRouter 的收费服务, OpenRouter 基本上提供了所有著名大模型的API, 可以自由切换。
Claude 3.5 最强, 但是聊一次 0.6 ~ 1.5 元, DeepSeek 能力可以, 就是速度是 Claude 3.5 的1/3, 但是价格是一次几分钱。
Deepseek的模型非常便宜 太良心了。抛开可能带来的生产力提升不说 个人认为花费少量的费用去学习和实践有潜力的新的生产力工具 是值得的
嗯,看了老猫可以用来debug这么复杂的逻辑,觉得可以试试了。
Deepseek 的问题就是推理有点太慢了,可能和国内公司被卡脖子用不了很好的 GPU 有关系。有条件注册外网账号的话、可以试一下用 groq 的 llama 3.1,完全免费,而且速度极快,每秒 300+ tokens,但是高峰期限流。国内和美国有12小时时差,因此可以错峰出行。此外也可以考虑 fireworks 的 llama 模型,速度很快;每秒 100+ tokens,而且价格也非常便宜(72b 模型每百万 token 0.9刀,405b 模型每百万token 3刀)
还有一个选项就是 deepinfra 的 Qwen2.5,deepinfra 的推理速度要明显比 fireworks 和 groq 慢一些,所以不建议在 deepinfra 上用 llama。但是可以用国产的 qwen 模型如果有兴趣的话。也很便宜,每百万 token 0.35 刀。
加了两个功能:
aider-batch-add-dired-marked-files:用户可以在 dired
缓冲区中标记多个文件(也可以是 find-name-dired
的输出缓冲区),然后调用此函数批量添加多个文件。一个一个加文件有些麻烦。
aider-ask-question-under-cursor:个人觉得加入文件后和aider交互询问问题(/ask)很有用,它会给出启发性建议,但并不直接修改代码。所以我加了这个函数,用户可以在某个文件,比如/aider.txt中写下想问aider的问题,并调用此命令将光标下那一行问题发送到aider session并观看回答。如果回答有用处,可以把它粘贴回aider.txt里留做笔记。如果回答不满意,可以迅速在aider.txt里修改问题,再用这个命令发过去。
/add 可以同时添加多个文件吗? 这样就可以不用 dolist 啦
确实。改成一行/add 添加多个文件了。同时这个生成的命令可以保留下来,下次操作的时候很容易add需要的文件列表。
基于这个想法,进一步增加了两个函数aider-send-line-under-cursor, 和aider-send-paragraph,它们用于把当前光标下的命令发送进aider buffer (比如先增加一批文件,然后询问关于这些文件的问题?),从而命令编辑可以在单独的文件里(比如.aider),有利于reproducibility.
可以用treesit提取当前函数做重构,可以看我的mind-wave实现,一般重构函数更方便,不需要复制
我对用emacs做重构实在是有些迷茫 特别是python语言 Elpy 带的重构功能很有限 用大模型做重构不能保证语义完全相同 得睁大眼睛看 完全不能像IntelliJ 那样所随意重构 treesit 可以做python语言的重构吗
我的意思是用treesit来提取当前光标函数内容发给AI
明白了 最近发现和aider说 我需要重构xx函数 他好像就能认识 那个选择区域重构的本意是让aider处理某个冗长函数里的一小段 如果不说明改哪个函数 他可能会改错
厉害啊,这样都可以搞!Emacs真是与时俱进!
(defun eaf-file-manager-send-files-to-aider ()
(interactive)
(let ((files (eaf-call-sync "execute_function" eaf--buffer-id "get_mark_file_names")))
(if files
(let ((command (concat "/add " (mapconcat 'expand-file-name files " "))))
(aider--send-command command))
(message "No files marked in EAF file manager."))))
(eaf-bind-key eaf-file-manager-send-files-to-aider "s" eaf-file-manager-keybinding)
给 EAF file manager 也加了一个函数。
想起来了, Aider这玩意是自带 tree-sitter repo-map 的, 你只用说名字, 它会主动要文件源码的, 还不习惯这么高级的玩法。
有没有人分享一下具体的用法,一个是能不能展示 diff 而不是直接修改了代码。另外一个是对话内容代码好像不能高亮?
前面 manateelazycat大牛 找出–no-auto-commits这样它就不自动commit,不过还是会改文件,但是不commit.
或者就让它产生commit,也容易看出改了啥,不喜欢就undo; 再或用/architect跟他讲,他会先给出方案,同意了他才继续改下去。
aider session代码高亮的话,确实aider在命令行下面的版本是可以高亮的…
emacs里面这个现在用的是comint buffer,默认设置高亮就没了。
我尝试了chatgpt建议的方案如下,好像不管用
(require 'ansi-color) (add-hook 'comint-output-filter-functions 'ansi-color-process-output) (add-hook 'comint-mode-hook 'ansi-color-for-comint-mode-on)
不过,在emacs里用term, 然后运行aider的话,结果是能highlight的
manateelazycat有办法吗?我的emacs lisp经验实在不够,要是有办法,请告诉我。谢谢。