エンタープライズAIパターンライブラリ
AIおよびエージェントシステムを構築するための再利用可能なデザインパターン。それぞれが、解決する課題、適用対象、仕組み、メリット、リスク、および非推奨のケースを含む、自己完結型で引用可能なユニットです。人間とAIエージェント向けに構築されています。
オーケストレーション
7ゴール分解(Goal Decomposition)
ゴール分解(Goal Decomposition)では、エージェントが行動を起こす前に、高レベルのゴールを処理可能な小さなサブタスクの順序付きセット(計画)に分解します。その後、その計画を実行および監視し、ステップが失敗した場合には再計画を行います。明示的な計画は、レビュー、ゲート制御、デバッグが可能な「検査可能なアーティファクト」になります。このパターンは、ゴールに複数の依存ステップが必要であり、その場しのぎで一歩ずつ進むリアクティブなエージェントでは方向性を見失ったり失速したりする場合に使用します。単純なワンショットのタスクではスキップしてください。
オーケストレーター・ワーカー(Orchestrator-Workers)
オーケストレーターLLMがタスクを動的にサブタスクに分割し、それぞれをワーカーLLMに委譲して、結果を統合します。固定された並列化とは異なり、オーケストレーターは実行時にサブタスクを決定するため、事前に分解方法がわからない複雑なタスクに適しています。
並列化
並列化は、複数のLLM呼び出しを同時に実行し、その結果を集約します。これには2つのパターンがあります。セクショニング(タスクを独立したサブタスクに分割して並列実行する)と、ボーティング(信頼性やカバレッジを向上させるために同じタスクを複数回実行する)です。これにより、レイテンシが短縮され、品質が向上します。
プロンプトチェーニング
プロンプトチェーニングは、タスクを固定された一連のLLM呼び出しに分解し、各ステップで前のステップの出力を処理します。わずかなレイテンシと引き換えに、精度と制御性を大幅に向上させることができます。これは最もシンプルなワークフローパターンであり、タスクを順序付けられたサブタスクに明確に分割できる場合は常に使用すべきです。
ルーティング
ルーティングは、入力を分類し、最も適切な専用のハンドラー、プロンプト、またはモデルに転送します。各パスをそのケースに合わせて最適化できるようにすることで品質を向上させ、簡単なリクエストは安価なモデルに、難しいリクエストは能力の高いモデルに送信することでコストを制御します。
スーパーバイザーエージェント
スーパーバイザーエージェントは、専門化されたサブエージェントのチームを管理する永続的なコーディネーターです。会話の状態を読み取り、次にどのスペシャリストが動作すべきかを決定し、メッセージをルーティングし、返された結果を統合して目標に向かって進めます。ワンショットのデコンポーザー(分解器)とは異なり、スーパーバイザーは多数のターンにわたってループ内にとどまり、機能ごとに委任し、タスクが完了するかユーザーに返されるまで再計画を行います。
タスクの優先順位付け
エージェントの候補タスクを先入れ先出し(FIFO)で処理するのではなく、価値、緊急度、依存関係、およびコストに基づいて順序付けします。スコアリング関数と優先度付きキューが次に実行するタスクを決定するため、限られた計算リソース、予算、時間を最も重要な作業に割り当てることができます。状態の変化に応じて再スコアリングを行い、キューに上限を設けて無制限に肥大化するのを防ぎます。
信頼性
4関連付けられた実行トレース (Correlated Run Trace)
単一の識別子が、エージェントの実行全体(入力、モデルとバージョン、引数と結果を伴うすべてのツール呼び出し、最終的なアクション)をスレッド化し、数ヶ月後でも再現可能な記録としてまとめます。難しいのはキャプチャすること自体ではありません。実行を再構成できるほど完全でありながら、トレースストアが記述対象データの単なる二重コピーにならないよう抑制を効かせることです。
エバリュエーター・オプティマイザー
1つのLLMが応答を生成し、2つ目のLLMが基準に照らしてそれを評価してフィードバックを返します。生成器(ジェネレーター)が修正を行い、評価をクリアするまでループが繰り返されます。追加の呼び出しコストが発生する代わりに、明確な評価基準を持つタスクの品質を向上させます。
リカバリ戦略
エージェントに対して、問題が発生した際の明示的な計画を提供します。出力の検証やツールのエラーのキャッチによって失敗を検出し、調整を伴う再試行、代替パスへのフォールバック、部分的なアクションのロールバック、またはエスカレーションを行います。無限ループやコストの急増を防ぐために再試行回数を制限し、アクションを冪等(べきとう)にし、一時的な失敗と永続的な失敗を区別します。目標は、クラッシュやサイレントな誤り(誤った結果をそのまま出力すること)を避け、段階的に機能を縮小(グレースフルデグラデーション)させることです。
リフレクション
リフレクションは、モデルに自身の出力を批判(レビュー)させ、その批判をフィードバックとして使用して修正させる手法です。これは、追加の呼び出しコストと引き換えに、推論、コーディング、執筆タスクにおける誤りを検出し、品質を向上させるための、単一モデルによる軽量なアプローチです。
安全性と監視
7Attributed Memory
エージェントが記憶する内容を、匿名のテキストの塊としてではなく、そのオリジン(発生元)、削除権限を持つオーナー、および有効期間を保持するレコードとして保存します。メモリは、単発の攻撃を、将来の無関係なタスクで再トリガーされる攻撃へと変えてしまう要因です。アトリビューション(属性定義)こそが、それを可逆的なものにします。
エグレス許可リスト
エージェントのトラフィックの送信先を制限します。データの窃盗もインジェクションペイロードの配信も、最終的には外部へのリクエストに行き着くため、許可された送信先のみを定義するデフォルト拒否(default-deny)リストは、他のすべてのコントロールが失敗した後に機能する最後の砦となります。
人による承認ゲート
人による承認ゲートは、定義されたチェックポイントで自動化されたワークフローを一時停止し、提案されたアクションが実行される前に、人がそれをレビュー、編集、または拒否できるようにするものです。これは特に、影響が大きく、不可逆的、または規制対象となる操作に有効です。これは、Human-in-the-Loop(人間関与)による監視を運用可能な形にしたものです。
人へのエスカレーション
エージェントが自身の能力を超えている(信頼度の低さ、繰り返される失敗、曖昧さ、または機密性の高い状況など)と検出した場合、タスク全体を人間に引き渡し、十分なコンテキストを渡すことで、その人が再調査することなく引き継げるようにします。1つのアクションをサインオフのために一時停止する承認ゲートとは異なり、エスカレーションは所有権を移転するため、エージェントは処理の主導を停止します。難しいのは、過剰なエスカレーションとエスカレーション不足の両方を避けるためにトリガーを調整することです。
最小権限ツール
エージェントにはタスクが実際に必要とする最も狭いツールのセットを、各ツールには最も狭いスコープを提供します。このパターンは、プロンプトインジェクションが成功することがあるという前提を受け入れ、乗っ取られたエージェントができることを制限します。モデルにパッチを当てることはできませんが、モデルがアクセスできる範囲を決定することはできます。
出力境界エンコーディング
モデルが出力するすべてのものを、それを消費するシステムに対する敵対的な入力として扱います。レンダラー、シェル、クエリ、下流のエージェントなど、各宛先において、その宛先独自のルールを使用してエンコードと検証を行います。単一のグローバルなサニタイザーではこれを行うことはできません。HTMLにとって正しいエスケープ処理は、シェルにとっては無意味だからです。
サンドボックス実行
エージェントが生成または呼び出すものはすべて、環境固有の資格情報(ambient credentials)を持たず、制限されたファイルシステム、制御された送信(egress)、および厳格なリソース制限を備えた、使い捨ての隔離環境内で実行します。サンドボックスが存在するのは、エージェントが悪意を持っているからではなく、エージェントへの入力が悪意を持っている可能性があるからです。
コストとパフォーマンス
2Context Compression
Context Compressionは、モデルが動作するために実際に必要な情報を保持しながら、各呼び出しでモデルに提供されるトークン数を削減します。長期稼働するエージェントや長い会話で使用することで、コストとレイテンシを削減し、コンテキストウィンドウ内に収めることができます。3つの手段は、履歴の要約、無関係なコンテキストの整理、およびプロンプトの圧縮です。主なリスクは、重要な詳細を1つ落としてしまうという、情報の非可逆性(ロス)です。単に節約されたトークン数だけでなく、保持された情報を測定してください。
セマンティックキャッシュ
セマンティックキャッシュは、過去のモデルの応答を保存し、新しいリクエストが以前のリクエストと意味的に類似している場合にそれを再利用します。これは、正確なテキストではなく、埋め込み(embeddings)を介して意味でマッチングを行います。本番環境でよく見られる、繰り返されるクエリやほぼ重複するクエリのコストとレイテンシーを削減します。