AI Prompt Engineering · レッスン

オーケストレーターとワーカー

階層的な連携を実現します。

レッスン 2/413 ステップ

「オーケストレーターとワーカー」はCoddyKit上の無料AI Prompt Engineeringレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Prompt Engineering学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Prompt Engineeringコースには全4レッスンが含まれています。

オーケストレーター・パターン

オーケストレーター・ワーカー・パターンでは、1つのオーケストレーターエージェントが計画と目標を担当し、ワーカーエージェントが範囲を限定したサブタスクを実行して結果を返します。オーケストレーターは、分解、割り当て、統合を行い、タスクが完了したかどうかを判断します。

  • オーケストレーター:計画、ルーティング、統合、制御フローを担当します。
  • ワーカー:明確な契約の範囲内で、対象を絞って実行します。

この階層構造により、判断は1か所に集約し、並列化できる作業は複数のエージェントに分散できます。

計画と実行の分離

重要な原則は、計画と実行を分けることです。オーケストレーターは、小さく高レベルなコンテキストを使って戦略について推論し、ワーカーは詳細ですが範囲の狭いコンテキストで動作します。両者を混在させると、負荷の高い汎用エージェントに戻ってしまいます。

オーケストレーターが生のツール出力を直接扱うことはほとんどなく、ワーカーの要約に基づいて推論するようにしてください。

plan = orchestrator.decompose(goal)        # high-level
results = [worker.run(sub) for sub in plan] # detailed, scoped
final = orchestrator.integrate(results)     # over summaries

分解の品質がすべてを左右する

システムの品質は、オーケストレーターによる分解の品質に左右されます。サブタスクは、並列化できる程度に独立し、引き渡しが容易な程度に範囲を限定し、全体としてタスクを完全にカバーしていなければなりません。ワーカーを実行する前に確認できるよう、オーケストレーターに明示的な計画を出力させてください。

  • 独立したサブタスク -> 並列実行できます。
  • 完全なカバレッジ -> 最終回答に抜けが生じません。
plan = {
  'subtasks': [
    {'id': 1, 'goal': '...', 'inputs': [...], 'depends_on': []},
    {'id': 2, 'goal': '...', 'inputs': [...], 'depends_on': [1]}
  ]
}

厳密な契約でディスパッチする

ディスパッチでは、各ワーカーに目標、入力、期待する出力スキーマだけを正確に渡してください。それ以外は不要です。自分の担当部分だけを把握するワーカーは、より大きな目標に気を取られず、オーケストレーターが統合しやすい予測可能な形式で結果を返します。

ディスパッチメッセージは契約です。成果物、形式、完了条件を明確にしてください。

dispatch = {
  'goal': 'Summarize doc 7 risks',
  'context': doc7,
  'output_schema': {'risks': [{'text': str, 'severity': str}]},
  'done_when': 'all risk clauses covered'
}

ワーカー間のコンテキスト分離

ワーカーには、デフォルトで他のワーカーのコンテキスト全体を見せないようにしてください。分離することで、あるワーカーのエラーや幻覚が別のワーカーに伝播するのを防ぎ、各ワーカーのプロンプトを小さく、キャッシュしやすく保てます。グローバルな視点を持つのはオーケストレーターだけです。

ワーカー間で共有するのは、オーケストレーターが確認した要約だけにし、生の相互通信は行わないでください。

サブタスクの並列実行と逐次実行

独立したサブタスクはレイテンシーを短縮するために並列実行し、依存関係のあるサブタスクは順序を守って実行する必要があります。オーケストレーターの計画には依存関係グラフを組み込み、ランタイムがそれに従ってスケジュールします。独立した末端のサブタスクを分岐して実行し、その後で結合してください。

  • ファンアウト:実行可能になったすべてのサブタスクを同時にディスパッチします。
  • 結合:依存するサブタスクをディスパッチする前に、依存先の完了を待ちます。
def schedule(plan):
    ready = [t for t in plan if not t['depends_on']]
    run_parallel(ready)
    # then unlock tasks whose deps are now done

統合と競合の解決

