Poznawanie biblioteki klienta AI Voice Live dla języka Python

Ukończone

Biblioteka klienta azure AI Voice Live dla języka Python udostępnia klienta mowy na mowę w czasie rzeczywistym dla interfejsu API azure AI Voice Live. Otwiera sesję WebSocket w celu przesyłania strumieniowego dźwięku z mikrofonu do usługi i odbiera zdarzenia z serwera na potrzeby interaktywnych rozmów.

Ważne

Od wersji 1.0.0 ten zestaw SDK jest tylko asynchroniczny. Synchroniczny interfejs API jest wycofywany, aby skupić się wyłącznie na stosowaniu wzorców asynchronicznych. Wszystkie przykłady używają składni async/await.

W tej lekcji dowiesz się, jak za pomocą zestawu SDK zaimplementować uwierzytelnianie i obsługiwać zdarzenia. Zostanie również wyświetlony minimalny przykład tworzenia sesji. Aby zapoznać się z pełną dokumentacją pakietu Voice Live, odwiedź dokumentację pakietu Voice Live.

Implementowanie uwierzytelniania

Uwierzytelnianie można zaimplementować przy użyciu klucza API lub tokenu Microsoft Entra ID. Poniższy przykładowy kod przedstawia implementację klucza interfejsu API. Zakłada się, że zmienne środowiskowe są ustawiane w .env pliku lub bezpośrednio w środowisku.

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())

W przypadku aplikacji produkcyjnych zaleca się uwierzytelnianie Microsoft Entra. Poniższy przykładowy kod przedstawia implementację DefaultAzureCredential do uwierzytelniania.

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())

Obsługa zdarzeń

Właściwa obsługa zdarzeń zapewnia bardziej bezproblemową interakcję między klientem a agentem. Na przykład w przypadku obsługi użytkownika przerywającego agenta głosowego należy natychmiast anulować odtwarzanie dźwięku agenta w kliencie. Jeśli tego nie zrobisz, klient będzie nadal odtwarzać ostatnią odpowiedź agenta, aż do momentu, gdy przerwanie zostanie przetworzone przez interfejs API, co może spowodować, że agent będzie mówić pomimo użytkownika.

Poniższy przykładowy kod przedstawia podstawową obsługę zdarzeń:

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}")

Minimalny przykład

Poniższy przykładowy kod przedstawia uwierzytelnianie w interfejsie API i konfigurowanie sesji.

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())