powered by TechFeed
表示モード
ハウツー

S3へのファイル到着を起点に自律動作する「アンビエントエージェント」をAWSで構築する — 人間の承認ステップを1つのツールで統合する設計

10月2日、AWSが「Building ambient agents with Amazon Bedrock AgentCore: From event-driven signals to human-in-the-loop workflows」と題した記事を公開した。S3にファイルが届くたびに人が気づいて手動でトリアージする——そのルーティンをなくすのがこの記事の主題だ。Amazon Bedrock AgentCoreを使ってイベント駆動型の「アンビエントエージェント」を構築し、人間の承認ステップを組み込むワークフローの実装方法が、サンプルコードとアーキテクチャ図を交えて解説されている。

10月2日、AWSが「Building ambient agents with Amazon Bedrock AgentCore: From event-driven signals to human-in-the-loop workflows」と題した記事を公開した。S3にファイルが届くたびに人が気づいて手動でトリアージする——そのルーティンをなくすのがこの記事の主題だ。Amazon Bedrock AgentCoreを使ってイベント駆動型の「アンビエントエージェント」を構築し、人間の承認ステップを組み込むワークフローの実装方法が、サンプルコードとアーキテクチャ図を交えて解説されている。


「アンビエントエージェント」とは何か

アンビエントエージェント(Ambient Agent)とは、ユーザーがチャット画面でプロンプトを打つのを待つのではなく、S3アップロードやスケジュールタスクといったシステムイベントを契機に自律的に動くエージェントを指す。LangChainも同様のパラダイムを提唱しており、「人間が能動的に操作しなくても、環境の変化に反応して動き続けるエージェント」という設計思想が業界全体で注目されている。従来のチャットボット型AIが「呼ばれたら答える」受動的なモデルであるのに対し、アンビエントエージェントはバックグラウンドで常時待機し、イベントを検知した瞬間に処理を開始する。ファイル監視・定期バッチ・Webhookトリガーといった用途と特に相性がよく、人間の介在コストを大幅に削減できる点がエンタープライズ導入の文脈で評価されている。

処理の流れは以下のようになる:

Event → Signal → Agent → [Optional human interaction] → Action

チャットベースのエージェントとの最大の違いはトリガーが人間ではなくイベントである点、そして複数のエージェントが並行して動作できる点だ。ただし、完全自律ではない。承認・確認が必要な場面では人間に割り込む設計になっており、これが本番運用における信頼性の担保となっている。


実装の核心:ask_humanツール1本で実現するHITL

この実装で特に面白いのは、Human-in-the-loop(HITL)の仕組みをたった1つのツール(ask_human)で統一している点だ。

エージェントが人間に問いかける場面は主に4パターンある:

パターン 内容
Notify 結果を報告するだけ
Question 曖昧な点の確認を求める
Review アクションの承認/却下/修正を要求
Error 失敗を記録し、リトライを促す

これらはすべて同一のレスポンスエンベロープで処理される。statusフィールドがcompleted/interrupted/errorのいずれかを返し、対応するフィールドにresult/question/errorが入る。プラットフォーム側のコードパスは1本だけ、というシンプルな設計だ。

エージェントがinterruptedを返すと、ジョブはinterruptedステータスに移行し、ReactフロントエンドのJobsページの「Interrupted」タブに警告マーカー付きで表示される。ユーザーは複数のチャット画面を監視する必要がなく、1つのJobsビューで全エージェントの状態を把握できる。


アーキテクチャ:フルサーバーレス構成

主要コンポーネントは以下のとおり:

  • Amazon S3:ファイルアップロードのシグナルエントリポイント
  • Amazon SQS:APIリクエストとエージェント呼び出しを非同期に分離。DLQ(デッドレターキュー)で失敗メッセージを補足
  • AWS Lambda(3本のパイプライン関数):Signal Processor/Job Execution/Scheduler
  • Amazon Bedrock AgentCore Runtime:コンテナベースでエージェントを実行。長時間ジョブをサポート
  • Amazon DynamoDB:ジョブレコード、シグナル定義、会話履歴を管理
  • React フロントエンド(S3 + CloudFront配信):ジョブ監視・承認操作のUI

エージェントの各ターンの上限はLambdaの15分タイムアウトに設定されており、シグナル→エージェント→HITLの一連のフローをカバーするのに十分な余裕がある。


シグナル設定:autoExecuteフラグで自律度を制御

シグナルの挙動はautoExecuteフラグ1つで切り替えられる:

  • autoExecute: false(デフォルト):ジョブがJobsページにidleステータスで積まれ、人間がレビュー後に実行する。未知の入力や高リスクなツールが絡む場面向け
  • **autoExecute: true**:シグナル受信直後にジョブキューへ投入され、エージェントが即時実行。人間への割り込みはask_human呼び出し時のみ

現在リファレンス実装として提供されているシグナルソースはS3ファイルアップロードとスケジュール実行の2種類。APIウェブフック、DynamoDBストリームなどは拡張ポイントとして設計されており、新規Lambdaハンドラーを追加することで対応できる。


前提条件と使用モデル

デプロイにはAWS CDK v2、Docker、Python 3.11以上、Node.js 18以上が必要。使用モデルはAnthropic Claude Sonnet 4.5(Amazon Bedrockで利用可能な最新Claudeシリーズの一つ。設定1行で変更可)で、us-east-1リージョンがデフォルトとなっている。Bedrockで当該モデルへのアクセスを事前に有効化しておく必要がある(手順はこちら)。なお、Amazon Bedrockで利用可能なモデルの最新一覧は公式ドキュメントで確認できる。


詳細はBuilding ambient agents with Amazon Bedrock AgentCore: From event-driven signals to human-in-the-loop workflowsを参照していただきたい。