用 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,其中包含一段新的输出代码,并删除了一行注释,结果收到了如下的评审记录:

Review 1

Review 2

从结果看来,ChatGPT 对 PR 的目的进行了识别,并给出了讲解和建议。不过前面 Action 定义的语言并没有生效,应该后续还会有提升空间——或者用这个思路再做一个也是不错的想法。

另外,受到 Token 上限的影响,代码文件只能接受 4K 以下的文件,传说新的 GPT 4.0 API 能够支持更大的 Token 上限,也许就能支持更大的代码文件了。

Avatar
崔秀龙

简单,是大师的责任;我们凡夫俗子,能做到清楚就很不容易了。

comments powered by Disqus
下一页
上一页