統合は単純な連結ではありません。オーケストレーターは、ワーカーからの重複する出力、矛盾する出力、信頼度の低い出力を1つの一貫した結果に調整し、どれを信頼するかを判断し、未解決の競合を明示する必要があります。

明示的な調整ステップとルールをオーケストレーターに与えてください。信頼度の高い出力を優先し、矛盾にフラグを付け、カバレッジが不十分な場合は再実行を要求します。

merged = orchestrator.reconcile(
  results,
  rules='prefer higher confidence; flag contradictions; re-dispatch on gaps'
)

制御役としてのオーケストレーター

オーケストレーターは制御フローも担当します。停止するタイミング、失敗したワーカーを再試行するタイミング、計画を立て直すタイミング、エスカレーションするタイミングを判断します。これにより、最大反復回数、最大支出、最大深度などの予算を適用し、暴走するループを防ぐ場所になります。

制御を担うオーケストレーターがなければ、マルチエージェントシステムは暴走します。

if iterations > MAX_ITERS or spend > BUDGET:
    return orchestrator.best_effort_answer()

再帰的な分解

ワーカー自体がサブ問題のオーケストレーターとなり、階層を形成することもできます。これにより深いタスクに対応できますが、レイテンシーとエラー伝播の深さが増します。再帰の深さに上限を設け、各レベルに簡潔な要約を返させてください。そうすれば、上位レベルが下位レベルの詳細に埋もれることはありません。

障害の封じ込め

1つのワーカーが失敗しても、システムが適切に縮退するように設計してください。オーケストレーターは、ワーカーの出力が不正な形式または空であることを検出し、契約を明確にして再試行し、クラッシュする代わりにフォールバックする必要があります。ワーカーは分離された状態で失敗し、オーケストレーターがその影響を吸収して別の経路に振り替えます。

  • すべてのワーカーの戻り値をスキーマに照らして検証します。
  • 再試行してからフォールバックし、生の失敗を上位に伝播させないでください。
def collect(worker, dispatch):
    out = worker.run(dispatch)
    if not valid(out, dispatch['output_schema']):
        out = worker.run(clarify(dispatch))
    return out or fallback(dispatch)

オーケストレーションの設計図

設計図は次のとおりです。オーケストレーターが検査可能な依存関係グラフの計画に分解し、厳密な契約を分離されたワーカーにディスパッチし、独立したサブタスクを並列実行し、明示的な競合ルールで結果を検証・調整し、予算と停止条件を適用し、再試行してからフォールバックすることでワーカーの障害を封じ込めます。判断は中央に残し、作業は分散させます。

クイックチェック

複数の独立したサブトピックを含む調査タスク向けに、オーケストレーターとワーカーで構成されるシステムを設計しています。

復習:オーケストレーターとワーカー

計画、ルーティング、統合、制御を1つのオーケストレーターに集約し、厳密な契約のもとで焦点を絞った実行を分離されたワーカーに委ねます。検査可能な依存関係グラフに分解し、独立したサブタスクを並列化し、明示的な競合解決ルールで結果を統合し、予算と停止条件を適用し、validate-retry-fallbackによってワーカーの障害を封じ込めます。オーケストレーターは生の相互通信ではなく要約をもとに推論するため、階層を一貫性のある制御可能な状態に保てます。

無料で開始

AI チューターと学ぶ AI Prompt Engineering — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
53
レッスン
199

よくある質問

「オーケストレーターとワーカー」レッスンは無料ですか?

はい。「オーケストレーターとワーカー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Prompt Engineeringコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Prompt Engineeringコースには全4レッスンが含まれています。

「オーケストレーターとワーカー」で何を学びますか?

階層的な連携を実現します。 ブラウザで直接実行するハンズオンコードでAI Prompt Engineeringを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

AI Prompt Engineeringを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAI Prompt Engineeringは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「オーケストレーターとワーカー」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAI Prompt Engineeringレッスンでコードを書いて実行できますか?

はい。すべてのAI Prompt Engineeringレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 役割と専門化
  2. オーケストレーターとワーカー
  3. エージェント間通信
  4. 議論と投票を行うエージェント
← AI Prompt Engineeringに戻る