💬
GitHub PRをChatGPTにレビューしてもらおう
tl;dr
GitHub PRをChatGPTにレビューしてもらうGithub Actionを作ってみました。
使用方法
インストール方法
- リポジトリのルートディレクトリに、.github/workflowsディレクトリを作成します。その中に、ワークフローファイル(例: main.yaml)を作成します。中身はこちらを参考(コピペでも)してください。
- リポジトリ設定からActions > New repository secretで
OPENAI_API_KEY
とPERSONAL_ACCESS_TOKEN
を設定します。
実行方法
任意のPRで /review
とコメントするだけです。PRにレビューコメントが追加されます。
やってること
この記事を参考にして作成しました。元記事ではWasmEdge + flow.network を使っていたのを、Python + Github Actionに変えています。
内部はすごく単純なのですが、
- PRから変更されたファイルのPatchをOpenAIのAPIを使用して、1ファイルずつレビューしてもらいます。
- さらに返ってきたレビューをまとめて、要約してもらいます。
- 最後に結果を全部まとめて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