1. はじめに
- もともとSpeech to Speech 対応のLLMに興味があり、Nova Sonic などを少し触っていた。
- StrandsAgentsで、Bidirectional Streaming (WebSocketによる双方向通信)がサポートされ(※2025/12時点では正式ではなくまだExperimental)、各社のSpeech to Speech対応のLLM(Nova Sonic/Nova 2 Sonic、OpenAI RealtimeAPI、Gemini Live)を使って簡単に音声対話ボットが作れるとのこと。
- 今回はその中から、Gemini Liveとの接続について動作検証する。
2. やったこと
- Google AI Studio で、Geminiを呼び出すためのAPIキーを作成する。
- StrandsAgentでGemini Live APIを呼び出し、日本語での音声対話ができるボットを作成する。
- 日本語音声で対話を楽しむ。
3. 構成図
4. 手順
4.1 Google AI Studio でのAPIキー作成
- Google AI Studioにて、Geminiを使うためのAPIキーを発行する(発行の手順は以下のサイトなどを参照)。
4.2 StrandsAgentsの作成
環境構築
- StrandsAgentsの公式手順「Gemini Live [Experimental]」に従って環境構築する。
- 今回はPC(Windows11)にPython 3.13.5 がインストールされている状態で、venvした上でpip installなどの手順を実施。
Pythonコード
- 2025/12/22時点では、公式手順のサンプルそのままだとエラーになるので、少しだけ修正した(以下の箇所など)。
誤:from strands.experimental.bidi.models import BidiGeminiLiveModel
正:from strands.experimental.bidi.models.gemini_live import BidiGeminiLiveModel
main-gemini.py
import asyncio
from strands.experimental.bidi import BidiAgent
from strands.experimental.bidi.io import BidiAudioIO, BidiTextIO
from strands.experimental.bidi.models.gemini_live import BidiGeminiLiveModel
async def main() -> None:
model = BidiGeminiLiveModel(
model_id="gemini-2.5-flash-native-audio-preview-09-2025",
provider_config={
"audio": {
"voice": "Kore",
},
},
client_config={"api_key": "[Google AI Studioで取得したAPIキー]"},
)
# stop_conversation tool allows user to verbally stop agent execution.
agent = BidiAgent(model=model)
audio_io = BidiAudioIO()
text_io = BidiTextIO()
await agent.run(inputs=[audio_io.input()], outputs=[audio_io.output(), text_io.output()])
if __name__ == "__main__":
asyncio.run(main())
4.3 動作確認
- 日本語でやりとりができ、ほぼ遅延なく自然なペースでの会話を行うことができた。NotebookLMで音声形式で要約してくれる時の話し方に近い感じ。
- このモデル(gemini-2.5-flash-native-audio-preview-09-2025)はまだPreviewということもあり、イントネーションや漢字の読み方などがおかしいところはある。
- 会話内容が分かるように、ユーザ音声、AI音声の両方を文字化して表示もしてくれる。
- サンプル録音したものはこちら。
5. 所感
- LLMの品質について:ちょっと日本がおかしいかも??となることはあるが、結構ノリがよい軽快なトークで、近く実用につながりそうな可能性を感じた。
- StrandsAgentsについて:Gemini Liveを検証する前に、先にNova 2 Sonicも試したりしてみたが、ほぼmodel名の差し替えだけでLLMを切り替えることができ、便利にできているなと感じた。
6. 参考
- StrandsAgents公式 Gemini Live接続方式
- Bedrock(Nova 2 Sonic) 接続
- OpenAI RealtimeAPI 接続
