让AI自主处理拉取请求
今天,我想分享一下我使用Cline 处理整个拉取请求(PR)而自己不碰代码的经历。

今天,我想分享一下我使用Cline 处理整个拉取请求(PR)而自己不碰代码的经历。
1、规则
为了完成这个PR,我为自己设定了以下规则:
- 只允许AI编写代码。不允许编辑AI生成的代码。
- 尽可能多地使用Cline让AI处理一切。如果不起作用,则使用Copilot Chat。最后才考虑从ChatGPT的网页版本复制粘贴。
- 允许自己运行命令,如格式化代码等。(自己运行命令更快。)
我为AI选择的任务是重构任务,统一整个代码库中不同开发者实现的模拟方法。
2、环境
我使用了原生的Cline VS Code扩展。
我尝试了以下两种模型:
- vscode-lm:copilot/gpt-4
- vscode-lm:copilot/gpt-4o
代码库是一个普通的Laravel应用。
3、优点
整个PR在不碰代码的情况下完成了。
这项任务完全通过提示完成。我不确定是否可行,但Cline做到了这一点。这与Copilot不同,在Copilot中,一旦写好提示,AI就会接手处理。
AI可以处理超出编写代码的任务。
Cline能够处理各种超出读写代码范围的任务。
以下是我要求它执行的一些任务:
- 使用
ripgrep
查找重构点 - 运行测试以验证代码的正确性,并修复错误
- 格式化代码以保持一致的风格
- 从git diff生成Git提交、注释和PR描述
- 从实验期间记录的笔记中撰写博客文章(如本文!)
这些技术很有用,我计划在日常工作中使用它们。
4、缺点
最大的缺点是,老实说,感觉自己写代码更快更简单。
AI还不够聪明
这项任务相对简单,只是统一模拟方法的实现,但AI难以理解提示的意图和现有代码。它经常做出无关的更改或误解其含义。
此外,它还多次陷入无限循环,反复修复相同的错误。
另外,我不得不在提示中包含示例代码来展示正确的编写模拟方法的方式。这可能是因为许多PHP代码没有测试,所以AI缺乏足够的训练数据。
提示工程具有挑战性
与上述内容相关,需要进行提示工程才能正确传达你希望AI执行的操作。
这是我使用的提示,非常长且具体。
经过反复试验,我最终达到了这个版本。
我认为在编写这个提示所花费的时间内,我可以自己完成任务。
# 提示
在tests/文件夹中,我希望统一如何实现模拟。
# 规则
- 存在使用mock()、Mockery::mock()或$this->mock()的情况。
- 即使发现错误或改进也不要改变除mock()、Mockery::mock()或$this->mock()之外的内容。
## mock()
- 如果只有第一个参数,则保留mock()。
- 如果有匿名函数作为第二个参数用于断言,请删除第二个参数并添加相应的行。
- 模拟应如下所示,不带注释:
$mock = mock(UserRepository::class); // 创建模拟。仅使用第一个参数
$mock->shouldReceive('函数名') // 插入要模拟的函数名
->with('预期输入') // 如果适用,插入预期参数
->andReturn('预期输出') // 如果适用,插入预期输出
->once();
## Mockery::mock()
- 更改为使用mock()并对其做相同操作
## $this->mock()
- 更改为使用mock()
- 添加app()->instance()/app()->bind()将模拟绑定到被模拟的类
- 尽量使用app()->instance()。但在实例化需要传递参数时,使用app()->bind()并传递一个匿名函数作为第二个参数。
# 上下文
- 这是一个Laravel应用,使用Pest作为测试库。
- 它使用Mockery进行模拟。
- 你可以通过运行`make test-unit && make test-feature`来验证测试是否通过。
- 你可以通过运行以下命令检查$this->mock或Mockery::mock的使用情况:
+ rg '\$this->mock' tests/
+ rg Mockery::mock tests/
代码生成相当慢
使用GPT-4时,实际的代码差异呈现花了相当长的时间。GPT-4o比GPT-4快一些,但有时也会停止生成代码。
另外,当文件本身很大时,即使只修改一行,AI也会生成整个文件。因此,在我的机器上,编辑500多行的文件失败了。
因此,在修改大文件的一部分时,有时使用Copilot Chat,它可以只显示差异,会更快。
这些点在正常编码时仍然令人沮丧,但我相信随着未来模型的改进,这些问题将会得到解决。
5、附录
以下是一些我发现有用的提示。
创建提交
通过运行`git — no-pager diff — staged`查看暂存更改,并使用适当的提交信息提交它。
第一行要简洁,如有必要,可以在换行后添加详细信息
当让Cline读取git命令结果时,使用— no-pager
选项以避免手动滚动命令结果。
创建PR详情
在GitHub上创建PR时,通常有一个项目模板,这个提示可以自动填充它。
比较当前分支和master分支之间的差异,并填写此PR的模板。
# 标题
此PR的标题
# 动机
此PR的动机
# 描述
PR的详细信息。
6、结束语
总体而言,我发现它比我预期的更有用。
虽然还有一些令人沮丧的地方,但我相信随着未来更快更智能的模型出现,AI编程可能会变得主流。
祝你愉快地编码(或提示)!
原文链接:My Experience of Letting AI Handle a Whole PR Without Touching the Code
汇智网翻译整理,转载请标明出处
