0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

プロンプトをYAMLで管理してみた

Posted at

背景・目的

前回、下記の記事で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 のユニットテスト

事前準備(ブランチを作成)

  1. ブランチを作成します
    % 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管理可能な形にします。

  1. ファイルを作成します
    % 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
    % 
    
  2. 下記の内容を実装します
    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ファイルが正しい形式で書かれているかを、自動で検証する。

  1. ファイルを作成します
    % 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
    % 
    
  2. 下記の内容を実装します
    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

  1. コミット&プッシュします
  2. PRを作成します
  3. 成功しました
    image.png
  4. マージします

動作確認

基本動作

  1. ブランチを作成します
    % git checkout -b baseline-test origin/main
    branch 'baseline-test' set up to track 'origin/main'.
    Switched to a new branch 'baseline-test'
    % 
    
  2. README.mdに修正を加えます
    % echo "" >> README.md
    
  3. CommitしPushします
  4. PRを作成します
  5. GitHub Actionsが成功すると、下記のような内容が表示されていました
    image.png

考察

今回、プロンプトを YAML に切り出すことで、より管理しやすい形にしました。今後も改善を重ねながら継続的に取り組んでいきます。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?