Prompt Chaining:複雑なタスクを分割統治するプロンプト設計術
1つの巨大なプロンプトではなく、複数の小さなプロンプトを連鎖させて複雑なタスクを確実にこなす。Prompt Chainingの設計パターンと実装例を解説します。
Prompt Chainingとは
Prompt Chaining(プロンプトチェイニング)は、複雑なタスクを複数の小さなサブタスクに分解し、前のプロンプトの出力を次のプロンプトの入力として連鎖させるテクニックです。1つの巨大で複雑なプロンプトを書く代わりに、明確な責務を持つ小さなプロンプトのパイプラインを構築します。
ソフトウェアエンジニアリングにおける「関数の分割」や「パイプラインパターン」と本質的に同じ考え方です。各ステップが単一責務を持ち、入出力が明確であるため、デバッグ・テスト・改善が容易になります。
なぜPrompt Chainingが必要か
LLMに1つのプロンプトで多くのことを要求すると、以下の問題が発生します。
- 指示の見落とし:長い指示の中で一部が無視される
- 品質の低下:複数の責務を同時に処理するため、各タスクの精度が落ちる
- デバッグの困難さ:どのステップで問題が起きたか特定しにくい
- 再利用性の低さ:一部を変更すると全体に影響が波及する
Prompt Chainingはこれらの問題を解決します。各ステップが独立しているため、透明性、制御可能性、信頼性が向上します。
4つの基本パターン
1. Sequential Chaining(逐次連鎖)
最も基本的なパターン。出力をそのまま次の入力に渡します。
ステップ1 → ステップ2 → ステップ3 → 最終出力
2. Conditional Chaining(条件分岐連鎖)
前のステップの出力に応じて、次のステップを切り替えます。
ステップ1 → [条件判定] → ステップ2A or ステップ2B → ステップ3
3. Loop Chaining(反復連鎖)
品質が基準を満たすまで、生成と評価を繰り返します。
生成 → 評価 → [基準未達なら] → 生成(フィードバック付き) → 評価 → ...
4. Fan-out / Fan-in(並行展開・統合)
1つの入力から複数の並行処理を走らせ、結果を統合します。
入力 → [並行] ステップA, ステップB, ステップC → 統合 → 最終出力
実践:プロンプト例
例1:ブログ記事作成パイプライン(Sequential)
4ステップのチェインで高品質な記事を生成します。
ステップ1:アウトライン生成
以下のテーマについて、SEOを意識したブログ記事のアウトラインを作成してください。
テーマ:「TypeScript初心者が最初に知るべき型システムの基礎」
対象読者:JavaScript経験1年程度のフロントエンドエンジニア
記事の長さ:3000字程度
出力形式:
- タイトル案(3つ)
- H2見出し(5-7個)
- 各H2の下にH3見出しと概要(1-2文)
- 狙うキーワード(3-5個)
ステップ2:本文執筆(ステップ1の出力を入力に含める)
以下のアウトラインに基づいて、ブログ記事の本文を執筆してください。
{ステップ1の出力}
執筆ルール:
- 1段落は3-4文以内
- コード例は必ず含める(TypeScript)
- 専門用語には初出時に説明を添える
- 結論ファーストで各セクションを書く
ステップ3:ファクトチェック
以下のブログ記事の技術的正確性をチェックしてください。
{ステップ2の出力}
チェック項目:
- コード例が正しく動作するか
- 技術用語の定義が正確か
- バージョン固有の情報が古くないか
- 誤解を招く表現がないか
問題がある箇所を「該当箇所」「問題点」「修正案」の形式でリストアップしてください。
ステップ4:最終校正
以下の記事に対して、指摘された修正を反映し、最終校正を行ってください。
記事本文:
{ステップ2の出力}
修正指示:
{ステップ3の出力}
追加の校正項目:
- 誤字脱字の修正
- 文末表現の統一(です・ます調)
- 見出しの階層構造の確認
例2:カスタマーサポートの分類・対応(Conditional)
## ステップ1:問い合わせ分類
以下の問い合わせを分類してください。
問い合わせ内容:「先月の請求額が通常の2倍になっていました。
プランは変更していないのですが確認してください」
カテゴリ:
A. 技術的な問題(バグ、エラー、機能不具合)
B. 請求・料金に関する問い合わせ
C. 機能リクエスト・改善要望
D. 一般的な質問
分類結果のみ出力(例:B):
## ステップ2B:請求関連の対応テンプレート生成
(ステップ1で「B」と分類された場合に実行)
以下の請求に関する問い合わせに対して、カスタマーサポートの回答を作成してください。
問い合わせ内容:{元の問い合わせ}
分類:請求・料金に関する問い合わせ
回答に含める内容:
- 丁寧な挨拶と問い合わせへのお礼
- 調査する旨の説明
- 確認に必要な情報(アカウントID、対象月など)のヒアリング
- 回答までの想定期間
例3:コードの自動改善ループ(Loop)
## 生成ステップ
以下の要件に基づいて、TypeScriptの関数を実装してください。
要件:
- 配列内の重複要素を削除する
- 元の配列の順序を保持する
- ジェネリクスを使い、任意の型に対応する
- エッジケース(空配列、undefined含む配列)に対応する
{前回のフィードバックがあれば: 前回のフィードバック}
## 評価ステップ
以下のTypeScriptコードを評価してください。
{生成ステップの出力}
評価基準(各10点満点):
1. 正確性:要件を全て満たしているか
2. 型安全性:型定義は適切か
3. エッジケース:境界条件の処理は十分か
4. 可読性:命名、コメント、構造は適切か
合計が35点以上なら「PASS」、未満なら改善点を具体的に指摘してください。
判定:
いつ使うべきか
Prompt Chainingが特に効果的な場面は以下の通りです。
- 多段階の処理が必要なタスク:リサーチ → 分析 → 文章化 → 校正
- 品質保証が重要なタスク:生成 → 検証 → 修正のループ
- 条件分岐があるワークフロー:入力の種類に応じて処理を切り替える
- チームでのプロンプト開発:各ステップを異なるメンバーが担当・改善できる
- 本番環境でのLLMアプリケーション:各ステップのログ取得、エラーハンドリングが容易
逆に、以下の場合は単一プロンプトで十分です。
- 1ステップで完了する単純なタスク
- レイテンシが最優先の場面(チェインは累積的に遅延が増加)
- プロトタイピング段階(まずは1プロンプトで試し、必要に応じて分割)
注意点・限界
エラーの伝播
チェインの前段でエラーが発生すると、後続の全ステップに影響します。各ステップの出力を検証するバリデーション層を挟むことが重要です。「ガベージイン・ガベージアウト」はチェインでも同様です。
レイテンシの累積
各ステップでLLM呼び出しが発生するため、チェインが長いほど応答時間は線形に増加します。ユーザー対面のアプリケーションでは、並列実行可能なステップの特定と非同期処理が重要です。
コンテキストの喪失
チェインが長くなると、初期ステップの情報が後段で失われることがあります。重要な情報は明示的にサマリーとして各ステップに引き継ぐ設計が必要です。
過度な分割
3ステップで済むタスクを10ステップに分割しても、品質は向上せずコストだけが増加します。分割の粒度は「各ステップが明確に異なる責務を持つか」で判断してください。