279 Views
February 06, 25
スライド概要
GitHub Actions × RAGでコードレビューの検証の結果 2025.01.31 〜Classmethod AI Talks(CATs) 新年生成AI LT大会2025〜 Solvio株式会社エンジニア 中村祥
⾃⼰紹介 中村祥 所属:Solvio株式会社 普段の業務:⽣成AIやRAGを利⽤したシステム構築 最近のアップデート:初めてITイベントにでます!! ブログ:Zenn(sho__) © solvio, inc. 2
コードのレビューをもらう‧する際に不便を感じたことはないですか?? © solvio, inc. 3
背景や現状の課題 コードレビューの現状 - レビューに⼯数がかかってしまう。 - コード規約を徹底するのが難しい - レビュアーごとに指摘基準がバラバラ - ジュニアエンジニアが規約を覚えるのに時間がかかる 解決したい問題 - レビュアーの⼯数軽減 - レビュー内容の属⼈性の減少 - 規約の⼀貫した適⽤ - 本質的なロジックレビューに集中できるように © solvio, inc. 4
課題解決のために今回作成したシステムの全体フロー © solvio, inc. 5
RAGとは?? ⾃社に蓄積された業務⽂書‧規定などの社内情報、外部の最新情報を活 ⽤する⼿段として、データを検索して情報を抽出し、それに基づいて⼤ 規模⾔語モデル(LLM)に回答させる⽅法のことです。 普通LLMが回答できないことを回答できるようにするための⼿法 © solvio, inc. 6
Reusable Workflowの構成(呼び出し元) このWorkflowにて⾏っていること 1.リポジトリを checkout 2.Git差分と周辺コードを取得 (git diff origin/main…HEAD) 3.Secrets(OPENAI_API_KEY, GITHUB_TOKEN) をPythonに渡す 4.Pythonスクリプトで処理開始 • レビュー対象RepoからこのWorkflowを呼び出しレビューの実⾏ • 事前にSecretsにAPIキー設定必須 • GitHub Token も使ってPRにコメント投稿 Workflow⼀部抜粋 © solvio, inc. 7
メインスクリプト メインスクリプトにて⾏っていること 1.取得したdiffとその周辺コードをもとに関連 コード規約を取得 2. コード規約とdiffを⼊⼒としてLLMにてレ ビュー作成 3. 総合判断としてカテゴライズ Approve / Requested Changes /Comment 4.GitHubへレビュー投稿 © solvio, inc. メインスクリプト⼀部抜粋 8
プロンプトサンプル ⼊⼒データとして - コード規約 - コード差分とその周辺 を受け取り、その情報からコードをレビュー をするようなプロンプト プロンプト⼀部抜粋 © solvio, inc. 9
サンプルコード規約 今回使⽤するコード規約に関しては、GPTに 出⼒してもらい、RAGの参照データとして⼊ ⼒しておきます プロンプト⼀部抜粋 © solvio, inc. 10
実際のレビュー © solvio, inc. 11
実際のレビュー レビュー対象 - 5つのファイルでのコード変更 - ⾔語に関してはPythonを利⽤している レビューの内容 - Approve/Requested changes/Commentの分類 - どのコード規約を参照して回答しているか - 何故修正が必要なのか - 修正案の提⽰ © solvio, inc. 実際のレビュー(⼀部抜粋) 12
実際のレビュー 【コメントの記載忘れ】 関数の説明をせずに怒られてしまいました、、 【機密情報のハードコーディング】 FrontendのURLハードコーディングしてしまって Requested Changesに、、 © solvio, inc. 実際のレビュー(⼀部抜粋) 13
現状の評価(Good Points) 【コスト】 1PRに対して5円程度(5ファイルでの変更、IN:4000 / OUT:1000 / TOTAL:5000) ⇩ エンジニアが⾏う際の⼈件費に⽐べるとコスパ◎ 【時間】 1分前後 ⇩ ⼈間が⾏う際に20分だとしても⼤幅減少(参考) レビューが早いのでエンジニアは早期対応→効率化 【規約の網羅性】 体感ですとかなり網羅している ⇩ ⼈間が⾏うと⾒落としが存在する点の改善 © solvio, inc. 14
現状の評価(Negative Poins) 【変更点が多い時の挙動】 コードが多くなった時に全体を通したコードができていないことがある ⇩ Diffごとにレビューするような仕組みへの変更 【⾔語に対する精度】 Python以外の⾔語に対する精度が変わる可能性がある ⇩ ⾔語ごとに使⽤するモデルの変更 【不明なレビュー】 レビューの際に関係ないコード規約を参照している ⇩ 抽出したコード規約を評価するシステムの導⼊ © solvio, inc. 15
今後の展望 - ⾃動修正PR: - AIが出した修正案にて⾃動PR提出 - 教育⽤システムとしての⽅向 - 新卒‧未経験エンジニア向けの「AIコードメンター」システム化 - セキュリティ対策 - OSSのLLMを使⽤することでのセキュリティ強化 © solvio, inc. 16