API Live mundëson ndërveprime zanore dhe video dydrejtimëshe me vonesë të ulët me Gemini. Duke përdorur API-në Live, ju mund t'u ofroni përdoruesve fundorë përvojën e bisedave zanore natyrale, të ngjashme me njerëzit, dhe aftësinë për të ndërprerë përgjigjet e modelit duke përdorur komandat zanore. Modeli mund të përpunojë hyrjen e tekstit, audio dhe video, dhe mund të sigurojë dalje teksti dhe audio.
Mund të provoni Live API në Google AI Studio .
Çfarë ka të re
Live API ka veçori dhe aftësi të reja!
Aftësi të reja:
- Dy zëra të rinj dhe 30 gjuhë të reja, me gjuhë dalëse të konfigurueshme
- Rezolucione imazhi të konfigurueshme 66/256 argumente
- Mbulimi i konfigurueshëm i kthesës: Dërgoni të gjitha hyrjet gjatë gjithë kohës ose vetëm kur përdoruesi është duke folur
- Konfiguro nëse hyrja duhet të ndërpresë modelin apo jo
- Zbulimi i aktivitetit zanor i konfigurueshëm dhe ngjarjet e reja të klientit për sinjalizimin në fund të kthesës
- Token numëron
- Një ngjarje klienti për sinjalizimin e fundit të transmetimit
- Transmetimi i tekstit
- Rifillimi i sesionit i konfigurueshëm, me të dhënat e sesionit të ruajtura në server për 24 orë
- Mbështetje më e gjatë e sesionit me një dritare konteksti rrëshqitëse
Ngjarjet e reja të klientëve:
- Fundi i transmetimit audio / mikrofon i mbyllur
- Ngjarjet e fillimit/mbarimit të aktivitetit për kontrollin manual të kalimit të kthesave
Ngjarjet e reja të serverit:
- Largohuni nga njoftimi që sinjalizon nevojën për të rifilluar një seancë
- Gjenerata e përfunduar
Përdorni API-në e drejtpërdrejtë
Ky seksion përshkruan se si të përdorni API-në e drejtpërdrejtë me një nga SDK-të tona. Për më shumë informacion në lidhje me API-në themelore të WebSockets, shihni referencën e WebSockets API .
Dërgoni dhe merrni tekst
import asyncio
from google import genai
client = genai.Client(api_key="GEMINI_API_KEY")
model = "gemini-2.0-flash-live-001"
config = {"response_modalities": ["TEXT"]}
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
while True:
message = input("User> ")
if message.lower() == "exit":
break
await session.send_client_content(
turns={"role": "user", "parts": [{"text": message}]}, turn_complete=True
)
async for response in session.receive():
if response.text is not None:
print(response.text, end="")
if __name__ == "__main__":
asyncio.run(main())
Merr audio
Shembulli i mëposhtëm tregon se si të merrni të dhëna audio dhe t'i shkruani ato në një skedar .wav
.
import asyncio
import wave
from google import genai
client = genai.Client(api_key="GEMINI_API_KEY", http_options={'api_version': 'v1alpha'})
model = "gemini-2.0-flash-live-001"
config = {"response_modalities": ["AUDIO"]}
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
wf = wave.open("audio.wav", "wb")
wf.setnchannels(1)
wf.setsampwidth(2)
wf.setframerate(24000)
message = "Hello? Gemini are you there?"
await session.send_client_content(
turns={"role": "user", "parts": [{"text": message}]}, turn_complete=True
)
async for idx,response in async_enumerate(session.receive()):
if response.data is not None:
wf.writeframes(response.data)
# Un-comment this code to print audio data info
# if response.server_content.model_turn is not None:
# print(response.server_content.model_turn.parts[0].inline_data.mime_type)
wf.close()
if __name__ == "__main__":
asyncio.run(main())
Formatet audio
Live API mbështet formatet e mëposhtme të audios:
- Formati i hyrjes së audios: Audio PCM e papërpunuar 16 bit në 16 kHz pak-endian
- Formati i daljes së audios: Audio PCM e papërpunuar 16 bit në 24 kHz pak-endian
Transmetoni audio dhe video
Udhëzimet e sistemit
Udhëzimet e sistemit ju lejojnë të drejtoni sjelljen e një modeli bazuar në nevojat tuaja specifike dhe rastet e përdorimit. Udhëzimet e sistemit mund të vendosen në konfigurimin e konfigurimit dhe do të mbeten në fuqi për të gjithë seancën.
from google.genai import types
config = {
"system_instruction": types.Content(
parts=[
types.Part(
text="You are a helpful assistant and answer in a friendly tone."
)
]
),
"response_modalities": ["TEXT"],
}
Përditësimet në rritje të përmbajtjes
Përdorni përditësime shtesë për të dërguar të dhëna teksti, për të krijuar kontekstin e sesionit ose për të rivendosur kontekstin e sesionit. Për kontekste të shkurtra, mund të dërgoni ndërveprime kthesë pas kthese për të përfaqësuar sekuencën e saktë të ngjarjeve:
turns = [
{"role": "user", "parts": [{"text": "What is the capital of France?"}]},
{"role": "model", "parts": [{"text": "Paris"}]},
]
await session.send_client_content(turns=turns, turn_complete=False)
turns = [{"role": "user", "parts": [{"text": "What is the capital of Germany?"}]}]
await session.send_client_content(turns=turns, turn_complete=True)
{
"clientContent": {
"turns": [
{
"parts":[
{
"text": ""
}
],
"role":"user"
},
{
"parts":[
{
"text": ""
}
],
"role":"model"
}
],
"turnComplete": true
}
}
Për kontekste më të gjata, rekomandohet të sigurohet një përmbledhje e vetme e mesazhit për të liruar dritaren e kontekstit për ndërveprimet e mëvonshme.
Ndryshoni zërat
API Live mbështet zërat e mëposhtëm: Puck, Charon, Kore, Fenrir, Aoede, Leda, Orus dhe Zephyr.
Për të specifikuar një zë, vendosni emrin e zërit brenda objektit speechConfig
si pjesë e konfigurimit të sesionit:
from google.genai import types
config = types.LiveConnectConfig(
response_modalities=["AUDIO"],
speech_config=types.SpeechConfig(
voice_config=types.VoiceConfig(
prebuilt_voice_config=types.PrebuiltVoiceConfig(voice_name="Kore")
)
)
)
{
"voiceConfig": {
"prebuiltVoiceConfig": {
"voiceName": "Kore"
}
}
}
Përdorni thirrjen e funksionit
Ju mund të përcaktoni mjetet me Live API. Shikoni udhëzuesin e thirrjes së funksionit për të mësuar më shumë rreth thirrjes së funksionit.
Mjetet duhet të përcaktohen si pjesë e konfigurimit të sesionit:
config = types.LiveConnectConfig(
response_modalities=["TEXT"],
tools=[set_light_values]
)
async with client.aio.live.connect(model=model, config=config) as session:
await session.send_client_content(
turns={
"role": "user",
"parts": [{"text": "Turn the lights down to a romantic level"}],
},
turn_complete=True,
)
async for response in session.receive():
print(response.tool_call)
Nga një kërkesë e vetme, modeli mund të gjenerojë thirrje të shumëfishta funksionesh dhe kodin e nevojshëm për zinxhirin e daljeve të tyre. Ky kod ekzekutohet në një mjedis sandbox, duke gjeneruar mesazhe të mëvonshme BidiGenerateContentToolCall . Ekzekutimi ndalon derisa rezultatet e çdo thirrjeje funksioni të jenë të disponueshme, gjë që siguron përpunim vijues.
Klienti duhet të përgjigjet me BidiGenerateContentToolResponse .
Hyrjet dhe daljet audio ndikojnë negativisht në aftësinë e modelit për të përdorur thirrjen e funksionit.
Trajtoni ndërprerjet
Përdoruesit mund të ndërpresin daljen e modelit në çdo kohë. Kur Zbulimi i aktivitetit zanor (VAD) zbulon një ndërprerje, gjenerimi në vazhdim anulohet dhe hidhet poshtë. Vetëm informacioni i dërguar tashmë klientit ruhet në historikun e sesionit. Serveri më pas dërgon një mesazh BidiGenerateContentServerContent për të raportuar ndërprerjen.
Përveç kësaj, serveri Gemini hedh poshtë çdo thirrje funksioni në pritje dhe dërgon një mesazh BidiGenerateContentServerContent
me ID-të e thirrjeve të anuluara.
async for response in session.receive():
if response.server_content.interrupted is not None:
# The generation was interrupted
Konfiguro zbulimin e aktivitetit zanor (VAD)
Si parazgjedhje, modeli kryen automatikisht zbulimin e aktivitetit zanor (VAD) në një transmetim të vazhdueshëm të hyrjes audio. VAD mund të konfigurohet me fushën realtimeInputConfig.automaticActivityDetection
të konfigurimit të konfigurimit .
Kur transmetimi i audios ndalet për më shumë se një sekondë (për shembull, për shkak se përdoruesi ka fikur mikrofonin), duhet të dërgohet një ngjarje audioStreamEnd
për të pastruar çdo audio të ruajtur në memorie. Klienti mund të rifillojë dërgimin e të dhënave audio në çdo kohë.
Përndryshe, VAD-i automatik mund të çaktivizohet duke vendosur realtimeInputConfig.automaticActivityDetection.disabled
në true
në mesazhin e konfigurimit. Në këtë konfigurim klienti është përgjegjës për zbulimin e të folurit të përdoruesit dhe dërgimin e mesazheve activityStart
dhe activityEnd
në kohën e duhur. Një audioStreamEnd
nuk dërgohet në këtë konfigurim. Në vend të kësaj, çdo ndërprerje e transmetimit shënohet nga një mesazh activityEnd
.
Mbështetja e SDK-së për këtë veçori do të jetë e disponueshme në javët në vijim.
Merrni numrin e shenjave
Ju mund të gjeni numrin total të argumenteve të konsumuara në fushën usageMetadata të mesazhit të serverit të kthyer.
from google.genai import types
async with client.aio.live.connect(
model='gemini-2.0-flash-live-001',
config=types.LiveConnectConfig(
response_modalities=['AUDIO'],
),
) as session:
# Session connected
while True:
await session.send_client_content(
turns=types.Content(role='user', parts=[types.Part(text='Hello world!')])
)
async for message in session.receive():
# The server will periodically send messages that include
# UsageMetadata.
if message.usage_metadata:
usage = message.usage_metadata
print(
f'Used {usage.total_token_count} tokens in total. Response token'
' breakdown:'
)
for detail in usage.response_tokens_details:
match detail:
case types.ModalityTokenCount(modality=modality, token_count=count):
print(f'{modality}: {count}')
# For the purposes of this example, placeholder input is continually fed
# to the model. In non-sample code, the model inputs would come from
# the user.
if message.server_content and message.server_content.turn_complete:
break
Konfiguro rifillimin e sesionit
Ndërsa kohëzgjatja e sesionit është e kufizuar , ju mund të konfiguroni fushën e sesionit Resumption të konfigurimit të konfigurimit .
Kalimi i këtij konfigurimi mundëson mbështetjen e rifillimit të sesionit dhe bën që serveri të dërgojë mesazhe SessionResumptionUpdate , të cilat mund të përdoren për të rifilluar seancën duke kaluar shenjën e fundit të rifillimit si SessionResumptionConfig.handle
e lidhjes pasuese.
from google.genai import types
print(f"Connecting to the service with handle {previous_session_handle}...")
async with client.aio.live.connect(
model="gemini-2.0-flash-live-001",
config=types.LiveConnectConfig(
response_modalities=["AUDIO"],
session_resumption=types.SessionResumptionConfig(
# The handle of the session to resume is passed here,
# or else None to start a new session.
handle=previous_session_handle
),
),
) as session:
# Session connected
while True:
await session.send_client_content(
turns=types.Content(
role="user", parts=[types.Part(text="Hello world!")]
)
)
async for message in session.receive():
# Periodically, the server will send update messages that may
# contain a handle for the current state of the session.
if message.session_resumption_update:
update = message.session_resumption_update
if update.resumable and update.new_handle:
# The handle should be retained and linked to the session.
return update.new_handle
# For the purposes of this example, placeholder input is continually fed
# to the model. In non-sample code, the model inputs would come from
# the user.
if message.server_content and message.server_content.turn_complete:
break
Merr një mesazh përpara se seanca të shkëputet
Serveri dërgon një mesazh GoAway që sinjalizon se lidhja aktuale do të ndërpritet së shpejti. Ky mesazh përfshin timeLeft , që tregon kohën e mbetur dhe ju lejon të ndërmerrni veprime të mëtejshme përpara se lidhja të ndërpritet si E ABORTUAR.
Merr një mesazh kur gjenerimi të ketë përfunduar
Serveri dërgon një mesazh gjenerimi i plotë që sinjalizon se modeli ka përfunduar gjenerimin e përgjigjes.
Aktivizo ngjeshjen e dritares së kontekstit
Për të aktivizuar sesione më të gjata dhe për të shmangur ndërprerjen e papritur të lidhjes, mund të aktivizoni ngjeshjen e dritares së kontekstit duke vendosur fushën e kontekstitWindowCompression si pjesë e konfigurimit të sesionit.
Në ContextWindowCompressionConfig , ju mund të konfiguroni një mekanizëm me dritare rrëshqitëse dhe numrin e shenjave që nxisin kompresimin.
from google.genai import types
config = types.LiveConnectConfig(
response_modalities=["AUDIO"],
context_window_compression=(
# Configures compression with default parameters.
types.ContextWindowCompressionConfig(
sliding_window=types.SlidingWindow(),
)
),
)
Ndryshoni rezolucionin e medias
Mund të specifikoni rezolucionin e medias për median hyrëse duke vendosur fushën mediaResolution
si pjesë e konfigurimit të sesionit:
from google.genai import types
config = types.LiveConnectConfig(
response_modalities=["AUDIO"],
media_resolution=types.MediaResolution.MEDIA_RESOLUTION_LOW,
)
Kufizimet
Merrni parasysh kufizimet e mëposhtme të Live API dhe Gemini 2.0 kur planifikoni projektin tuaj.
Autentifikimi i klientit
Live API ofron vetëm vërtetim nga serveri në server dhe nuk rekomandohet për përdorim të drejtpërdrejtë të klientit. Hyrja e klientit duhet të drejtohet përmes një serveri të ndërmjetëm aplikacioni për vërtetim të sigurt me Live API.
Kohëzgjatja maksimale e seancës
Kohëzgjatja e seancës është e kufizuar deri në 15 minuta për audio ose deri në 2 minuta audio dhe video. Kur kohëzgjatja e seancës tejkalon kufirin, lidhja ndërpritet.
Modeli kufizohet gjithashtu nga madhësia e kontekstit. Dërgimi i pjesëve të mëdha të përmbajtjes së bashku me transmetimet video dhe audio mund të rezultojë në përfundimin e mëparshëm të sesionit.
Dritarja e kontekstit
Një seancë ka një kufi të dritares së kontekstit prej 32 mijë shenjash.
Integrimet e palëve të treta
Për vendosjen e aplikacioneve në ueb dhe celular, mund të eksploroni opsionet nga: