AWS Certified Generative AI Developer - Professional 資格対策コース

ReAct パターン・推論分解・モデルアンサンブル

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

このレッスンで学ぶこと 対応試験ドメイン 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 FunctionsLambda 内の手書きループ(制御を埋め込みアンチパターン)
1 ステップの推論やツール実行を行うAWS Lambda + Bedrock ConverseStep Functions 単体(計算処理は持たない)
マネージドに ReAct を任せるAmazon Bedrock AgentsStep 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)