GeminiのMultimodal Live APIをコピペだけで試してみた!
1. はじめに
GeminiのMultimodal Live APIはご存知でしょうか?
GeminiのことはGeminiに聞いてみようということで聞いてみました。
Gemini Multimodal Live APIとは
- Gemini APIの一部であり、Geminiとの双方向音声・動画を低レイテンシでやり取りできるAPIです。
- 音声、動画、テキストなど、複数のモダリティのデータをリアルタイムでGeminiに送信し、応答を受け取ることができます。
- これにより、インタラクティブでダイナミックなAIアプリケーションを開発することが可能になります。
技術的な詳細
- ストリーミング音声認識:音声をストリーミングで送信し、リアルタイムでテキストに変換できます。
- ストリーミング動画認識:動画をストリーミングで送信し、リアルタイムで解析できます。
- WebSocket経由の低レイテンシ通信が実現していて、音声のやり取りをまさに“会話”として行えます。
活用例
- 無人テクニカルサポート:スマートフォンの操作画面を共有し、リアルタイムでサポートを受ける。
- 適応型教育ツール:学習者の習得ペースに合わせて、リアルタイムで教材や問題の難易度を調整する。
- リアルタイムでの状況把握と、それに応じた適切な応答を必要とする場面で活躍が期待されます。
今後XRデバイスのカメラを使ってリアルタイムに状況把握しながら適切な回答を得るような時代が来るかもしれません。
このMultimodal Live APIを今回はUnityのアプリとして作成してみました。この作成する中で下記の制約の中で試してみました。
制約をかけた理由はこんなことできるのかな?という興味のためです。
制約
- ソースコードは全てGeminiに依頼する
- ソースコードは全てコピペでUnity側に貼り付ける
2. できたもの
まずはできたものです。
下記の機能を実装できました。
- ストリーミング動画認識
- テキスト指示
- テキスト応答
本当はストリーミング音声認識もやりたかったのですが、時間がかかりそうなので今回は対象外にしました。
3. 環境
- Unity 6000.0.37f1
4. 得た知見
新しいAPIは他の言語のサンプルを変換してもらう
新しいAPIは生成してくれないため、公式から公開されている他の言語のサンプルを見つけて、それを変換すると良さそう。
サンプルのソースコードはプロンプトに貼り付ける
これは今回だけかもしれませんが、サンプルのソースコードのURLでは変換できず、プロンプトに貼り付けたところある程度変換できました。
サンプルの変換は少しずつ
サンプルを変換は全て行うとすると全て変換してもらえない、省略されているところが多いので、サンプルを理解してほしい機能を少しずつ指定して変換してもらった方が良さそうです。
もちろんAPIの理解が必要
動かない時になぜ動かないのかなど解析する時には結局APIの理解が必要です。
サンプルがあれば理解せずに使うことができるのではないかと思いましたが、そこまではできませんでした。
5. 試してみた内容
Geminiに直接聞く
まずGeminiにMultimodal Live APIに対応したUnityにスクリプトを生成するように依頼しました。
しかしMultimodal Live APIを直接操作するスクリプトはまだ公式に提供されていないということで、一般的なWebSocket通信とUnityのUIを組み合わせたサンプルスクリプトが生成されました。
サンプルを探す
Geminiにノーヒントで聞いてもWebSocket通信のサンプルしか生成されないため、異なる言語でもサンプルがあれあUnityのスクリプトに変換できるのではないかと思いサンプルを探しました。
公式をサイトを見るとPythonのコードがありました。
しかし google-genai
パッケージを利用するためそのままではスクリプトに変換することができません。
さらに探したところ下記のサンプルを見つけました。
ここには下記のように記載されています(DeepL翻訳)。
これであればUnityのスクリプトに変換できるはずです。
PythonユーザーはMultimodal Live APIにアクセスするためにGoogle GenAI SDKを使用してビルドする必要がありますが、基礎となるAPIは安全なウェブソケットを介して提供されるため、プロトコルがどのように動作するかを理解するために以下の例が提供されています。
Unityのスクリプトに変換
PythonのコードをUnityのスクリプトに変換します。
GitHubの下記URLを指定して変換してみました。
https://github.com/google-gemini/cookbook/blob/main/gemini-2/websockets/live_api_starter.py
しかし生成されたスクリプトはuriも違うし処理内容も違うものでした。
GitHubのページだからこうなるのかと思い、下記RawのURLでも試しましたが同じでした。
https://raw.githubusercontent.com/google-gemini/cookbook/refs/heads/main/gemini-2/websockets/live_api_starter.py
このため上記Pythonコードを全てコピーしてGeminiのプロンプトに貼り付けたところUnityのスクリプトに変換できました。
細かい調整
Unityスクリプトに変換できたのですがPythonのコードで記載されている機能全てが変換されているわけではありませんでした。
例えば下記のような状態でした。
- 音声の送信処理はあるがどこからも実行されていない。
- 動画のストリーミングをしたいが、カメラの映像を取得していない。
- 画面には何も表示されない
機能が実装されていない部分に関しては、ここに機能を指定して変換を依頼することで次第に機能が充実していきました。
画面に表示する部分は具体的にどう出力してほしいかを指定することで実現できました。
動作確認
スクリプトができたので動作を確認してみました。
しかし期待通りには動きませんでした。
ここからはよくあるようにデバッグが始まりました。
どこまで通信ができているか、messageの内容にどこまで対応できているかなど、変換前のPythonコードやGeminiの公式ドキュメントを確認して、間違っているところがあれば修正するを繰り返します。
当初変換前のPythonコードやGeminiの公式ドキュメントを読まなくても簡単にできるのかと思っていましたが、そんなことはなくよく理解する必要がありました。
6.まとめ
今回は制約をかけてMultimodal Live APIを動かしてみました。
何も考えずGeminiに依頼するだけでは実現することはできず、知見に記載したような工夫が必要なことがわかりました。
しかしこれだけ行えば最低限利用するだけであれば実現ができることがわかりました。
でも人間は見て確認したりある程度の知識は必要になるなと感じています。
Multimodal Live APIは今後XRグラスの映像を基に常に私たちを補助してくれるために重要な技術となると考えられるため期待していきたいです。
Discussion