Utforsk AI Voice Live-klientbiblioteket for Python

Fullført

Tip

Se fanen Tekst og bilder for mer informasjon!

Azure AI Voice Live-klientbiblioteket for Python gir en tale-til-tale-klient i sanntid for Azure AI Voice Live API. Den åpner en WebSocket-økt for å streame mikrofonlyd til tjenesten og mottar serverhendelser for responsive samtaler.

Viktig!

Fra og med versjon 1.0.0 er denne SDK-en kun asynkron. Den synkrone API-en er avskrevet for å fokusere utelukkende på asynkrone mønstre. Alle eksempler og eksempler bruker asynkron/avvent-syntaks.

I denne enheten lærer du hvordan du bruker SDK til å implementere godkjenning og håndtere hendelser. Du ser også et minimalt eksempel på hvordan du oppretter en økt. Hvis du vil ha en fullstendig referanse til Voice Live-pakken, kan du gå til referansen for Voice Live-pakken.

Implementere autentisering

Du kan implementere godkjenning med en API-nøkkel eller et Microsoft Entra ID-token. Følgende kodeeksempel viser en API-nøkkelimplementering. Det forutsetter at miljøvariabler er angitt i en .env fil eller direkte i miljøet ditt.

import asyncio
from azure.core.credentials import AzureKeyCredential
from azure.ai.voicelive import connect

async def main():
    async with connect(
        endpoint="your-endpoint",
        credential=AzureKeyCredential("your-api-key"),
        model="gpt-4o"
    ) as connection:
        # Your async code here
        pass

asyncio.run(main())

For produksjonsprogrammer anbefales Microsoft Entra-godkjenning. Følgende kodeeksempel viser implementering av for godkjenning:DefaultAzureCredential

import asyncio
from azure.identity.aio import DefaultAzureCredential
from azure.ai.voicelive import connect

async def main():
    credential = DefaultAzureCredential()

    async with connect(
        endpoint="your-endpoint",
        credential=credential,
        model="gpt-4o"
    ) as connection:
        # Your async code here
        pass

asyncio.run(main())

Håndtering av hendelser

Riktig håndtering av hendelser sikrer en mer sømløs interaksjon mellom klient og agent. Når du for eksempel håndterer en bruker som avbryter taleagenten, må du avbryte agentlydavspilling umiddelbart i klienten. Hvis du ikke gjør det, fortsetter klienten å spille av det siste agentsvaret til avbruddet behandles i API-en – noe som resulterer i at agenten "snakker over" brukeren.

Følgende kodeeksempel viser grunnleggende hendelseshåndtering:

async for event in connection:
    if event.type == ServerEventType.SESSION_UPDATED:
        print(f"Session ready: {event.session.id}")
        # Start audio capture

    elif event.type == ServerEventType.INPUT_AUDIO_BUFFER_SPEECH_STARTED:
        print("User started speaking")
        # Stop playback and cancel any current response

    elif event.type == ServerEventType.RESPONSE_AUDIO_DELTA:
        # Play the audio chunk
        audio_bytes = event.delta

    elif event.type == ServerEventType.ERROR:
        print(f"Error: {event.error.message}")

Minimalt eksempel

Følgende kodeeksempel viser godkjenning til API-en og konfigurering av økten.

import asyncio
from azure.core.credentials import AzureKeyCredential
from azure.ai.voicelive.aio import connect
from azure.ai.voicelive.models import (
    RequestSession, Modality, InputAudioFormat, OutputAudioFormat, ServerVad, ServerEventType
)

API_KEY = "your-api-key"
ENDPOINT = "your-endpoint"
MODEL = "gpt-4o"

async def main():
    async with connect(
        endpoint=ENDPOINT,
        credential=AzureKeyCredential(API_KEY),
        model=MODEL,
    ) as conn:
        session = RequestSession(
            modalities=[Modality.TEXT, Modality.AUDIO],
            instructions="You are a helpful assistant.",
            input_audio_format=InputAudioFormat.PCM16,
            output_audio_format=OutputAudioFormat.PCM16,
            turn_detection=ServerVad(
                threshold=0.5, 
                prefix_padding_ms=300, 
                silence_duration_ms=500
            ),
        )
        await conn.session.update(session=session)

        # Process events
        async for evt in conn:
            print(f"Event: {evt.type}")
            if evt.type == ServerEventType.RESPONSE_DONE:
                break

asyncio.run(main())