Gate 3: 並列レビュー プロンプト設計ドキュメント (v2.0)
実装ステータス: Phase 3 完了 (2026-05-12) / ADR-0033 でモデル刷新 実装ファイル:
drp/src/nodes/parallel_review.tsモデル:gemini-pro/claude-opus/gpt-o3(3 モデル並列、LiteLLM Gateway 経由) 差し戻し: なし(情報提供型 —parallelReviewDetailを PR 本文に追記) ノード挙動仕様: nodes/07_parallel_review.md プロンプト本文 SSoT:parallel_review.ts内buildSystemPrompt(role, focus)(KV ロードはgate3-parallel-review:paramsのみ。プロンプト本文は inline 固定)
⚠️ v1.0 からの変更: モデル名(Gemini Flash / Claude Sonnet / GPT-4o)と出力スキーマ(
strengths/concerns/suggestions)は旧版の記述。現行はモデルを gemini-pro / claude-opus / gpt-o3 に刷新し、出力を アノテーション(annotations[]、引用紐付き)モデルに変更済み。本ドキュメントは現行実装に同期(v2.0)。
目的
scoring (Gate 4) と consistency (Gate 2) を通過した ADR に対し、3 つの異なるモデルが専門視点でレビューし、ADR 本文中の該当箇所を引用したアノテーションを生成する。人間レビュアー(代表取締役)が多角的な視点を得やすくすることが目的。
3 モデルの役割分担
| モデル(エイリアス) | 実体(参考) | 役割 | 重点観点 | 呼び出し方式 |
|---|---|---|---|---|
gemini-pro | gemini-3.1-preview (deep think) | ビジネス・アーキテクチャ reviewer | ビジネスインパクト・既存システム整合性・長期負債リスク | createLlm + thinkingBudget |
claude-opus | claude-opus-4-7 | 論理・詳細 reviewer | 問題定義と決定の論理性・代替案評価の公平性・撤退条件の現実性 | createLlm(通常) |
gpt-o3 | o3 (reasoning_effort=high) | 技術・体系的 reviewer | 技術的実現可能性・コスト試算の妥当性・完了条件の検証可能性 | createOSeriesLlm(temperature 不使用・effort 指定) |
モデルエイリアスの正典は
src/llm/gateway.tsのMODELS定数(reviewGemini/reviewClaude/reviewGpt4)。実体モデルは LiteLLMconfig.yamlのmodel_nameと一致させる。
System Prompt — 共通構造(role / focus は各モデルで差し替え)
buildSystemPrompt(role, focus) で生成(parallel_review.ts):
あなたは厳格な {role} である。提示された ADR ドラフトを以下の観点で精査し、
アノテーション(注釈)のリストとして JSON のみを返せ。
[レビュー観点]
{focus}
[アノテーション作成ルール]
1. quote には ADR 本文中に実際に存在する文字列を正確に引用すること(見出し行の引用も可)。
2. 特定箇所に紐付けられないコメントは quote を "#overall" とすること。
3. type は "strength"(優れた点)/ "concern"(懸念・不足)/ "suggestion"(改善提案)のいずれか。
4. comment は 1〜2 文。concern・suggestion は「なぜそれが問題か / 改善になるか」を必ず含める。
5. strength: 1〜3 件、concern: 2〜5 件、suggestion: 2〜4 件 を目安とする。
6. 合格点の ADR でも批判的な視点を失わない。「良い ADR です」のみの回答は禁止。
7. ドメイン固有の落とし穴(GAS の実行時制限・監査要件・並行処理等)も見落とさないこと。
[出力ルール]
- JSON のみを出力。前置き・解説・コードブロックの ``` も禁止。
[出力フォーマット]
{
"annotations": [
{ "quote": "ADR 本文から引用した文字列(または #overall)",
"type": "strength" | "concern" | "suggestion",
"comment": "コメント本文(1〜2文)" }
]
}
Gemini の focus
ビジネスインパクトとアーキテクチャ整合性の観点からレビューせよ。
- この決定が事業・ユーザー・チームにどう影響するか
- 既存システム全体との整合性・依存関係
- 半年後・1 年後の負債化リスク
Claude の focus
論理的一貫性と記述の詳細さの観点からレビューせよ。
- 問題定義と決定の論理的つながり
- 代替案の比較評価の妥当性(評価軸は公平か)
- 撤退条件・ロールバック手順の現実性
o3 の focus
技術的実現可能性と体系的網羅性の観点からレビューせよ。
- 実装難易度・コスト試算の妥当性
- 完了条件の検証可能性(観測できる指標か)
- 見落とされている技術的リスク・エッジケース
State への出力(parallelReviewDetail)
3 モデルの結果は { label, annotations } の配列として JSON 文字列化され、parallelReviewDetail に格納される。webhook がこれを PR 本文の該当箇所注釈として展開する。
[
{ "label": "Gemini", "annotations": [ { "quote": "...", "type": "concern", "comment": "..." } ] },
{ "label": "Claude", "annotations": [ ... ] },
{ "label": "o3", "annotations": [ ... ] }
]
label は実行順に Gemini / Claude / o3 固定。
パラメータ
loadLlmParams(env, 'gate3-parallel-review', { temperature: 0.5, seed: 42 })。KVbizlp:prompts:gate3-parallel-review:paramsで上書き可能。- o3(
useOSeries)は temperature を渡さずreasoning_effort(既定high/state.reviewEffort)を指定。 - Gemini は
state.thinkingBudgetをbudgetTokensとして渡す。
実装メモ
Promise.allSettledで 3 モデルを並列実行(LangGraph のグラフ分岐は使用しない)。各モデルのエラーは個別に記録し、成功分のみ集約。- scoring + consistency 通過後のみ実行(コスト最適化)。
- 差し戻しはしない。
parallelReviewDetailを state に保存し、webhook が PR 本文に追記。 - 全モデル失敗時は空配列
[]をparallelReviewDetailに入れてパイプラインを継続(fail-open)。
変更履歴
| 日時 | 変更内容 |
|---|---|
| 2026-05-12 | v1.0 初版 (Phase 3 実装完了。Gemini Flash / Claude Sonnet / GPT-4o、strengths/concerns/suggestions 出力) |
| 2026-06-01 | v2.0 実装同期: モデルを gemini-pro / claude-opus / gpt-o3 に刷新、出力をアノテーション(annotations[]、quote 紐付き)モデルに変更、Promise.allSettled + 全失敗時 fail-open、temperature/seed/o-series 分岐を明記 |