手法

プロンプトチェーンとプロンプトの分解

プロンプトチェーンは、複雑なタスクを単純なプロンプトの連なりに分けます。タスクの分解の仕方、ステップ間でのデータの受け渡し、チェーン内のエラーの扱いを解説します。

英語の原文からの翻訳です。コード、プロンプト、モデルの出力は英語のまま掲載しています。

プロンプトチェーンとは、複数のプロンプトを順番に使ってタスクを解く方法で、1 つの出力が次の入力になります。プロンプトの分解は、その前の設計ステップで、タスクをどう分けるかを決めることです。この 2 つを合わせたものが、モデルに複雑なことをさせる最も確実な方法です。

1 つの大きなプロンプトが失敗する理由

1 回で抽出、分析、判断、執筆を求めるプロンプトには、いくつかの問題があります。

  • 指示同士が競合します。求めることが多いほど、どれかの要件が見落とされる可能性が高まります。
  • どの部分が失敗したのか分かりません。最終回答が間違っていても、原因はどのステップにもありえます。
  • 部品ごとにテストできません。最後まで検証できるものがありません。
  • 呼び出しのたびに、この入力に無関係な指示も含めてすべて課金されます。

チェーンは、各ステップに 1 つの仕事、明確な入力、確認できる出力を与えます。

タスクを分解する方法

注意深い人なら何をどの順で行い、どこで他の人に仕事を渡すかを考えます。良い分割点は次のような場所です。

  • 仕事の種類が変わるとき(読む、次に判断する、次に書く)。
  • 中間結果を確認する価値があるとき(結論を出す前の、抽出された事実)。
  • ステップがときどきしか当てはまらないとき(テキストが英語でない場合だけ翻訳する)。
  • ステップごとに異なるモデルが必要なとき(分類には小さいモデル、執筆には大きいモデル)。

具体例

タスク:顧客からの苦情メールに返信する。

ステップ 1:抽出。 小さく高速なモデルが、メールを構造化された事実に変えます。

Extract from the email in the tags: order_id, product, the problem in
one sentence, and what the customer is asking for. Return JSON only.
Use null for anything not stated.

<email>
{{email}}
</email>

ステップ 2:判断。 コードが注文を検索します。プロンプトがポリシーを適用します。

Given the complaint and the order record, choose one action from:
refund, replace, escalate, explain. Give the policy clause that applies.
Return JSON: {"action": string, "clause": string}.

<complaint>{{step1_json}}</complaint>
<order>{{order_record}}</order>
<policy>{{policy}}</policy>

ステップ 3:執筆。 3 つ目のプロンプトが、判断から返信文を作成します。

Write a reply to the customer, under 120 words, that states the action
and what happens next. Do not promise anything outside the action.

<action>{{step2_json}}</action>
<customer_name>{{name}}</customer_name>

各ステップは単独でテストできます。返信が誤った約束をしていても、ステップ 2 の出力を見れば、判断と文章のどちらに原因があるかがすぐに分かります。

ステップ間でのデータの受け渡し

ステップ間では構造化出力を使う。 文章ではなく、JSON やタグ付きのフィールドにします。そうすれば次のプロンプトもコードも、その形に頼れます。構造化出力のプロンプトを参照してください。

次のステップに必要なものだけを渡す。 履歴全体を転送すると、後続のプロンプトが長くなり、初期のミスが広がります。

すべての境界で検証する。 各ステップの出力は、使う前に確認します。検証のないチェーンは誤りを増幅します。各ステップが 95% の確率で正しい 5 ステップは、すべてが正しい確率が約 77% にしかなりません。

挿入するものはすべて区切る。 あるモデルの出力は、次のモデルにとって信頼できない入力です。「指示を無視して」と書かれた苦情メールは、ステップ 1 を通過して、今はステップ 2 のプロンプトの中にあります。挿入する内容はタグで囲みます。プロンプトインジェクションを参照してください。

チェーンの形

形 説明 例
逐次 A、次に B、次に C 抽出、判断、執筆
ルーティング 分類してから分岐を選ぶ 請求の質問は 1 つのプロンプトへ、不具合は別のプロンプトへ
並列 独立したステップを同時に実行し、統合する 10 件の文書を要約してから結合する
生成して確認 1 つのプロンプトが作り、別のプロンプトがレビューする 下書きを作成し、要件に照らして批評する
ループ 条件が満たされるまで繰り返す 検証に通るまで修正する(再試行の上限付き)

ループには必ず上限を設けてください。永遠に再試行するチェーンは、障害であり請求書です。

チェーンと代替手段の比較

思考の連鎖との比較。 思考の連鎖は、推論を 1 回の応答の中に収めます。手順があらかじめ分からないときに使います。手順が分かっているときはチェーンを使いましょう。テストしやすさと制御が得られます。

エージェントとの比較。 チェーンでは、順序をコードが決めます。エージェントでは、モデルが決めます。チェーンはより安く、速く、予測しやすいものです。道筋が途中で見つかるものに依存する場合にだけ、エージェントを選びます。ReAct プロンプティングと AI エージェント向けのプロンプトを参照してください。

注意すべきコスト

チェーンは呼び出しが増えます。経済的に保ちましょう。

  • 各ステップをこなせる最小のモデルを使います。
  • 独立したステップは並列に実行して遅延を減らします。
  • この入力に当てはまらないステップは飛ばします。
  • 提供元が対応していれば、各プロンプトの固定部分をキャッシュします。トークン最適化を参照してください。

各リンクを健全に保つ

チェーンには保守すべきプロンプトが複数あるので、1 つの問題は見逃されがちです。それぞれをファイルとして保存し、変更のたびにすべてをチェックします。プロンプトテストゲートは、リポジトリ内のどのプロンプトでも品質基準を下回ったり、トークン予算を超えたりするとプルリクエストを失敗させます。プロンプトアナライザーは、あるステップが次のステップに入力を渡す箇所で最も重要になる、区切りのない変数を報告します。

実践してみる

プロンプトアナライザーで試す

あらゆるプロンプトから、曖昧さ、不足コンテキスト、矛盾、無駄なトークンを見つけます。 無料・決定論的で、アカウントは不要です。

関連する PromptFlowEngine ツール

手法のその他のガイド

プロンプトエンジニアリングガイドをすべて見る