探讨如何用 AI 工具自动生成高质量 commit message,解决开发者常见的信息混乱问题,提升代码协作效率。
在我颇为精彩的 10 年开发生涯中,见过一些糟糕至极的 commit message。不过,我并不责怪开发者,因为执行 git commit 时,确实很难回想起自己刚刚做了什么。
图片使用 Midjourney 生成。
在这个「OpenAI 九日谈」系列中,我会研究一些 AI 项目及其代码,帮助大家揭开 AI 项目开发的神秘面纱,让所有开发者都能理解如何构建由 AI 驱动的项目。
使用 OpenSauced 发现更多 AI 项目。
结束了一天高效的编码工作后,我最不想做的事情,就是翻遍 git diff,再费力弄清楚自己到底改了什么。我很喜欢 Nutlope/aicommits。
Aicommits 是一个使用 AI 为你编写 git commit message 的 CLI。在我的「OpenAI 九日谈」系列中,你会经常看到来自 @nutlope 的项目。他一直在推出很酷的项目,并在 Twitter 上分享它们。
本文主要关注代码中与 AI 有关的部分。不过,当我打开 GitHub 仓库时,看到项目居然使用了 TABS,这着实让我吃了一惊——开玩笑的。真正吸引我的是这个 CLI 工具所使用的 cleye,名字起得也很巧妙。我以前也构建过几个 CLI,而 cleye 正是 aicommits 用来实现命令行交互的工具。以后我会深入研究 cleye,或许还会用它做点东西。
如果你想了解 CLI 的具体实现,可以快速浏览一下 src/cli.ts。
// src/cli.ts
const request = https.request({
port: 443,
hostname: 'api.openai.com',
path: '/v1/completions',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': postContent.length,
Authorization: `Bearer ${apiKey}`,
},
...
到目前为止,我还没有使用 OpenAI 构建过任何东西,但这是一个非常清晰的示例,展示了开发者可以如何着手接入它。
接着查看 src/utils/openai.ts 中的代码,可以看到它调用了 OpenAI,并使用 /v1/completions 路径。根据 README 的说明,这里使用的不是 ChatGPT completions,而是常规的 GTP-3 text completions。
完成 REST 调用后,代码对响应进行了一些清理,并使用了这个巧妙的错误检查逻辑。由于 OpenAI 经常宕机,服务器负载也时常过高,这样的处理很有必要。
// src/utils/openai.ts
if (response.statusCode === 500) {
errorMessage += '; Check the API status: https://status.openai.com';
}
最后,再来看一下 createCompletion 函数,这里才是真正创造魔法的地方。相比阅读 OpenAI 文档,我发现这段代码更容易理解,因为那份文档让我感觉有些无从下手。真希望文档提供搜索功能(为什么它没有搜索功能?)。
我在下面留下了注释,说明每一行代码的作用。
// src/utils/openai.ts
const completion = await createCompletion(apiKey, {
model, // text-davinci-003 - made for longer output, and consistent instruction
prompt, // promptTemplate provided by nutlope
temperature: 0.7, // higher the number, the more random the output
top_p: 1, // like temperature but different results
frequency_penalty: 0, // decreasing the model's likelihood of repeating the same line
presence_penalty: 0, // increasing the model's likelihood of talking about new topics
max_tokens: 200, // how much will this cost you?
stream: false, // partial message sending is off
n: completions, // How many chat completion choices to generate for each input message
});
还有很多内容值得深入研究,但剩下的部分就留给你自己查看了。我确实推荐在本地安装 aicommits,亲自试用一下。只需记得注册 OpenAI,并添加你的 token。
如果文中有需要纠正的地方,或者你对这段代码有什么见解,请留言评论。我很享受梳理这段代码并了解其工作原理的过程。感谢 Nutlope 与我们分享这个项目,也别忘了向上游项目贡献代码。Open Source FTW!
另外,如果你也有使用 OpenAI 的项目,请在评论区留下链接。我很乐意研究一下,并将它收录进我的「OpenAI 九日谈」系列。
如需采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。