AWS Machine Learning

Amazon Bedrock AgentCore、マネージドナレッジベース、Nova Sonicで音声旅行コンシェルジュを構築する

Amazon Bedrock AgentCore、リアルタイム音声用のAmazon Nova Sonic、そしてポリシーに関する質問への回答用のAmazon Bedrock Knowledge…

End-to-end voice concierge architecture spanning the backend, AgentCore Gateway, AgentCore runtime, and front end
画像の出典 · AWS Machine Learning

航空会社にはすでに、旅行者がフライトを確認し、座席を選び、予約を管理するためのアプリやウェブサイトがあり、自然な音声レイヤーを追加することで、これらの作業を音声でのリクエストに開放できます。この音声レイヤーがあれば、旅行者はアプリを離れたり画面を操作したりすることなく、話すだけで座席を変更したり遅延を確認したりできます。これを構築するには、いくつかの側面で慎重なエンジニアリングが必要です。双方向で音声をストリーミングし、何度ものやり取りを通じて会話の流れを保持しなければなりません。また、エージェントを既存のバックエンドシステムに密結合させることなく接続し、連休前のトラフィック急増にも対応できるようスケールさせる必要があります。

この記事では、3つのマネージドサービスを基盤として、航空会社のアプリケーションに音声トラベルコンシェルジュを追加する方法を紹介します。 Amazon Bedrock AgentCore 任意のフレームワークとモデルを選択して、AIエージェントを大規模かつ安全に構築、デプロイ、運用するためのエージェント型プラットフォームです。 Amazon Nova Sonic on Bedrock は、リアルタイム音声向けの speech-to-speech モデルです。 Amazon Bedrock Knowledge Bases は、ユーザー自身のドキュメントに基づいて回答を根拠づける完全マネージドの検索拡張生成(RAG)サービスです。旅行客が話しかけると、コンシェルジュがその旅程を呼び出し、座席を変更し、食事の希望を更新し、ポリシーに関する質問に答え、要望があればライブのオペレーターにつなぎます。

コンシェルジュは既存の画面を置き換えるのではなく、それらに並行して動作するため、旅行者は同じセッション内でタップと会話を行き来できます。需要に応じてスケールするサービス上で動作するため、インフラではなく体験に時間を費やすことができます。AIレイヤーは合成データを使ったサンプル航空会社のバックエンドに接続しており、このパターンを自身のシステムに適用する際に実装を加速できます。プロジェクトはモジュールに分割されているため、既存のバックエンドに適合する部品を再利用し、それらをツールとしてエージェントに公開できます。

以下の方法を学びます:

  • AWS上に音声AIコンシェルジュをデプロイするには、次を使用します。 「AWS Cloud Development Kit (AWS CDK)」.
  • 以下を使ってエージェントを構築しましょう: Strands Agents フレームワークと Amazon Nova 2.5 Sonic リアルタイム音声向けのもので、Amazon Bedrock AgentCore フレームワークの機能である AgentCore runtime 上でホストされています。
  • エージェントを次のものを使ってバックエンドサービスに接続します: Model Context Protocol(MCP) Amazon Bedrock AgentCore の機能である AgentCore Gateway を通じて提供されます。
  • Amazon Bedrock Knowledge Basesで航空会社のポリシーに関する質問に回答する。
  • 参照番号と推定待ち時間を添えて、旅行者をライブの担当者につなぎます。

ソリューション概要

このアーキテクチャは、フロントエンド、AIエージェント、バックエンドサービスをそれぞれ独立したレイヤーに分離しており、各レイヤーを個別に開発・スケールできます。MCPは、AIアプリケーションを外部のツールやデータに接続するためのオープン標準です。エージェントとバックエンドの間で標準化されたメッセージをやり取りするため、両者は疎結合に保たれます。

このソリューションは以下のサービスをデプロイします。

  • Amazon Cognito ユーザー認証および署名付きAPIアクセス用の一時的なAWS認証情報を処理します。
  • Amazon Bedrock AgentCore ランタイム セッションごとに microVM 分離でエージェントをホストします。
  • Amazon Bedrock AgentCore Gateway は、バックエンドのエンドポイントを検出可能な MCP ツールとして公開します。
  • Amazon API Gateway は、バックエンドを REST エンドポイントとして公開し、 AWS Identity and Access Management (IAM) による認可を行います。
  • AWS Lambda は、旅程、座席マップ、乗客情報の更新、フライト状況、マイレージ、ポリシー検索、およびエスカレーションのビジネスロジックを実行します。
  • Amazon DynamoDB は、顧客プロファイル、予約、乗客、座席マップ、購入履歴、設定、会話、およびフライトデータを保存します。
  • Amazon Bedrock Knowledge Bases は、航空会社のポリシードキュメントに基づいて応答をグラウンディングすることにより、ポリシーに関する質問に回答します。
  • Amazon Simple Email Service (Amazon SES) は、メール通知を送信します。
  • AWS Amplify Reactフロントエンドをホストしています。

