ニュース

Gemini Flash Live完全ガイド|音声AIの使い方・料金・コード例

この記事の結論

Gemini 3.1 Flash Liveのリアルタイム音声AI機能を徹底解説。料金プラン・使い方・APIコード例・競合比較まで、開発者向けに網羅します。

「リアルタイムで会話できるAIエージェントを作りたいけど、どのAPIを使えばいいんだろう?」

先日、クライアントのカスタマーサポートチームで音声AIエージェントの構築を検証していた際、Gemini 3.1 Flash Liveを試してみました。従来のSTT→LLM→TTS方式と比べて、応答のレイテンシが体感で半分以下。ユーザーの感情的なトーンの変化にもリアルタイムで反応してくれる。正直、音声AIの世界が一段階進んだと感じました。

この記事では、Gemini 3.1 Flash Liveの全機能を、料金・使い方・APIコード例・競合比較まで網羅的に解説します。5分でセットアップできる最小構成から、本番環境を意識したエラーハンドリングまでカバーしているので、ぜひ手を動かしながら読んでみてください。

リアルタイム音声AIの基本概念やエージェント設計パターンについては、AIエージェント構築完全ガイドで体系的にまとめています。

まず試したい「5分即効」セットアップ3選

即効テクニック1:最小構成のテキスト対話セッション

まずはテキストベースでLive APIの動作を確認してみましょう。音声入出力の前に、セッション管理の仕組みを理解するのが近道です。

# 動作環境: Python 3.11+, google-genai>=1.0
# インストール: pip install google-genai
import asyncio
from google import genai

client = genai.Client(api_key="YOUR_API_KEY")
model = "gemini-3.1-flash-live-preview"

config = {
    "response_modalities": ["TEXT"],
    "system_instruction": "あなたは日本語で応答するAIアシスタントです。簡潔に回答してください。"
}

async def main():
    async with client.aio.live.connect(model=model, config=config) as session:
        message = "Gemini Flash Liveの特徴を3つ教えてください"
        print(f"送信: {message}")
        await session.send(input=message, end_of_turn=True)

        async for response in session.receive():
            if response.text:
                print(f"応答: {response.text}")

asyncio.run(main())

ポイント:

  • end_of_turn=True でユーザーの発話終了を明示
  • セッションは async with で自動管理。切断処理を書く必要なし
  • response_modalities["AUDIO"] に変えれば音声応答に切り替え可能

動作環境: Python 3.11+, google-genai>=1.0, macOS / Linux

即効テクニック2:リアルタイム音声対話(マイク入力→音声出力)

次に、マイクからの音声入力をリアルタイムで処理し、音声で応答するセッションを構築してみましょう。

# 動作環境: Python 3.11+, google-genai>=1.0, pyaudio
# インストール: pip install google-genai pyaudio
import asyncio
import pyaudio
from google import genai

client = genai.Client(api_key="YOUR_API_KEY")

AUDIO_FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
CHUNK = 1024

config = {
    "response_modalities": ["AUDIO"],
    "speech_config": {
        "voice_config": {
            "prebuilt_voice_config": {
                "voice_name": "Kore"  # 日本語対応ボイス
            }
        }
    },
    "system_instruction": "日本語で自然に会話してください。"
}

async def audio_session():
    pa = pyaudio.PyAudio()
    mic_stream = pa.open(format=AUDIO_FORMAT, channels=CHANNELS,
                         rate=RATE, input=True, frames_per_buffer=CHUNK)
    speaker_stream = pa.open(format=AUDIO_FORMAT, channels=CHANNELS,
                             rate=RATE, output=True)

    async with client.aio.live.connect(
        model="gemini-3.1-flash-live-preview", config=config
    ) as session:
        # マイク入力を送信するタスク
        async def send_audio():
            while True:
                data = mic_stream.read(CHUNK, exception_on_overflow=False)
                await session.send(input={"data": data, "mime_type": "audio/pcm"})
                await asyncio.sleep(0.01)

        # 音声応答を再生するタスク
        async def receive_audio():
            async for response in session.receive():
                if response.data:
                    speaker_stream.write(response.data)

        await asyncio.gather(send_audio(), receive_audio())

# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
asyncio.run(audio_session())

ポイント:

  • Speech-to-Speech方式: 従来のSTT→LLM→TTSの3段パイプラインを1ステップに統合
  • voice_nameKore(日本語向け)を指定。他に Puck, Charon, Aoede 等が利用可能
  • PyAudioの exception_on_overflow=False でバッファオーバーフローを回避

動作環境: Python 3.11+, google-genai>=1.0, pyaudio, macOS / Linux(Windowsも可だがPyAudioのインストールに注意)

即効テクニック3:Function Callingで外部APIと連携

Flash Liveのセッション内でFunction Callingを使い、外部データソースと連携するエージェントを構築してみましょう。

# 動作環境: Python 3.11+, google-genai>=1.0
import asyncio
import json
from google import genai
from google.genai.types import FunctionDeclaration, Tool

client = genai.Client(api_key="YOUR_API_KEY")

# 外部API連携の関数定義
weather_func = FunctionDeclaration(
    name="get_weather",
    description="指定した都市の天気情報を取得します",
    parameters={
        "type": "object",
        "properties": {
            "city": {"type": "string", "description": "都市名(日本語)"}
        },
        "required": ["city"]
    }
)

tools = [Tool(function_declarations=[weather_func])]

config = {
    "response_modalities": ["AUDIO"],
    "tools": tools,
    "system_instruction": "天気について質問されたら、get_weather関数を使って回答してください。"
}

# ダミーの天気API(本番では実際のAPIに置き換え)
def get_weather(city: str) -> dict:
    return {"city": city, "temp": "22°C", "condition": "晴れ"}

async def agent_session():
    async with client.aio.live.connect(
        model="gemini-3.1-flash-live-preview", config=config
    ) as session:
        await session.send(input="東京の天気を教えて", end_of_turn=True)

        async for response in session.receive():
            # Function Call のハンドリング
            if response.tool_call:
                for fc in response.tool_call.function_calls:
                    result = get_weather(**json.loads(fc.args))
                    await session.send(
                        input={"function_response": {
                            "name": fc.name,
                            "response": result
                        }}
                    )
            if response.text:
                print(f"Agent: {response.text}")

# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
asyncio.run(agent_session())

ポイント:

  • 音声対話中にリアルタイムでFunction Callingが発火する
  • 外部API(天気、在庫検索、予約システム等)との連携が可能
  • セッション管理とFunction Callingが同一WebSocket内で完結

Gemini 3.1 Flash Liveとは — 3つの革新

2026年3月にGoogleが発表したGemini 3.1 Flash Liveは、リアルタイム音声対話に特化したマルチモーダルAIモデルです。従来の音声AI処理パイプラインを根本から変える3つの技術的革新があります。

アプローチ 従来方式(STT→LLM→TTS) Flash Live(Speech-to-Speech)
処理ステップ 3段階(音声認識→テキスト処理→音声合成) 1段階(音声→音声の直接処理)
レイテンシ 1.5-3.0秒 200ms以下
感情認識 テキスト化で失われる 音声のトーン・ピッチ・ペースを直接解析
言語対応 各段階で個別設定 90言語以上をネイティブサポート

革新1: Speech-to-Speech直接処理

従来のSTT(Speech-to-Text)→ LLM → TTS(Text-to-Speech)パイプラインでは、音声をテキストに変換する段階でイントネーション、感情、ニュアンスが失われていました。Flash Liveは音声信号を直接処理し、音声で応答する「Speech-to-Speech」アーキテクチャを採用。テキスト変換の中間ステップを排除することで、より自然な対話を実現しています。

革新2: 感情・トーン認識

ピッチ、ペース、抑揚などの音響的ニュアンスを認識し、ユーザーの感情状態に応じて応答スタイルを動的に調整します。たとえばフラストレーションを検知した場合は、より落ち着いたトーンで丁寧に対応するといった適応が可能です。

革新3: 90言語以上のネイティブサポート

多言語対応がモデルレベルで組み込まれているため、言語切り替え時のレイテンシ増加がほぼありません。日本語での自然な会話精度も高く、敬語・カジュアルの使い分けも可能です。

料金プランと無料枠の実態

2026年3月末時点での最新の料金情報をまとめます。

項目 Gemini API(AI Studio) Vertex AI
モデル名 gemini-3.1-flash-live-preview gemini-3.1-flash-live-preview
現在の料金 無料(プレビュー期間中) 要問い合わせ(エンタープライズ)
レート制限 プロジェクトにより変動 SLA付き
用途制限 プレビュー=非本番推奨 本番利用可

