実装ステータス: 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.tsbuildSystemPrompt(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-progemini-3.1-preview (deep think)ビジネス・アーキテクチャ reviewerビジネスインパクト・既存システム整合性・長期負債リスクcreateLlm + thinkingBudget
claude-opusclaude-opus-4-7論理・詳細 reviewer問題定義と決定の論理性・代替案評価の公平性・撤退条件の現実性createLlm(通常)
gpt-o3o3 (reasoning_effort=high)技術・体系的 reviewer技術的実現可能性・コスト試算の妥当性・完了条件の検証可能性createOSeriesLlm(temperature 不使用・effort 指定)

モデルエイリアスの正典は src/llm/gateway.tsMODELS 定数(reviewGemini / reviewClaude / reviewGpt4)。実体モデルは LiteLLM config.yamlmodel_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 })。KV bizlp:prompts:gate3-parallel-review:params で上書き可能。
  • o3(useOSeries)は temperature を渡さず reasoning_effort(既定 high / state.reviewEffort)を指定。
  • Gemini は state.thinkingBudgetbudgetTokens として渡す。

実装メモ

  • Promise.allSettled で 3 モデルを並列実行(LangGraph のグラフ分岐は使用しない)。各モデルのエラーは個別に記録し、成功分のみ集約。
  • scoring + consistency 通過後のみ実行(コスト最適化)。
  • 差し戻しはしないparallelReviewDetail を state に保存し、webhook が PR 本文に追記。
  • 全モデル失敗時は空配列 []parallelReviewDetail に入れてパイプラインを継続(fail-open)。

変更履歴

日時変更内容
2026-05-12v1.0 初版 (Phase 3 実装完了。Gemini Flash / Claude Sonnet / GPT-4o、strengths/concerns/suggestions 出力)
2026-06-01v2.0 実装同期: モデルを gemini-pro / claude-opus / gpt-o3 に刷新、出力をアノテーション(annotations[]、quote 紐付き)モデルに変更、Promise.allSettled + 全失敗時 fail-open、temperature/seed/o-series 分岐を明記