AWS Certified Generative AI Developer - Professional 資格対策コース
ReAct パターン・推論分解・モデルアンサンブル
このレッスンで学ぶこと 対応試験ドメイン D2 タスク 2.1.2(推論パターンと分解)・2.1.4(モデルアンサンブル)。ReAct パターンの考え方、複雑タスクを段階分解するオーケストレーション、複数モデルを組み合わせるアンサンブル/ルーティングを、AWS Step Functions と AWS Lambda で実装する設計判断を身につけます。
解説
エージェントが複雑なタスクを解くには「推論」と「行動(ツール実行)」を交互に繰り返す制御が必要です。その代表が ReAct パターンです。さらに難タスクは小さなサブタスクへ分解し、必要に応じて複数モデルを組み合わせます。試験では「この反復・分解・組み合わせを AWS のどのサービスで構成するか」が問われます。
ReAct パターン(Reasoning + Acting)
ReAct は、FM が「Thought(思考)→ Action(ツール実行)→ Observation(観測)」を反復し、最終回答に到達する推論パターンです。Amazon Bedrock Agents はこの反復をマネージドに行います。一方、反復の各ステップを明示的なワークフローとして可視化・制御したい場合は、AWS Step Functions でステートマシンを組み、各 Action を AWS Lambda として実装します。
| 要素 | 意味 | AWS での実装 |
|---|---|---|
| Thought | 次に何をすべきかの推論 | Bedrock Converse 呼び出し(Lambda 内) |
| Action | ツール/API の実行 | Lambda 関数(DB 照会・API 呼び出し) |
| Observation | 実行結果の取り込み | ステート変数として次ステップへ渡す |
| ループ制御 | 終了条件まで反復 | Step Functions の Choice / Map |
推論分解(タスクデコンポジション)
1 回の巨大プロンプトで全部やらせるより、サブタスクに分割し、ステップごとに FM 呼び出しを分ける方が精度と可観測性が上がります。Step Functions の各ステートでサブタスクを処理し、中間結果を次へ渡すパイプラインにします。これにより、どのステップで失敗したかが明確になり、リトライやフォールバックを段階単位で設計できます。
モデルアンサンブルとルーティング
モデルアンサンブルは、複数の FM を組み合わせて最終品質を上げる手法です。代表的なパターンは下記のとおりです。
| パターン | 内容 | 使いどころ |
|---|---|---|
| ルーティング | 入力の種類で軽量モデルと高性能モデルを振り分ける | コストとレイテンシの最適化 |
| 並列実行+集約 | 複数モデルに同時実行させ結果を統合/多数決 | 信頼性・品質の底上げ |
| カスケード | まず軽量モデル、不十分なら高性能モデルへ昇格 | 多くの簡単な要求を安く処理 |
AWS では、ルーティングや並列集約を Step Functions の Choice / Parallel ステートで構成し、各モデル呼び出しを Lambda(Bedrock Converse)として実装します。これにより、コードに分岐ロジックを埋め込まずワークフローで宣言的に管理できます。
コード例(Lambda 内での 1 ステップの推論呼び出し)
Step Functions の 1 ステートから呼ばれる Lambda の中身の最小例です。認証は IAM ロール経由です。
Python
import boto3
bedrock = boto3.client("bedrock-runtime")
def handler(event, context):
# event["task"] にサブタスクのプロンプト、event["model_id"] にルーティング結果が入る
resp = bedrock.converse(
modelId=event["model_id"],
messages=[{"role": "user", "content": [{"text": event["task"]}]}],
inferenceConfig={"maxTokens": 512, "temperature": 0.2},
)
return {"result": resp["output"]["message"]["content"][0]["text"]}試験で問われるポイント
- Step Functions と Lambda の役割分担。反復・分岐・並列・リトライなどの「制御フロー」は Step Functions、個々の推論やツール実行という「処理本体」は Lambda。制御ロジックを Lambda 内のループに埋め込むのはアンチパターンとして問われやすい
- マネージドな ReAct(Bedrock Agents)vs 明示的ワークフロー(Step Functions)。素早くエージェントを立てたいなら Bedrock Agents、各ステップを可視化・厳密制御・監査したいなら Step Functions、という使い分け
- モデルアンサンブルのカスケード/ルーティングはコスト最適化の文脈でも問われる。簡単な要求は軽量モデルへ、難しい要求だけ高性能モデルへ昇格
- 推論分解の利点は精度向上だけでなく、失敗ステップの切り分け・段階リトライが可能になること
サービスの使い分け早見表
| やりたいこと | 使うもの | 混同しやすいもの |
|---|---|---|
| 反復・分岐・並列の制御フローを宣言的に組む | AWS Step Functions | Lambda 内の手書きループ(制御を埋め込みアンチパターン) |
| 1 ステップの推論やツール実行を行う | AWS Lambda + Bedrock Converse | Step Functions 単体(計算処理は持たない) |
| マネージドに ReAct を任せる | Amazon Bedrock Agents | Step Functions(自前ワークフローで明示制御する場合) |
| 複数モデルを条件で振り分ける | Step Functions の Choice/Parallel | 単一 Lambda 内の if 文(保守性・可観測性が下がる) |
まとめ
ReAct は「思考 → 行動 → 観測」の反復で複雑タスクを解く推論パターンです。素早く組むなら Amazon Bedrock Agents のマネージド ReAct、各ステップを可視化・厳密制御するなら AWS Step Functions で制御フローを宣言し、推論やツール実行を AWS Lambda に分離します。推論分解とモデルアンサンブル(ルーティング/並列/カスケード)も Step Functions で構成するのが定石です。
次のステップ
次のクイズレッスンで、Step Functions と Lambda の役割分担やアンサンブル設計を問うシナリオ問題に挑戦しましょう。
関連レッスン
- Bedrock Agents・AgentCore とエージェンティック AI 基礎(pro-agents-bedrock)
- 停止条件・タイムアウト・Human-in-the-loop(pro-agents-guarded)
- レジリエントな API(バックオフ・フォールバック・ルーティング)(pro-api-resilience)