アーキテクチャ

次の図は、4つのセクションに整理されたソリューションアーキテクチャを示しています。

End-to-end voice concierge architecture spanning the backend, AgentCore Gateway, AgentCore runtime, and front end

図1:バックエンド、AgentCore Gateway、AgentCoreランタイム、フロントエンドにわたるエンドツーエンドのアーキテクチャ

セクションAはバックエンドインフラを扱います。 5つのCDKスタックが、DynamoDBテーブル、Lambda関数、API Gatewayエンドポイント、Amazon Bedrock Knowledge Bases、そしてAmazon Cognitoをデプロイします。

セクションBでは、AgentCore Gatewayを扱います。 1つのCDKスタックがMCPプロトコルを使用するAmazon Bedrock AgentCore Gatewayを作成し、すべてのバックエンドエンドポイントを、エージェントが名前で呼び出せるツールとして公開します。

セクションCではAgentCoreランタイムについて解説します。 2つのCDKスタックが実行基盤インフラをプロビジョニングします。Amazon Elastic Container Registry(Amazon ECR)がコンテナイメージを保存し、Amazon Simple Storage Service(Amazon S3)がソースのアップロードを保持し、AWS CodeBuildがARM64のDockerイメージをビルドします。Amazon Bedrock AgentCoreランタイムは、Amazon Nova 2.5 Sonicを用いたStrands Agentsフレームワークにより、WebSocketサポート付きで実行されます。

セクションDはフロントエンドを扱います。 1つのCDKスタックが、ReactアプリをAWS Amplify上にデプロイします。

ユーザーリクエストの流れ

  1. ユーザーが、AWS Amplify上でホストされているウェブアプリケーションを、ブラウザーまたはモバイルデバイスで開きます。
  2. ユーザーはログインページで認証情報を入力します。Amazon Cognito がリクエストを認証し、JSON Web Tokens(JWT)と一時的な AWS 認証情報を返します。
  3. フロントエンドはSigV4で署名されたWebSocket接続をAmazon Bedrock AgentCoreに対して開き、音声コンシェルジュセッションを開始します。
  4. ランタイムはAmazon Cognitoでトークンを検証し、Amazon Bedrockを通じてAmazon Nova 2.5 Sonicを初期化します。
  5. ユーザーがリクエストを音声で伝えます。Amazon Nova 2.5 Sonicが音声を処理し、ツール呼び出しをトリガーします。エージェントはAgentCore GatewayをMCPで呼び出すことでツール統合を処理し、フライトデータの取得、予約の管理、乗客の設定の更新を行います。
  6. AgentCore Gateway はリクエストを REST API 呼び出しとして Amazon API Gateway に転送し、そこから AWS Lambda 関数へルーティングされます。
  7. AWS Lambda関数は、予約、乗客、座席マップ、マイレージ状況、フライト情報についてAmazon DynamoDBテーブルを照会します。メール通知はAmazon SESを通じて送信されます。
  8. Amazon Nova 2.5 Sonic は文脈に応じた音声レスポンスを生成し、AgentCore ランタイムを通じて WebSocket 接続経由でユーザーにストリーミング送信します。
  9. ポリシーに関する質問については、AgentCore GatewayがMCP Knowledge Baseコネクタを通じてAmazon Bedrock Knowledge Basesに直接クエリを実行します。ナレッジベースは、関連するポリシーの該当箇所を引用としてエージェントに返します。
  10. ユーザーがライブエージェントをリクエストすると、AWS Lambda が Amazon DynamoDB にエスカレーションを記録し、参照番号を返します。その後、AWS Amplify がユーザーのデバイスから発信をトリガーし、ライブエージェントに接続します。

構築と運用

次の2つのステップは、ライブ会話の外にあります。それらは、ソリューションがどのように構築され、日々どのように稼働するかを説明するものです。

  1. AWS CDK は単一のスクリプトでソリューションをデプロイします。ビルドではエージェントのソースを Amazon S3 にアップロードし、AWS CodeBuild をトリガーしてコンテナイメージを作成します。このイメージは Amazon ECR に保存され、AgentCore ランタイムで使用されます。
  2. Amazon CloudWatch はすべてのサービスにわたってログ、メトリクス、アラートを収集し、AWS Key Management Service(AWS KMS)が保存時のデータを暗号化します。

前提条件

始める前に、以下が揃っていることを確認してください。

  • An AWSアカウント.
  • デプロイする AWS リージョンにおける Amazon Nova 2.5 Sonic の Amazon Bedrock でのモデルアクセス。リージョンごとのモデル提供状況については、次を参照してください Amazon Bedrock における AWS リージョン別のサポートモデル。Amazon Bedrock Knowledge Bases はサービス管理の埋め込みモデルを使用するため、別途埋め込みモデルへのアクセスは必要ありません。
  • Node.js AWS CDKおよびLambda関数には20.x以降。
  • Python データシーディングおよびテストクライアントには3.12以降が必要です。
  • AWS Command Line Interface(AWS CLI) 資格情報を設定済みの2.x。
  • AWS CDK CLI 2.x インストールされている npm install -g aws-cdk「、およびアカウントには以下が初期設定されています:」 npx cdk bootstrap.
  • 以下の付随コード: aws-samples GitHubリポジトリ.

AWS CDK でソリューションをデプロイする

このソリューションは単一のCDKスクリプトでデプロイできます。リポジトリをクローンし、AWS認証情報を設定して、デプロイスクリプトを実行してください。詳細なデプロイ手順については、以下を参照してください。 README GitHubリポジトリ内にあります。

サンプルの航空会社データモデル

API Gateway は、IAM で認可されたエンドポイントと Lambda 統合を備えた REST API を公開します。Amazon DynamoDB は、1 桁ミリ秒のレイテンシーとオンデマンドスケーリングにより、サンプルの航空会社データモデルを保存します。データには、顧客プロファイル、予約、乗客、座席マップ、購入履歴、設定、会話のトランスクリプト、フライト状況が含まれます。

ナレッジベースを用いたポリシーに関する質問への回答

旅行者は手荷物制限、変更手数料、ペットの同乗、マイレージプログラムの規約について質問します。このソリューションは、それらの質問に以下を用いて回答します。 検索拡張生成(RAG) Amazon Bedrock Knowledge Basesを通じて、航空会社のポリシードキュメントに基づいた回答を行います。リポジトリには、手荷物、キャンセルおよび返金、変更と再予約、運賃クラスの規則、マイレージプログラムの規約、ペットの移動、特別支援、アップグレードに関するサンプルポリシードキュメントが同梱されています。

ドキュメントをAmazon S3にアップロードし ナレッジベースを一度作成するそこから先は、Amazon Bedrockが埋め込み、チャンキング、インデックス作成、保存、検索など残りの処理をすべて担います。ストレージはAmazon S3の機能であるAmazon S3 Vectors上で動作します。Smart ParsingはソースとなるPDFを処理するため、表や構造化されたレイアウトも正確に検索できます。ポリシーのドキュメントが変更されたときは、ナレッジベースを同期すれば、新しいコンテンツがすぐに利用可能になります。パイプラインを再デプロイする必要はありません。

ナレッジベースをエージェントに接続するのは、AgentCore Gateway を通じて直接的に行えます。ナレッジベースを Connectors ターゲットとして追加し、標準または agentic retrieval を選択すると、Gateway がバックエンド API ツールと並んで、名前付き MCP ツールとしてそれを公開します。エージェントは実行時にそれを検出し、名前で呼び出すことができ、カスタム Lambda や検索コードを書く必要はありません。セットアップ手順については、次を参照してください。 ゲートウェイターゲットとしてナレッジベースを追加する.

独自のポリシーを使用するには、ポリシードキュメントフォルダにPDFまたはテキストファイルをドロップし、ナレッジベーススタックを再デプロイしてください。

Amazon Bedrock AgentCore による音声AI処理

各セッションは、AgentCoreランタイム上でマイクロVM分離を備えた管理コンテナとして実行され、高負荷時でも旅行者の会話を分離した状態に保ちます。AgentCoreは、自動スケーリング、組み込みのモニタリング、セッションルーティングを提供します。

