Реалізація Speech-to-Speech для голосового AI-асистента

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Реалізація Speech-to-Speech для голосового AI-асистента
Складний
від 1 тижня до 3 місяців
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Реалізація Speech-to-Speech для голосового AI-асистента Голосовий AI-асистент - повний цикл: користувач каже, асистент розуміє та відповідає голосом. Ключова метрика - наскрізна затримка (end-to-end latency): від закінчення мови до початку відповіді. Цільовий показник: <1.5 секунди. ### Архітектура системи```

Microphone → VAD → STT → NLU/LLM → TTS → Speaker ↑ ↓ Endpointing First audio chunk (600–800ms) (<300ms after TTS start) ### Full pipeline на OpenAIpython import asyncio from openai import AsyncOpenAI import sounddevice as sd import numpy as np

client = AsyncOpenAI()

class VoiceAssistant: def init(self): self.conversation_history = [] self.system_prompt = "Ты полезный голосовой ассистент. Отвечай кратко, 1–3 предложения."

async def listen_and_respond(self):
    # Запись через VAD
    audio = await self.record_speech()

    # STT
    transcript = await client.audio.transcriptions.create(
        model="whisper-1",
        file=("audio.wav", audio, "audio/wav"),
        language="ru"
    )
    user_text = transcript.text
    print(f"User: {user_text}")

    # LLM
    self.conversation_history.append({"role": "user", "content": user_text})
    response = await client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "system", "content": self.system_prompt}]
                  + self.conversation_history,
    )
    assistant_text = response.choices[0].message.content
    self.conversation_history.append({"role": "assistant", "content": assistant_text})
    print(f"Assistant: {assistant_text}")

    # TTS streaming
    async with client.audio.speech.with_streaming_response.create(
        model="tts-1",
        voice="alloy",
        input=assistant_text,
        response_format="pcm",
    ) as tts_response:
        async for chunk in tts_response.iter_bytes(1024):
            # Воспроизводим чанки по мере поступления
            audio_data = np.frombuffer(chunk, dtype=np.int16)
            sd.play(audio_data.astype(np.float32) / 32768.0, samplerate=24000)
            sd.wait()

### OpenAI Realtime API (оптимально для production)python import websockets

async def realtime_voice_assistant(): url = "wss://api.openai.com/v1/realtime?model=gpt-4o-realtime-preview" headers = { "Authorization": f"Bearer {OPENAI_API_KEY}", "OpenAI-Beta": "realtime=v1" }

async with websockets.connect(url, extra_headers=headers) as ws:
    # Конфигурация
    await ws.send(json.dumps({
        "type": "session.update",
        "session": {
            "voice": "alloy",
            "instructions": "Ты голосовой ассистент. Отвечай по-русски.",
            "turn_detection": {"type": "server_vad"}
        }
    }))
    # ...обработка событий