みなさんこんにちは。ユニファのエンジニアマネージャーをしています田渕です。
この記事はユニファAdvent Calendar 2023の9日目の記事です。
さて、前回は「憧れの『AIと話す(映像つき)』をつくってみた(前編)」と言うことで、私のSF好きの由来と、Azureで「映像つきのAIと音声話せるサンプルのコードが公開されてるよ!」と言うところまでお話ししました。
後半は、実際にそのコードを動かすまでの過程、およびその成果を書いていこうと思います。
どんな技術が使われているのか
前回は、GitHubにて公開されているリポジトリの中をチラッと見てみました。実際に該当のリポジトリを見て頂くと分かりますが、全体のコード量自体は少ないです。 裏を返せば、「このコード量で動いて喋るAIが作れるのか」と言う驚きの点でもあるのですが。。。
処理の流れとしては至ってシンプルで、
人が話した音声を録音し、文字に起こす
文字をLLM(今回はChatGPT)に与え、返事を考えてもらう。この際、必要に応じて参考情報を検索します。
返事の文字列をAIの言葉として音声に変換
同時にアバターの動作を作る
音声と同時にアバターを動かす
と言った感じです。
必要に応じて参考情報を検索する部分はChatGPTのfunction callingを使っており、ユーザーの発言内容から判断して必要であれば予め登録されているfunctionを実行します。 サンプルではこのfunctionにてDBのテーブルを検索するようになっています。
利用されているのは以下のサービスです。 太字で書いてある部分がこの仕組みの根幹になるサービスで、その他、外部情報を格納しているところは通常の文字で記載しています。
Azure Cognitive Search
Azure SQL
- Azure Blob Storage account
このサンプルプログラムを動かす場合には、Readmeに記載されている通り、上記のサービス類のアカウントを作成し、 その情報をローカル環境であれば設定ファイル(local.settings.json)に、Azureの本番サーバであれば Azure Static Web Appsの「アプリケーション設定」に設定します。 細かい話ですが、このサンプルプログラムの中で利用されている「Azure Functions Core Tools v4」がnode.jsのV18系までしか対応していないため、動かす時にはご注意ください。
で、私は何を作ったのか。
上述の通り、サンプルプログラムでは外部情報の読み込みまで含めてやっていますが、今回の私は単純にAIちゃんとお話をしたいだけなので、外部情報の読み込みなどの処理は取っ払います。 つまり、先ほど太字にした部分に関する処理だけを残し、他を消して、背景やその他要素の変更を行いました。
現状ではリアルタイムに描画出来るアバターがlisaと言う女性アバターだけなので、そちらを利用します。 デザイン能力など皆無なので、殺風景な画面で恐縮ですが、こんな感じです。
補足解説
動画をご覧頂いて分かるとおり、実はこのWebアプリは話している言葉とアバターの口の形がそれなりに同期しています。 これはAzureの音声つきアバターの機能の一つで、生成された音声データに「口形素ID」と呼ばれる口の形を表すIDが含まれており、それを利用してアバターの口の形を動かすことで人間が話しているように見せることが出来ます。
口形素の出力を取得したら、これらのイベントを使用してキャラクター アニメーションを作成できます。 独自のキャラクターを作成し、自動的にアニメーション化することができます。
と言うことなので、その気になればキット君の画像を喋らせることも出来ます。(キット君に口はありませんが。。。) また、現在はまだ利用できませんが、将来的にはカスタムアバターを登録して利用することができるようになるそうです。
まとめ
と言うことで、今回は私の子供の頃からの憧れ「AIと話す(映像つき)」を自前で?構築する回でした。 一年前まではこんなことができるようになるのは遠い先の話だと思っていたのですが、技術の進化により、次々に夢の仕組みが出来上がってくる毎日で驚くばかりです。 今はまだ、応答までのラグがあったり話し言葉に不自然さが見えることもありますが、GPT-3.5が大きく進化し4になったように、映像や音声に関する技術もこれから飛躍的に向上するのだと思います。 とりあえず、当面の目標はキットくんっぽいものを映像で自作することかな。
ユニファでは、新しい技術を追いかけながら保育をHackできるエンジニアを募集中です!