本番環境へのデプロイでは、以下を追加してください Amazon Bedrock Guardrails プロンプトインジェクションの試みをフィルタリングし、応答の根拠を検証します。このソリューションにおけるconfirm-before-write(書き込み前に確認)パターンは、変更を加える前に旅行者に確認を求めます。そのパターンは、回答をソース文書までさかのぼって追跡できるナレッジベースの引用とともに、すでに責任あるAI実践の基盤を提供しています。

エージェントは Strands BidiAgents システムプロンプト、ツール、会話フローを定義するためのフレームワーク。Amazon Nova 2.5 Sonic は、コンシェルジュに以下の機能をもたらします。

  • アクセントの異なる音声の認識と、背景ノイズに対する耐性。
  • 旅行者のトーンに合わせて変化する音声応答。
  • 低レイテンシでの双方向ストリーミング。
  • 会話を一時停止することなく、データの取得やツール呼び出しを並行して行う非同期ツール呼び出し。
  • ツールの結果を待つ間に中間の音声応答を生成して遅延を隠蔽し、会話を自然に保ちます。
  • 割り込みと自然なターンテイキング。
  • 多くのターンにわたって引き継がれる文脈。

フロントエンドは16 kHzのPCM音声ストリームをWebSocket経由でAgentCoreランタイムに送信します。Amazon Nova 2.5 Sonicが音声を文字起こしし、エージェントが適切なツールを選択してMCP経由で呼び出します。AgentCore Gatewayが各MCP呼び出しをRESTリクエストに変換し、Lambdaがロジックを実行して結果を返し、Amazon Nova 2.5 Sonicがその結果を音声による応答に反映します。

Amazon Nova 2.5 Sonic の新機能

このソリューションでは Amazon Nova 2.5 Sonicを使用します。これは、リアルタイム音声向けに強力な推論能力を備えた音声間モデルです。バックエンドのツールを呼び出し、詳細なシステムプロンプトに従う音声コンシェルジュにおいて、この推論能力はいくつかの実用的な形で発揮されます:

より優れたツール呼び出しとエージェントによるタスク実行 – エージェントは、1 回の会話で旅程を調べた後に座席を変更するといった複数ステップのリクエスト全体を通じて、適切なツールを確実に選択し、連結します。

強力な指示追従性と推論 – このモデルは、確認コードやフライト番号を 1 文字ずつ読み上げるといったフォーマットルールを含め、システムプロンプトに忠実に従います。

正確なレスポンシブル AI 対応 – このモデルは、旅行者の正当なリクエストには役立つ形で応答し、不適切なリクエストには安全に対処します。

ユーザー認証

このソリューションは、ロールベースのアクセスのために Amazon Cognito User Pools と Identity Pools を使用します。旅行者はユーザー名とパスワードでサインインし、JWT(アクセストークンと ID トークン)を受け取ります。フロントエンドは ID トークンを Cognito Identity Pool と交換し、アクセスキー、シークレットキー、セッショントークンからなる一時的な AWS 認証情報を取得します。これらの認証情報を使って、Signature Version 4 (SigV4) で AgentCore ランタイムへの WebSocket 接続と API Gateway へのリクエストに署名します。認証された旅行者だけがアプリケーションとサービス API に到達できます。

認証と WebSocket 接続フロー

フロントエンドは一時的な AWS 認証情報を使用して、SigV4 で署名された WebSocket 接続を AgentCore ランタイムに対して開き、ID 検証のためにアクセストークンを送信します。ブラウザは 16 kHz PCM オーディオをストリーミングし、同じ接続を介して音声応答とツール通知を受信します。サーバー側のプロキシは中間に存在しません。

次の図は、ブラウザ、Amazon Cognito、AgentCore ランタイム間の認証および WebSocket 接続のシーケンスを示しています。

図 2: 旅行者が Amazon Cognito で認証し、ブラウザが AgentCore ランタイムへの SigV4 署名付き WebSocket を開き、Amazon Nova 2.5 Sonic が双方向で音声をストリーミングする

音声インタラクションと動的ツール呼び出し

旅行者が自分の座席を見るよう依頼します。Nova 2.5 Sonic がリクエストを文字起こしし、エージェントが必要なツールを選択します。エージェントは AgentCore Gateway を介して MCP を使ってそれらを並行して呼び出し、Gateway が各呼び出しを API Gateway への REST リクエストに変換します。Lambda 関数が DynamoDB にクエリして結果を返し、Nova 2.5 Sonic がすべてをまとめた音声応答をストリーミングします。ツール呼び出しは 非同期で実行されるため、データの読み込み中に会話が止まることはありません。

