💬

GitHub PRをChatGPTにレビューしてもらおう

2023/06/09に公開

tl;dr

GitHub PRをChatGPTにレビューしてもらうGithub Actionを作ってみました。
https://github.com/kentakozuka/github-ai-review

使用方法

インストール方法

  1. リポジトリのルートディレクトリに、.github/workflowsディレクトリを作成します。その中に、ワークフローファイル(例: main.yaml)を作成します。中身はこちらを参考(コピペでも)してください。
  2. リポジトリ設定からActions > New repository secretで OPENAI_API_KEYPERSONAL_ACCESS_TOKEN を設定します。

実行方法

任意のPRで /review とコメントするだけです。PRにレビューコメントが追加されます。

やってること

この記事を参考にして作成しました。元記事ではWasmEdge + flow.network を使っていたのを、Python + Github Actionに変えています。

内部はすごく単純なのですが、

  1. PRから変更されたファイルのPatchをOpenAIのAPIを使用して、1ファイルずつレビューしてもらいます。
  2. さらに返ってきたレビューをまとめて、要約してもらいます。
  3. 最後に結果を全部まとめてPRにコメントします。
    # Iterate all patches.
    reviews_summary = ""
    review_details = ""
    files = issue.as_pull_request().get_files()
    for file in files:
        question = FILE_QUESTION_JP + file.patch[:CHAR_SOFT_LIMIT]
        print(question)

        messages = [
            SystemMessage(content=system),
            HumanMessage(content=question),
        ]
        ai_message = chat(messages)
        # For summary.
        if len(reviews_summary) < CHAR_SOFT_LIMIT:
            reviews_summary += "------\n"
            reviews_summary += ai_message.content
            reviews_summary += "\n"
        # For details.
        review_details += "\n---\n\n**{}**\n".format(file.filename)
        review_details += "{}\n".format(ai_message.content)

    # Summarize all patches.
    question = SUMMARY_SYSTEM_JP.format(reviews_summary)
    messages = [
        SystemMessage(content=system),
        HumanMessage(content=question),
    ]
    print(question)

    ai_message = chat(messages)
    resp = ai_message.content
    resp += "\n\n## Details\n\n"
    resp += review_details

    issue.create_comment(resp)

まとめ

こんな簡単にChatGPTが実装できるなんて、すごいですね。個人的に開発生産性を向上させるような使い方ができればいいなーと思っています。

Discussion