之前在使用AI辅助编程的时候,在自己手工编程 / AI编程之间切换,这对我而言,是两种不同的思维模式,容易手忙脚乱,而且要特别小心AI生成代码的正确性。
思考了一下利用AI辅助编程的流程,目前的想法大概是
生成新代码 / 修改现有功能
生成测试 / 修改并运行测试 / 确保AI生成的代码是对的
重构代码和测试
每次AI生成的代码不要太多,小步前进,保证每一步走稳了
具体写在这里
AI辅助编程是个比较新的话题,也许现在也没有统一成熟的方法论。如果各位有不同看法或者建议,或者有新的想法,请不吝赐教,谢谢。
2 个赞
可以分享一下工作流,aider很多人不会用,哈哈哈
yibie
2025 年2 月 3 日 06:52
3
我把 README 中的相关章节翻译了一下:
我使用aider.el进行个人开发的经验分享。以下仅为个人经验,你可能会有不同或更好的使用方法。
功能开发
启动Aider会话: 运行命令“aider-run-aider”启动与当前git仓库相关的Aider会话。此命令将会话与项目上下文关联起来。
添加文件: 使用命令“aider-add-current-file”或“aider-add-files-in-current-window”将相关文件添加到会话中。这为Aider提供额外的上下文信息。
代码修改: 这可能包括添加新代码或修改现有代码。
添加新代码(使用单行注释实现): 假设遇到以下Python代码片段:
# TODO: Implement a function that checks if a number is prime
将光标置于TODO注释行,运行“aider-implement-todo”将仅发送该内联注释给Aider。Aider可能会生成修改后的代码,例如is_prime
函数的完整实现,同时保留现有代码。例如,Aider可能生成:
def is_prime(n):
if n <= 1:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
此示例演示了aider-implement-todo
如何帮助添加新代码。(此命令也可能对某些文档任务有用。) 如果建议的更改不完全令人满意,可以选择拒绝(例如,输入N)。之后,可以使用“Ask Question”命令(或在Aider会话缓冲区中使用/ask)请求更详细指导的修改。获得可接受的建议后,可以使用“Go Ahead”命令(或在Aider会话缓冲区中使用“go ahead”)进行确认。
修改现有代码(函数、类或代码块):
a. 如果只需要修改代码的一部分,可以选择相关区域;否则,将光标放在目标函数或类中即可。
b. 执行“aider-function-or-region-refactor”。
c. 出现提示时,提供清晰的更改说明(例如,“将变量‘temp’重命名为‘result’”或“将函数设为静态”)。
d. 然后将生成包含这些建议的修改后的代码版本,同时保留整体结构。
e. 可以查看输出,如果需要进一步改进,可以使用“Ask Question”进行额外调整,然后使用“Go Ahead”确认,直到达到预期结果。
注意:aider-architect-discussion
和aider-code-change
是可用的替代方案,但它们可能不如上述命令上下文敏感。
生成测试: 建议使用单元测试命令(如“aider-write-unit-test”和“aider-fix-failing-test-under-cursor”)验证并迭代改进功能。虽然AI生成的代码可以作为有用的起点,但它有时可能会引入细微的问题。在集成更改之前和之后运行测试,可以确保每个增量改进都得到正确验证。建议在每次更改后执行完整的测试套件,以便尽早发现任何问题。(顺便提一句,目前使用projectile函数在主代码和测试代码之间切换并将它们添加到会话中——但进一步改进以无缝地包含测试代码始终是受欢迎的。)
代码和测试重构: 最后,可以根据需要进一步重构AI生成的代码和测试——无论是通过额外的提示还是手动——以最好地满足项目的需要。
7 个赞
这个README怎么把用法放在installation前面的 通常installation放第一,个人感觉也是这样比较好
1 个赞
哦… 在别人有意愿安装之前,先解释,在aider提供的命令行操作之上,这个library提供了什么额外的价值?如果别人觉得有用,再装。
菜单操作,少敲几个按键,直接在代码上操作,不用切换; 自动管理git repo aider session.
aider.el会把emacs编辑的上下文发给aider, 比如,现在关心哪个函数或者类?当前选定了哪些内容?这会让用户少敲键盘。
aider是核心的引擎,这个软件包针对的是程序员关心的日常应用层面的问题。比如,如何新增/修改代码; 如何测试AI代码的正确性; 如何阅读别人的代码; 以及以后想加强的,如何debug exception.
你说的也有道理。installation之前的部分太长了。
update
Added both pros and cons.
能具体说一下,哪些地方不如意,想要有哪些功能吗?谢谢
开个浏览器打开deepseek, 再开个emacs打开python文件,空的或者已经有代码的都可以
然后告诉deepseek干活,仔细检查deepseek表述的逻辑和实现的代码
放到python文件里面运行测试,发现问题,再告诉deepseek去修改
如此循环,直到满意为止,然后提交代码
我今天就是这么干的
我查了一下aider, 说有可能和deepseek集成,但我不觉得aider这个工具(工具不是AI, 只是桥梁)多重要,驾驭好deepseek,合作高效高质的生产出代码才是最重要的(一个编程高手在AI的帮助下产出提高10倍就最好了)
不知道有其他的AI比deepseek写代码更好么,暂时没有试过其他的AI, deepseek还凑合(写个代码犯了不少错,当然它比初级程序员强,而且完全没有脾气,怎么折腾都可以),如果自己不了解相关的开发知识,完全靠它肯定不行
所以,工具可以从代码评审,回归测试这些方面起一些辅助作用吧。
1 个赞
感谢分享 非常同意AI生成的代码需要测试 对于比较严肃的长期的项目 如果能把它们放进单元测试套件 最好能在CI/CD里自动触发 一是可以经常运行 未来也可以保护代码功能被不小心的改动破坏
AI写代码 写测试都蛮好 省力 之后自己适当改改也不费事 最近觉得它重构代码的能力也在提高
目前对让AI review diff不觉得很理想 有些明显的问题它找不出来 有可能是我用的prompt不太好
Deepseek性价比应该最好
代码层面应该是 claude sonnet 效果最好。
使用工具的目的,一是减少复制粘贴这一类的手工操作;二是多文件的处理,网页不太现实。
目前 AI 编程做得最好应该还是 cursor ,有时间可以试用一下。
同意代码测试,目前 AI 幻觉还是很多,只是能力的放大器。
2 个赞
现在主要用它来生成一些代码片断, 让它学习自己的库, 以及完整理解自己的工程还是有点难度, 等AI继续进化