[アドカレ2025] 「Amazon Nova 2 Sonic」で作るリアルタイム音声対話アプリ 〜色んなサンタと話せるサイトを作ってみた〜

はじめに

お疲れさまです、寺井です。

皆さんサンタクロースと喋ったことありますか?
私はありません。

「サンタクロースと話してみたいなぁ。」
「サンタに悩み事きいてほしいなぁ。」

今回は、Bedrock - Nova2 Sonic を使って、そんな人の要望を叶えるサンタクロースと会話できる夢のようなツールを作ったので、紹介します!

まずは完成品の紹介

まずはぜひお試しを👇

Santa's Voice Chat(別タブでサイトへ遷移します)

※音声が流れますのでイヤホンなどご準備ください
※クリスマスシーズン日中帯のみの期間限定公開

コンセプトとして、色んなタイプのサンタクロースと話せるようになってます。
気分に合わせたサンタクロースと会話して、クリスマス気分を味わいましょう!!🎄

色んな属性のサンタクロースと話せます

今回は4タイプのサンタクロースをお招きしました。🤲

実際の利用動画も踏まえて個別に紹介していきます

標準:万人向け

子供向け:小学生のみんなはこっちをつかってね☆

陽キャ:とにかくテンションを上げたい人向け ↑age↑

ママ風:しっぽりと人生の悩み相談をしたい人向け

チャットでも話せます

「周りに人が居て、話すのはちょっと恥ずかしい...」

そんな方でも大丈夫!👍️
声を出さなくても、チャット送信ができるので、どんなシーンでもサンタと話せます!!
(※イヤホンを忘れずに)

一応日本語っぽく話せます

後述しますが、残念ながら[Nova 2 Sonic]さんまだ日本語対応してません🤤

プロンプトで無理やり日本語を喋らせてる関係上、たまにおかしな発音だったり、漢字の読み方を間違えるシーンがあります。
でもね、人間誰しも間違えるときはありますよね。サンタクロースも人間なんです。
ご愛嬌ということで...。🙏

Amazon Nova 2 Sonic

「Amazon Nova 2 Sonic」とはなんぞ?

  • 2025年12月に発表されたAmazonの第2世代音声間(speech-to-speech)基盤モデル
  • リアルタイムの自然な音声会話をアプリケーションに統合するためのソリューション
  • 音声認識・理解・音声合成を一体で処理することで、遅延の少ないインタラクティブな対話を実現

参考:Amazon Nova 2 Sonic の紹介: 会話型 AI 向けの新しい音声変換モデル | Amazon Web Services ブログ

re:Invent 2025 期間中に発表された新モデルです。

会話に特化した基盤モデルということで、正直使ってるまですごさがわかりませんでしたが、実際に使って話してみると、本当に人間と会話しているような速度で返してくるので感動しました。

対応している言語(2025/12時点)

Amazon Nova 2 Sonic が正式サポートしている言語は以下↓
英語 / フランス語 / イタリア語 / ドイツ語 / スペイン語 / ポルトガル語 / ヒンディー語

モデル自体は多言語データで学習されているからか、意外と日本語も話せます。
でもやっぱりちゃんと聞いてるとイントネーションがおかしいところもあるし、商用利用するには流石に厳しい感じがしました。

日本語対応が待ち遠しいです!

やってみる

ここからは、本サイトを構築した概要をお話していきます。

「aws-samples」サンプルコードの利用

AWSが用意してくれている公式サンプルを利用しました。

GitHub: aws-samples/amazon-nova-samples - Amazon Nova 2 Sonic TypeScript Example
このプロジェクトは、Amazon Nova 2 Sonicモデルと統合し、リアルタイムの音声変換を実現する双方向WebSocketベースのオーディオストリーミングアプリケーションを実装します。このアプリケーションは、Amazonの新しい強力なNova 2 Sonicモデルを活用し、処理と応答の生成を行いながら、Webインターフェースを介した自然な会話を可能にします。

このリポジトリに、「Real-time Audio Streaming with AWS Bedrock Integration(AWS Bedrock統合によるリアルタイムオーディオストリーミング)」のサンプルコードがあったので、これを利用させていただきました。

Node.jsが動くサーバを用意して、このリポジトリからクローン&起動するだけで自前のサーバで簡単に試すことが可能です!

ありがとう…「aws-samples」……!!🙏

セットアップ手順

色ん言語でサンプルコードが用意されていますが、今回はNode.jsで動く環境を用意します。

サーバはEC2(AlmaLinux)を使用しました。

AWS構成

  • ELB:Application Load Balancer

    • EC2の前段に配置
    • ターゲットグループで3000ポートをEC2へルーティング
  • EC2:AlmaLinux OS 9系

    • Bedrockのモデルアクセス用ポリシーを付与したIAMロールを割り当て

必要なIAMポリシー

EC2に割り当てるIAMロールには、以下の権限が必要です。

  • Resource:[arn:aws:bedrock:ap-northeast-1::foundation-model/amazon.nova-2-sonic-v1:0]
  • Action:[bedrock:InvokeModel], [bedrock:InvokeModelWithResponseStream]

設定例↓

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel",
                "bedrock:InvokeModelWithResponseStream"
            ],
            "Resource": [
                "arn:aws:bedrock:{使用するリージョン}::foundation-model/amazon.nova-2-sonic-v1:0"
            ]
        }
    ]
}

Node.jsをインストール

ここからはサーバ側での作業です。

$ curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
2025-12-22 05:24:55 - Cleaning up old repositories...
2025-12-22 05:24:55 - Old repositories removed
2025-12-22 05:24:55 - Supported architecture: x86_64
2025-12-22 05:24:55 - Added N|Solid repository for LTS version: 20.x
2025-12-22 05:24:55 - dnf available, updating...
Node.js Packages for Linux RPM based distros - x86_64                          9.3 MB/s | 1.0 MB     00:00
Last metadata expiration check: 0:00:01 ago on Mon 22 Dec 2025 05:24:55 AM UTC.
Metadata cache created.
N|Solid Packages for Linux RPM based distros - x86_64                           11 MB/s | 923 kB     00:00
Metadata cache created.
2025-12-22 05:24:56 - Repository is configured and updated.
2025-12-22 05:24:56 - You can use N|solid Runtime as a node.js alternative
2025-12-22 05:24:56 - To install N|solid Runtime, run: dnf install nsolid -y
2025-12-22 05:24:56 - Run 'dnf install nodejs -y' to complete the installation.
$ sudo dnf install nodejs
===============================================================================================================
 Package            Architecture       Version                             Repository                     Size
===============================================================================================================
Installing:
 nodejs             x86_64             2:20.19.6-1nodesource               nodesource-nodejs              37 M
~
Installed:
  nodejs-2:20.19.6-1nodesource.x86_64

Complete!

インストール確認

$ node --version && npm --version
v20.19.x
10.8.x

リポジトリのクローン

Gitがなければインストール

$ sudo dnf install git
===============================================================================================================
 Package                          Architecture     Version                           Repository           Size
===============================================================================================================
Installing:
 git                              x86_64           2.47.3-1.el9_6                    appstream            50 k
~
Complete!

公式リポジトリをクローン

$ git clone https://github.com/aws-samples/amazon-nova-samples.git
Cloning into 'amazon-nova-samples'...
remote: Enumerating objects: 5869, done.
remote: Counting objects: 100% (1499/1499), done.
remote: Compressing objects: 100% (647/647), done.
remote: Total 5869 (delta 1048), reused 936 (delta 844), pack-reused 4370 (from 3)
Receiving objects: 100% (5869/5869), 1.18 GiB | 24.19 MiB/s, done.
Resolving deltas: 100% (2537/2537), done.
Updating files: 100% (1419/1419), done.

Node.jsのパッケージをインストール

$ cd amazon-nova-samples/speech-to-speech/amazon-nova-2-sonic/repeatable-patterns/nova-sonic-speaks-first

$ npm install
added 218 packages, and audited 219 packages in 21s

22 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

ビルドとサーバの起動

TypeScriptをビルドしてからサーバを起動します。

$ npm run build
> @amazon/nova-sonic-nodejs-speaks-first@1.0.0 build
> tsc
→エラーがでなければOK

$ npm start
Server listening on port 3000
Open http://localhost:3000 in your browser to access the application

デフォルトだと http://localhost:3000 でサーバが立ち上がります。

今回はEC2にパブリックIPを付与してますので、{サーバのIP}:3000 でアクセスしてみると

Server running on http://localhost:3000

New client connected: 1OmN06sbxQzw9HBjAAAB ←クライアントがWebから接続したときのログ

こんな感じのログが出たら成功です👍

注意:音声利用時にはHTTPS化が必須

APIがHTTPSのみ受け付ける仕様のようで、HTTPS化されていないアクセスだと利用できないため注意が必要です。

HTTPS経由だとちゃんと会話ができました

魔改造ポイントの紹介(Before-After)

そのまま使っても面白くないので、クリスマス仕様に魔改造しました。

最初(リポジトリからクローンした状態)

中間(機能追加)

完成(機能整備&UIを含めた改善)

やっぱりUIって大事です。
すっかりクリスマス気分に浸れますね☺️

UI改善ポイントの紹介

  • プロンプトテンプレートの調整(サンタクロースっぽく喋ってもらうため)
  • 色んなサンタクロースと喋れる切り替えボタン(おもしろ要素)
  • 使用トークン数の表示(使用量の可視化)
  • テーマに沿った画像・インターフェースの改善(画像はGeminiさんに作成してもらいました🤐)

今回のUI改善は、AWSのAI IDE Kiroを使ってサクサク実装しました!
お陰さまでめちゃくちゃ捗りました👍

こういうのやってたらほんと時間溶けます。

補足:トークン消費(API使用料)に関する注意

今回のようなBedrockのAPI利用を行うアプリケーションだと、想定外の請求が怖いですよね。

Bedrockのトークン消費については、CloudWatch メトリクスで確認ができます。
よって、このメトリクスを監視して、サービスの制御を行うなどすれば、大事故は防げるかなと思います。

  • 名前空間   :AWS/Bedrock
  • メトリクス名 :OutputSpeechTokenCount
  • ModelId   :amazon.nova-2-sonic-v1:0

感想とまとめ

_人人人人人人人人人人人人人人人人_
>  AIの ちからって すげー!  <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

いよいよサンタクロースと話せる時代まできました。
サンタクロースはこの世にいませんが、これで誰でもサンタクロースと話せることができますね。🎄

真面目な話、文字だけではなく音声によるアプローチで喜ばれるシーンってたくさんあると思うので、今後のアプリケーション開発の考え方が大きく変わるような気がしました。

ゲームとかにも使われてたらめちゃくちゃ面白そうです!!

皆さんよいクリスマスを~🔔
ありがとうございました!!

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA