背景
GithubのプルリクやGitlabのMerge Requestを書くのって正直面倒ですよね。AIにやってもらいましょう。AWS BedrockのClaude2であればトークン長が100kらしいので大きめの入力もできるのが嬉しいですね。ChatGPTだと少し大きくなるとすぐに溢れちゃって実用的ではなかったのですが、こちらはいけそうな雰囲気。とりあえずやってみました。
ソースコード
以下はPythonで記述されたスクリプトです。このスクリプトはGitの差分(diff)を取得し、それをClaude2に送ります。Claude2はその差分から変更点をまとめ、標準出力として返します。
import json
import sys
import boto3
def request_to_claude2(prompt: str):
client = boto3.client("bedrock-runtime", region_name="us-east-1")
body = {
"prompt": prompt,
"max_tokens_to_sample": 2048,
"top_p": 0.999,
"top_k": 250,
"temperature": 1,
}
response = client.invoke_model(modelId="anthropic.claude-v2", body=json.dumps(body))
body = response["body"].readlines()
completion = json.loads(body[0].decode("utf-8"))["completion"]
return completion
def main():
# 標準入力を取得する
diff = sys.stdin.read()
prompt = f"""
Human: 下記の変更のMerge Requestを作成します。変更点をまとめてください。
フォーマットは下記のように記載してください。
フォーマット:
変更点:
- 〇〇を追加
- 〇〇を変更
- 〇〇を追加
- 〇〇を削除
変更:
{diff}
Assistant: """
print(request_to_claude2(prompt))
if __name__ == "__main__":
main()
実行結果
スクリプトを実行すると、以下のような出力が得られます。
$ git diff master | python explain_diff.py
変更点:
- admins/urls.pyにDebugViewSetを追加
- admins/views.pyにDebugViewSetを追加
- get_timezoneアクションを追加:タイムゾーン設定を取得するAPI
- DebugViewSetでタイムゾーン設定の確認APIを追加
完璧じゃないけけどたたき台としては良さそう。
コードレビューもいけるのでは?
と思ってやってみたのですが、存在しないコードをレビューし始めてしまったのでこちらは断念しました。ChatGPT4に入力できたら良いんですけどね。