正直に言うと、「無料」には注意が必要です。現在はプレビュー版として無料提供されていますが、Googleのプレビュー規約には「プレビューサービスは本番利用向けではなく、条件は変更される可能性がある」と明記されています。本番環境での利用を検討する場合は、GA(一般提供)後の料金体系を待つか、Vertex AI経由でのエンタープライズ契約を検討してください。

参考値: 同シリーズのGemini 3.1 Flash-Lite(テキストモデル)は $0.25/1M入力トークン、$1.50/1M出力トークンで提供されています。Flash LiveのGA後の料金はこれより高くなると予想されます。

料金情報の最終確認: 2026-03-29

使い方ガイド — Web・API・モバイル

1. Google AI Studio(Web)で試す

最も手軽な方法です。Google AI Studioにアクセスし、モデル選択で「Gemini 3.1 Flash Live Preview」を選択。左サイドバーの「Live」タブからリアルタイム音声対話を開始できます。APIキーの発行もここから行えます。

2. Gemini Live(モバイルアプリ)

Geminiアプリ(Android/iOS)のLive機能で利用可能です。200カ国以上で提供されており、Gemini無料版でもLive音声対話が使えます。日常的な音声アシスタントとしての体験を確認するのに最適です。

3. Search Live

Google検索にFlash Liveが統合されたSearch Live機能も200カ国以上に拡大されています。「検索しながら音声で質問する」というユースケースの参考になります。

4. Live API(開発者向け)

WebSocket接続でリアルタイム双方向通信を行うAPIです。前述のコード例で示した通り、Python SDKまたは生のWebSocketで利用できます。公式のサンプルリポジトリは GitHub: gemini-live-api-examples にあります。

ユースケース5選 — 実際に何に使えるか

ユースケース1: カスタマーサポートの一次対応自動化

Flash Liveの感情認識機能を活用し、電話対応の一次対応をAIエージェントが担当。フラストレーションを検知した場合は即座に人間オペレーターにエスカレーションするロジックを組み込めます。Function Callingで顧客DBと連携し、発話内容から顧客情報を自動引き当てることも可能です。

ユースケース2: リアルタイム通訳エージェント

90言語以上のネイティブサポートを活かし、会議中のリアルタイム通訳エージェントを構築できます。従来の翻訳APIでは文単位の処理に1-2秒のレイテンシがありましたが、Flash Liveでは200ms以下でのリアルタイム変換が期待できます。

ユースケース3: 音声ベースのデータ入力

倉庫や工場など、手がふさがっている環境でのデータ入力。「棚A-3にりんご50箱入庫」といった音声指示をFunction Calling経由で在庫管理システムに直接反映できます。

ユースケース4: 教育・語学学習アシスタント

発音の評価、会話練習、質疑応答をリアルタイムで行う語学学習エージェント。感情認識で学習者の困惑を検知し、説明の粒度を自動調整できます。

ユースケース5: アクセシビリティ支援

視覚障害者向けの音声ナビゲーション、聴覚障害者向けのリアルタイム文字起こし+要約など。マルチモーダル対応(音声+映像入力)を活かしたアクセシビリティツールの構築が可能です。

競合比較 — ChatGPT Voice・Claude Voice・Flash Live

機能 Gemini Flash Live ChatGPT Voice Claude
リアルタイム音声対話 ⭕ Speech-to-Speech ⭕ Advanced Voice Mode ❌ 音声モードなし
感情認識 ⭕ トーン・ピッチ解析 ⭕ トーン理解
多言語対応 90言語以上 50言語以上 テキストのみ多言語
レイテンシ 200ms以下 300-500ms N/A
Function Calling(音声中)
映像入力(マルチモーダル) ⭕ (カメラ入力)
API料金 無料(プレビュー) Realtime API: $0.06/1K tokens N/A
コーディング能力 ★★★☆☆ ★★★★☆ ★★★★★
長文分析 ★★★☆☆ ★★★★☆ ★★★★★

比較のポイント:

  • 音声AI特化ならFlash Live: レイテンシと多言語対応で優位。プレビュー無料も魅力
  • 汎用性ならChatGPT Voice: Voice Mode + 画像生成 + ブラウジングの統合が強い
  • Claudeは音声非対応: テキストベースのコーディング・分析では最強だが、音声AI用途では選択肢に入らない

比較情報の最終確認: 2026-03-27

WebSocket直接接続のコード例