次の図は、エージェントが音声リクエストを処理し、AgentCore Gateway を介してバックエンドのツールを動的に呼び出す方法を示しています。

図 3: 音声リクエストが Nova 2.5 Sonic、AgentCore Gateway、API Gateway、Lambda、DynamoDB を通じて処理され、音声応答がストリーミングで返される

ナレッジベースからのポリシーの質問への回答

旅行者が手荷物ポリシーについて尋ねると、エージェントは AgentCore Gateway を介してネイティブコネクタで Amazon Bedrock Knowledge Bases にアクセスします。ナレッジベースは管理型リランカーによるエージェント型検索を実行し、関連するポリシーの記述を引用として返します。Nova 2.5 Sonic が回答を組み立て、旅行者に音声で伝えます。

次の図は、エージェントが Amazon Bedrock Knowledge Bases から根拠となる記述を取得してポリシーの質問に回答する様子を示しています。

図 4: ポリシーの質問が Amazon Bedrock Knowledge Bases によって回答され、旅行者に音声で伝えられる

オペレーターへのエスカレーション

コンシェルジュは、リクエストを満たせない場合や旅行者が希望した場合に、旅行者を人間の担当者に引き継ぎます。旅行者が確認した後、エージェントは EscalateToAgent ツールを呼び出します。Lambda がエスカレーションを DynamoDB に記録し、推定待ち時間付きの参照番号を返します。エージェントはその参照番号を伝え、Amplify フロントエンドがサポートラインに電話をかけます。このサンプルにはコンタクトセンター アプリケーションは含まれていないため、人間との接続は設定したサポート番号に依存します。

次の図は、旅行者がオペレーターを要求した際のエスカレーションフローを示しています。

図 5: エージェントがエスカレーションを DynamoDB に記録し、参照番号を伝え、フロントエンドがオペレーターに電話をかける

コンシェルジュのウォークスルー

ブラウザで Amplify URL を開き、AppUser の認証情報でサインインします。マイクのボタンを選択して音声会話を開始します。エージェントが名前で挨拶し、バックグラウンドで旅程を表示します。そこからは、自然に話しかけることで座席の変更、遅延の確認、ポリシーの確認、オペレーターへの接続ができます。次のビデオは、挨拶からエスカレーションまでの完全なセッションを示しています。

会話全体が単一の WebSocket 接続を介してハンズフリーで実行されます。エージェントは書き込む前にすべての変更を確認します。航空便番号は聞き取りやすくなるよう 1 文字ずつ読み上げ、バックグラウンドでバックエンドのツールを呼び出すため、顕著な遅延はありません。

クリーンアップ

課金が発生し続けないように、デプロイされたリソースを削除します。まず削除内容をプレビューし、その後クリーンアップを実行します。

./cleanup-all.sh --dry-run
./cleanup-all.sh

このスクリプトは、フロントエンドから始まり、次に AgentCore ランタイム、AgentCore Gateway、バックエンドインフラストラクチャという順に、リソースを逆順に破棄します。

まとめ

この記事では、AWS 上で音声トラベルコンシェルジュを構築する方法を紹介しました。認証には Amazon Cognito、エージェントのホスティングには Amazon Bedrock AgentCore、ビジネスロジックには API Gateway と Lambda、ストレージには DynamoDB、ポリシーの回答には Amazon Bedrock Knowledge Bases を使用します。レイヤー化された設計により、フロントエンド、エージェント、バックエンドが分離され、それぞれが独自に開発およびスケールできます。コンシェルジュは、MCP ツールを通じて旅程、座席変更、機内食の設定、フライト状況、マイレージに関する質問、ポリシーの参照、オペレーターへのエスカレーションを管理します。Amazon Nova 2.5 Sonic は、低レイテンシの音声、並列ツール呼び出し、自然な割り込み処理をもたらします。従量課金制の料金と自動スケーリングによりコストはトラフィックに連動し、MCP 統合によりエージェントコードに触れることなく新しい Lambda 関数を追加できます。始めるには、 GitHub のソリューションリポジトリ にアクセスし、自身の航空会社のシステムに合わせて調整してください。

追加リソース


著者について

原文の出典

AWS Machine Learning

内容について

原文の公開と権利は出典元に帰属します。

機械翻訳 · 原文をご参照ください