航空公司的應用和網站早已支援旅客查詢航班、挑選座位和管理預訂。如果在這些介面之上再疊加一層自然語音互動,旅客只需開口說話就能完成同樣的操作,既不用離開當前應用,也不必在多個頁面之間來回切換。不過,構建這樣一層並不輕鬆:需要讓雙向音訊流穩定傳輸,在多輪對話中始終保留上下文,在不與現有後端緊耦合的前提下接入既有系統,還要在節假日前的高峰流量下按需擴充套件。
本文將演示如何為航空公司應用加入一個語音旅行管家,它建立在三項託管服務之上。Amazon Bedrock AgentCore 是一個用於安全構建、部署和運營 AI 代理的平臺,允許自由選擇框架與模型;Amazon Nova Sonic on Bedrock 是面向即時語音的語音到語音模型;Amazon Bedrock Knowledge Bases 則是完全託管的檢索增強生成服務,可讓回答紮根於企業自有文件。旅客開口之後,管家可以調出行程、更改座位、更新餐食偏好、回答政策問題,並在旅客要求時轉接人工客服。
值得注意的是,管家是與現有介面並存的,而不是取而代之,因此旅客可以在同一會話中自由切換點選與語音兩種方式。它執行在按需擴充套件的服務上,開發者可以把精力放在體驗本身而不是基礎設施上。AI 層透過合成資料連線到一套示例航空公司後端,方便把同樣的模式遷移到自有系統。整個專案按模組拆分,可以只複用那些適配現有後端的部分,並把它們作為工具暴露給代理。
按照文中列出的學習目標,讀者將掌握:使用 AWS Cloud Development Kit(AWS CDK)在 AWS 上部署語音 AI 管家;用 Strands Agents 框架和 Amazon Nova 2.5 Sonic 構建代理,並託管在 AgentCore 執行時上;透過 AgentCore Gateway 以 Model Context Protocol(MCP)把代理連到後端服務;用 Amazon Bedrock Knowledge Bases 回答航空公司政策問題;以及在轉接人工客服時提供參考編號和預計等待時間。
整體架構把前端、AI 代理和後端服務劃分為相互獨立的層,便於各自開發與擴充套件。MCP 是一種連線 AI 應用與外部工具、資料的開放標準,它在代理和後端之間傳遞標準化訊息,從而讓兩者保持松耦合。方案部署的服務包括:Amazon Cognito 負責使用者認證並簽發臨時 AWS 憑證以支援簽名 API 訪問;AgentCore 執行時以每會話 microVM 隔離的方式託管代理;AgentCore Gateway 把後端端點暴露為可發現的 MCP 工具;Amazon API Gateway 以 IAM 授權釋出 REST 端點;AWS Lambda 承載行程、座點陣圖、旅客資訊更新、航班狀態、忠誠度、政策查詢與升級等業務邏輯;Amazon DynamoDB 儲存客戶檔案、預訂、旅客、座點陣圖、購買歷史、偏好、對話記錄和航班資料;Bedrock Knowledge Bases 基於航空公司政策文件作答;Amazon SES 傳送郵件通知;AWS Amplify 託管 React 前端。
架構圖分為四個部分。A 部分為後端基礎設施,用五個 CDK 堆疊部署 DynamoDB 表、Lambda 函式、API Gateway 端點、Bedrock Knowledge Bases 和 Cognito。B 部分是 AgentCore Gateway,由一個 CDK 堆疊基於 MCP 協議建立閘道器,並把每個後端端點暴露為代理可以按名稱呼叫的工具。C 部分是 AgentCore 執行時,由兩個 CDK 堆疊配置執行時基礎設施:Amazon ECR 存放容器映象,Amazon S3 儲存原始碼上傳,AWS CodeBuild 生成 ARM64 Docker 映象,執行時則藉助 Strands Agents 框架與 Amazon Nova 2.5 Sonic,並支援 WebSocket。D 部分是前端,由一個 CDK 堆疊把 React 應用部署到 AWS Amplify。
使用者請求的流轉過程如下:使用者在瀏覽器或移動裝置上開啟託管於 AWS Amplify 的 Web 應用;在登入頁輸入憑證後,Cognito 完成認證並返回 JWT 與臨時 AWS 憑證;前端與 Bedrock AgentCore 建立經過 SigV4 簽名的 WebSocket 連線,開啟語音會話;執行時用 Cognito 校驗令牌,並透過 Bedrock 初始化 Nova 2.5 Sonic;使用者說話後,Nova 2.5 Sonic 處理音訊並觸發工具呼叫,代理透過 MCP 呼叫 AgentCore Gateway 來獲取航班資料、管理預訂和更新旅客偏好;閘道器再把請求以 REST 呼叫轉發給 API Gateway,進而路由到 Lambda;Lambda 查詢 DynamoDB 中的預訂、旅客、座點陣圖、忠誠度狀態和航班資訊,並透過 SES 傳送郵件通知;最後 Nova 2.5 Sonic 生成結合上下文的語音回覆,經 AgentCore 執行時透過 WebSocket 流式返回。遇到政策類問題時,閘道器會經由 MCP 的知識庫聯結器直接查詢 Bedrock Knowledge Bases,知識庫以引用形式返回相關政策段落。當使用者要求人工客服時,Lambda 會在 DynamoDB 中記錄升級並返回參考編號,隨後 Amplify 從使用者裝置發起呼叫,接通真人客服。
構建與運維環節同樣清晰。AWS CDK 用單個指令碼完成部署:構建過程把代理原始碼上傳到 Amazon S3,觸發 CodeBuild 生成容器映象並存入 Amazon ECR 供 AgentCore 執行時使用。Amazon CloudWatch 彙總所有服務的日誌、指標和告警,AWS KMS 負責靜態資料加密。開始前的準備條件包括:一個 AWS 賬戶;在部署區域為 Amazon Nova 2.5 Sonic 開通模型訪問許可權(知識庫使用服務託管嵌入模型,因此無需單獨申請嵌入模型許可權);Node.js 20.x 或更高版本;Python 3.12 或更高版本;已配置憑證的 AWS CLI 2.x;透過 npm 安裝並引導賬戶的 AWS CDK CLI 2.x;以及來自 aws-samples GitHub 倉庫的配套程式碼。部署時只需克隆倉庫、配置憑證並執行部署指令碼,詳細步驟可參考倉庫 README。
示例資料模型方面,API Gateway 釋出了帶 IAM 授權端點和 Lambda 整合的 REST API,DynamoDB 以個位數毫秒延遲和按需擴充套件能力儲存資料,覆蓋客戶檔案、預訂、旅客、座點陣圖、購買歷史、偏好、對話記錄和航班狀態。
在政策問答上,旅客常會詢問行李限額、改簽費用、寵物出行和忠誠度條款。方案透過 Bedrock Knowledge Bases 的檢索增強生成(RAG)以航空公司政策文件為依據作答,倉庫中自帶行李、取消與退款、改簽與重新預訂、票價等級規則、忠誠度條款、寵物出行、特殊協助和升艙等示例政策文件。使用者把文件上傳到 Amazon S3 並一次性建立知識庫,之後的嵌入、分塊、索引、儲存和檢索都由 Bedrock 處理,儲存執行在 Amazon S3 Vectors 上;Smart Parsing 能讓 PDF 中的表格和結構化版式被準確檢索。政策文件變更時只需同步知識庫,新內容立即可用,無需重新部署流水線。把知識庫接到代理也很直接:在 AgentCore Gateway 中將其新增為 Connectors 目標,選擇標準檢索或代理式檢索,閘道器就會把它作為具名 MCP 工具與後端 API 工具並列暴露,代理在執行時自動發現並按名稱呼叫,無需編寫自定義 Lambda 或檢索程式碼。若要使用自有政策,把 PDF 或文本檔案放入政策文件目錄並重新部署知識庫堆疊即可。
語音 AI 處理方面,每個會話都作為託管容器執行在 AgentCore 執行時上,並具備 microVM 隔離,因此在高負載下旅客對話依然彼此獨立;AgentCore 還提供自動擴充套件、內建監控和會話路由。生產部署建議加入 Amazon Bedrock Guardrails,用於過濾提示注入嘗試並驗證回答的依據來源。本方案採用“寫入前確認”模式,即在做出任何更改前先請旅客確認,再加上能追溯到源文件的知識庫引用,構成負責任 AI 實踐的基本基線。代理使用 Strands BidiAgents 框架定義系統提示、工具和對話流程,而 Nova 2.5 Sonic 則為管家帶來多項能力:跨口音的語音識別與對背景噪聲的魯棒性;可適應旅客語調的口語回覆;低延遲的雙向流式傳輸;無需暫停對話即可並行取數或呼叫工具的非同步工具呼叫;在等待工具結果時生成臨時語音以掩蔽延遲,保持對話自然;支援打斷與自然輪流;以及跨多輪延續的上下文。音訊以前端 16 kHz PCM 的形式經 WebSocket 流向 AgentCore 執行時,Nova 2.5 Sonic 轉寫語音,代理挑選合適的工具並經 MCP 呼叫;AgentCore Gateway 把每次 MCP 呼叫轉換為 REST 請求,Lambda 執行邏輯並返回結果,最終由 Nova 2.5 Sonic 把這些結果整合成一段口語回覆。本方案使用的是具備強推理能力的 Nova 2.5 Sonic,對需要呼叫後端工具並遵循詳細系統提示的語音管家而言,這種推理能力體現在更好的工具呼叫與代理式任務完成等方面。