ツールを使用することで、Live API は単なる会話にとどまらず、現実世界でアクションを実行したり、外部のコンテキストを取り込んだりしながら、リアルタイムの接続を維持することが可能になります。 Live API を使用すると、関数呼び出し や Google 検索 などのツールを定義できます。
サポートされているツールの概要
Live API モデルで利用可能なツールの概要を以下に示します。
| ツール | Gemini 3.1 Flash Live プレビュー | Gemini 2.5 Flash ライブ プレビュー |
|---|---|---|
| 検索 | サポート対象 | サポート対象 |
| 関数呼び出し | サポート済み(同期のみ) | サポート済み(同期および非同期) |
| Google マップ | サポート対象外 | サポート対象外 |
| コード実行 | サポート対象外 | サポート対象外 |
| URL コンテキスト | サポート対象外 | サポート対象外 |
関数呼び出し
ライブ API は、通常のコンテンツ生成リクエストと同様に、関数呼び出しをサポートしています。関数呼び出しによって、Live API は外部データやプログラムと連携できるようになり、アプリケーションが実現できることが大幅に向上します。
セッション設定の一部として、関数宣言を定義できます。
ツール呼び出しを受け取った後、クライアントはsession.send_tool_responseメソッドを使用してFunctionResponseオブジェクトのリストで応答する必要があります。
詳細については、関数呼び出しのチュートリアルをご覧ください。
Python
import asyncio
import wave
from google import genai
from google.genai import types
client = genai.Client()
model = "gemini-3.1-flash-live-preview"
# Simple function definitions
turn_on_the_lights = {"name": "turn_on_the_lights"}
turn_off_the_lights = {"name": "turn_off_the_lights"}
tools = [{"function_declarations": [turn_on_the_lights, turn_off_the_lights]}]
config = {"response_modalities": ["AUDIO"], "tools": tools}
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
prompt = "Turn on the lights please"
await session.send_client_content(turns={"parts": [{"text": prompt}]})
wf = wave.open("audio.wav", "wb")
wf.setnchannels(1)
wf.setsampwidth(2)
wf.setframerate(24000) # Output is 24kHz
async for response in session.receive():
if response.data is not None:
wf.writeframes(response.data)
elif response.tool_call:
print("The tool was called")
function_responses = []
for fc in response.tool_call.function_calls:
function_response = types.FunctionResponse(
id=fc.id,
name=fc.name,
response={ "result": "ok" } # simple, hard-coded function response
)
function_responses.append(function_response)
await session.send_tool_response(function_responses=function_responses)
wf.close()
if __name__ == "__main__":
asyncio.run(main())
JavaScript
import { GoogleGenAI, Modality } from '@google/genai';
import * as fs from "node:fs";
import pkg from 'wavefile'; // npm install wavefile
const { WaveFile } = pkg;
const ai = new GoogleGenAI({});
const model = 'gemini-3.1-flash-live-preview';
// Simple function definitions
const turn_on_the_lights = { name: "turn_on_the_lights" } // , description: '...', parameters: { ... }
const turn_off_the_lights = { name: "turn_off_the_lights" }
const tools = [{ functionDeclarations: [turn_on_the_lights, turn_off_the_lights] }]
const config = {
responseModalities: [Modality.AUDIO],
tools: tools
}
async function live() {
const responseQueue = [];
async function waitMessage() {
let done = false;
let message = undefined;
while (!done) {
message = responseQueue.shift();
if (message) {
done = true;
} else {
await new Promise((resolve) => setTimeout(resolve, 100));
}
}
return message;
}
async function handleTurn() {
const turns = [];
let done = false;
while (!done) {
const message = await waitMessage();
turns.push(message);
if (message.serverContent && message.serverContent.turnComplete) {
done = true;
} else if (message.toolCall) {
done = true;
}
}
return turns;
}
const session = await ai.live.connect({
model: model,
callbacks: {
onopen: function () {
console.debug('Opened');
},
onmessage: function (message) {
responseQueue.push(message);
},
onerror: function (e) {
console.debug('Error:', e.message);
},
onclose: function (e) {
console.debug('Close:', e.reason);
},
},
config: config,
});
const inputTurns = 'Turn on the lights please';
session.sendClientContent({ turns: inputTurns });
let turns = await handleTurn();
for (