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

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Реализация Speech-to-Speech для голосового AI-ассистента
Сложная
от 1 недели до 3 месяцев
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Реализация 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 на OpenAI

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)

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"}
            }
        }))
        # ...обработка событий

Метрики производительности

Компонент Задержка
VAD + Endpointing 600–800 мс
Whisper-1 API 300–600 мс
GPT-4o-mini 200–500 мс
TTS-1 first chunk 200–400 мс
Итого 1.3–2.3 сек

OpenAI Realtime API: сквозная задержка ~500–800 мс.

Сроки: MVP голосового ассистента — 1 неделя. Production с OpenAI Realtime API — 2–3 недели.