背景・目的
前回、下記の記事でBedrockのClaudeモデルでPRの差分を自動レビューし、結果をGitHubに投稿する仕組みを試しました。
しかし、現状ではプロンプトがハードコードされており、修正や改善を行うたびに品質が向上する保証がなく、レビュー品質が退行するリスクを抱えています。
また、誰がいつどのようにプロンプトを変更したかを追跡できず、再現性や透明性も不足しています。
上記の課題を解決するため、今回、プロンプトをYAMLとしてリポジトリにIaC化し、バージョン管理可能な「仕様」として扱ってみます。
実践
今回、前回作成した構成を基に追記・変更します。
.github/
├── scripts/
│ └── bedrock_review.py # (既存)本番レビュー実行スクリプト
└── workflows/
├── bedrock-pr-review.yml # (既存)PRレビュー用ワークフロー
├── bedrock-smoke.yml # (既存)疎通確認ワークフロー
├── test.yml # (既存)ユニットテストワークフロー
└── prompt-regression.yml # (新規)プロンプトIaCファイルの変更を検知するワークフロー
prompts/
└── code_review.claude.yml # (新規)プロンプト定義をYAML化(IaC化・バージョン管理可能に)
tests/
└── test_bedrock_review.py # (既存)bedrock_review.py のユニットテスト
事前準備(ブランチを作成)
- ブランチを作成します
% git checkout -b feat/prompt-iac origin/main branch 'feat/prompt-iac' set up to track 'origin/main'. Switched to a new branch 'feat/prompt-iac' %
プロンプト定義ファイルを追加
プロンプトをコード(IaC)として扱うための仕様書を作成します。
以前は、ハードコードしてましたが、「観点・出力形式・入力定義」を切り出してGit管理可能な形にします。
- ファイルを作成します
% pwd /Users/xxxx/git/github-action-bedrock-example/prompts % ls -l total 0 -rw-r--r--@ 1 XXXX XXXX 0 8 31 13:27 code_review.claude.yml %
- 下記の内容を実装します
version: 1.0.0 model: bedrock.claude-3-5-sonnet-20240620 owner: platform-ai targets: - code_review guidelines: - セキュリティ - 正確性 - 可読性 - 性能 - テスト style: format: markdown sections: [Summary, Findings, Suggestions, Risk] inputs: - name: diff required: true
IaC用のチェック用ワークフローを追加
プロンプトをIaC化したYAMLファイルが正しい形式で書かれているかを、自動で検証する。
- ファイルを作成します
% pwd /Users/xxxx/git/github-action-bedrock-example/.github/workflows % ls -l prompt-regression.yml -rw-r--r--@ 1 XXXX XXXX 0 8 31 13:31 prompt-regression.yml %
- 下記の内容を実装します
name: Prompt Regression (IaC Check) on: pull_request: paths: - "prompts/**" jobs: yaml-validate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.11" - run: pip install yamllint - name: Lint prompts YAML run: yamllint prompts/code_review.claude.yml
コミット〜PR
動作確認
基本動作
- ブランチを作成します
% git checkout -b baseline-test origin/main branch 'baseline-test' set up to track 'origin/main'. Switched to a new branch 'baseline-test' %
- README.mdに修正を加えます
% echo "" >> README.md
- CommitしPushします
- PRを作成します
- GitHub Actionsが成功すると、下記のような内容が表示されていました
考察
今回、プロンプトを YAML に切り出すことで、より管理しやすい形にしました。今後も改善を重ねながら継続的に取り組んでいきます。
参考