用 ChatGPT 评审 PR
前些天写了个脚本,用 ChatGPT 给 FloMesh 的 Pipy 项目做了个代码评审,生成的结果还挺有意思的,例如下面这段结果:
评价:
1. 代码没有明确的介绍具体的功能和作用,缺乏注释和文档说明。
2. 使用了一些不必要的注释,如版权声明和许可条款,应该将这些内容放入独立的文档中。
3. 引用了一些外部库文件,在没有说明的情况下建议在头文件中添加相关介绍。
4. 没有遵循统一的命名规范,建议遵循某种命名规范,如 Google C++ Style Guide。
5. 代码风格和排版统一,清晰易读。
改进意见:
#ifndef THREAD_HPP
#define THREAD_HPP
#include "pjs/pjs.hpp"
#include "worker-thread.hpp"
namespace pipy {
// 在代码开头添加注释,介绍文件的作用和功能
// ...
// 添加版本信息或其他相关说明
// ...
// 可以将所有依赖的外部库文件进行汇总说明
// ...
// 建议统一的命名规范,如使用 Google C++ Style Guide。
class Thread : public pjs::ObjectTemplate<Thread> {
public:
// 在函数上添加注释,说明函数的功能和参数含义
auto index() const -> int { return m_worker_thread->index(); }
private:
// 在变量上添加注释,说明变量的作用和类型
Thread(WorkerThread *worker_thread) : m_worker_thread(worker_thread) {}
WorkerThread* m_worker_thread;
friend class pjs::ObjectTemplate<Thread>;
};
} // namespace pipy
// 添加结尾注释
// ...
// 推荐加上 #endif 前的空格
#endif // THREAD_HPP
自然而然就产生了个想法——如果项目每个 PR 都能这样自动 Review 一下岂不妙哉?结果——好点子总会有人比你先想到,已经有人编写了一个 Github Action 了,于是试用了一下,记录一下这个试用过程。
首先在目标项目的设置中加入 OpenAI 的 API_KEY,也就是在项目的 Settings->Security->Secrets and variables->Actions 菜单中,加入 Repository Secret,Key 设置为 OPENAI_API_KEY
。
接下来,在 Github Action 中加入如下代码:
name: Code Review
permissions:
contents: read
pull-requests: write
on:
pull_request:
types: [opened, reopened]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: anc95/ChatGPT-CodeReview@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
LANGUAGE: Chinese
上面代码尝试在创建 PR 时候对变更内容进行评审动作。
我们尝试给项目新建一个 PR,其中包含一段新的输出代码,并删除了一行注释,结果收到了如下的评审记录:
从结果看来,ChatGPT 对 PR 的目的进行了识别,并给出了讲解和建议。不过前面 Action 定义的语言并没有生效,应该后续还会有提升空间——或者用这个思路再做一个也是不错的想法。
另外,受到 Token 上限的影响,代码文件只能接受 4K 以下的文件,传说新的 GPT 4.0 API 能够支持更大的 Token 上限,也许就能支持更大的代码文件了。