SDKを使わず、生のWebSocketで接続する場合のコード例です。カスタムプロトコルの実装や、SDK非対応の言語から利用する際の参考にしてください。

# 動作環境: Python 3.11+, websockets>=12.0
# インストール: pip install websockets
import asyncio
import json
import websockets

API_KEY = "YOUR_API_KEY"
MODEL = "gemini-3.1-flash-live-preview"
WS_URL = f"wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent?key={API_KEY}"

async def raw_websocket_session():
    async with websockets.connect(WS_URL) as ws:
        # セットアップメッセージ
        setup = {
            "setup": {
                "model": f"models/{MODEL}",
                "generation_config": {
                    "response_modalities": ["TEXT"],
                    "speech_config": {
                        "voice_config": {
                            "prebuilt_voice_config": {"voice_name": "Kore"}
                        }
                    }
                }
            }
        }
        await ws.send(json.dumps(setup))
        setup_response = await ws.recv()
        print(f"Setup: {json.loads(setup_response)}")

        # メッセージ送信
        message = {
            "client_content": {
                "turns": [{"role": "user", "parts": [{"text": "こんにちは"}]}],
                "turn_complete": True
            }
        }
        await ws.send(json.dumps(message))

        # 応答受信
        async for msg in ws:
            data = json.loads(msg)
            if "serverContent" in data:
                parts = data["serverContent"].get("modelTurn", {}).get("parts", [])
                for part in parts:
                    if "text" in part:
                        print(f"Response: {part['text']}")
                if data["serverContent"].get("turnComplete"):
                    break

# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
asyncio.run(raw_websocket_session())

【要注意】よくある失敗パターンと回避策

失敗1: プレビュー版を本番環境で使ってしまう

❌ Flash Live Previewをプロダクションの顧客対応に直接投入

⭕ プレビュー版はPoC・検証用にとどめ、GA後に本番移行計画を立てる

なぜ重要か: Googleのプレビュー規約には「本番利用向けではない」「条件は変更される可能性がある」と明記されています。突然のAPI仕様変更やレート制限の変更で本番障害が発生するリスクがあります。

失敗2: セッションのタイムアウト管理を忘れる

❌ WebSocket接続を開きっぱなしにする

⭕ ハートビート送信とリコネクト処理を実装する

なぜ重要か: Live APIのセッションには時間制限があります。長時間の対話では、タイムアウト前にセッションを再確立するロジックが必須です。

失敗3: 音声データのフォーマット不一致

❌ 44100Hzのサンプリングレートで送信(一般的なオーディオ設定)

⭕ Live APIが期待する16000Hz / 16-bit PCMで送信

なぜ重要か: サンプリングレートの不一致は、認識精度の低下やエラーの原因になります。入力フォーマットは必ずAPI仕様に合わせてください。

失敗4: 感情認識に過度に依存する

❌ 「怒りを検知したら割引クーポンを自動発行」のような自動処理

⭕ 感情検知は参考情報として人間のオペレーターに通知し、対応判断は人間が行う

なぜ重要か: 感情認識の精度は100%ではありません。特にビジネスクリティカルな判断を感情認識結果に自動連動させるのは、誤判定リスクが大きすぎます。

参考・出典

次のステップ — 今日から始める3つのアクション

  1. 今日やること: Google AI StudioでAPIキーを発行し、即効テクニック1のテキスト対話を動かしてみる
  2. 今週中: 即効テクニック2の音声対話を試し、レイテンシと音声品質を自分の耳で確認する
  3. 今月中: 自社のユースケース(CS対応 or 社内ヘルプデスク等)でFunction Calling連携のPoCを構築する

あわせて読みたい:


著者: 佐藤傑(さとう・すぐる)
株式会社Uravation代表取締役。X(@SuguruKun_ai)フォロワー10万人超。
100社以上の企業向けAI研修・導入支援。著書累計3万部突破。
SoftBank IT連載7回執筆(NewsPicks最大1,125ピックス)。

ご質問・ご相談は お問い合わせフォーム からお気軽にどうぞ。

Need help moving from reading to rollout?

この記事を読んで導入イメージが固まってきた方へ

Uravationでは、AIエージェントの要件整理、PoC設計、社内導入、研修まで一気通貫で支援しています。

この記事をシェア

X Facebook LINE

※ 本記事の情報は2026年4月時点のものです。サービスの料金・仕様は変更される可能性があります。最新情報は各サービスの公式サイトをご確認ください。

関連記事