🎙️

Голосовой AI-ассистент своими руками

Whisper + ChatGPT + ElevenLabs: распознавание речи, AI-ответ, синтез голоса. Собери голосового ассистента за вечер.

voice ⏱ 25 мин
Pipeline голосового AI-ассистента 🎤 Микрофон Запись аудио 🗣️ Whisper Speech-to-Text 🧠 GPT-4o Обработка + ответ 🔊 TTS Text-to-Speech 🔈 Аудио Инструменты для каждого этапа Запись PyAudio, sounddevice STT Whisper API, faster-whisper LLM GPT-4o, Claude, GigaChat TTS ElevenLabs, OpenAI TTS ⚡ Задержка: ~1.5 секунды от конца фразы до ответа

# 1. Архитектура голосового ассистента

Голосовой AI-ассистент — это конвейер из 4 модулей: запись аудио (PyAudio/sounddevice), распознавание речи (Whisper), обработка (GPT-4o/Claude), синтез голоса (ElevenLabs/OpenAI TTS). Все компоненты работают через API — никакого локального GPU не нужно. Стоимость одного разговора: ~0.02$ (Whisper) + ~0.01$ (GPT) + ~0.05$ (TTS) = ~0.08$ за минуту диалога.

# 2. Speech-to-Text через Whisper

Whisper от OpenAI — лучшая модель для распознавания русской речи. Whisper API: $0.006/минута. Альтернатива — faster-whisper (локально, бесплатно, требует GPU).

import sounddevice as sd
import numpy as np
import wave
from openai import OpenAI

client = OpenAI()

# Запись аудио с микрофона
def record_audio(duration=5, sample_rate=16000):
    print("🎤 Говорите...")
    audio = sd.rec(int(duration * sample_rate),
                    samplerate=sample_rate, channels=1)
    sd.wait()
    print("✅ Записано")
    # Сохраняем во временный WAV
    with wave.open("/tmp/audio.wav", "wb") as wf:
        wf.setnchannels(1)
        wf.setsampwidth(2)
        wf.setframerate(sample_rate)
        wf.writeframes((audio * 32767).astype(np.int16).tobytes())
    return "/tmp/audio.wav"

# Распознавание через Whisper API
def speech_to_text(audio_path):
    with open(audio_path, "rb") as f:
        transcript = client.audio.transcriptions.create(
            model="whisper-1", file=f, language="ru"
        )
    return transcript.text

# 3. Обработка запроса и генерация ответа

После распознавания текста отправляем его в LLM. Системный промпт задаёт личность ассистента. Для голосового режима важно: короткие ответы (не больше 3-4 предложений), разговорный стиль, без маркдауна.

VOICE_SYSTEM_PROMPT = """
Ты — голосовой AI-ассистент «Арго».
Отвечай коротко, не больше 3 предложений.
Без маркдауна, без эмодзи, без списков.
Разговорный тон, как при живом общении.
Если не знаешь ответа — скажи честно.
"""

def process_with_ai(text):
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[
            {"role": "system", "content": VOICE_SYSTEM_PROMPT},
            {"role": "user", "content": text}
        ],
        max_tokens=150
    )
    return response.choices[0].message.content

# 4. Text-to-Speech: озвучка ответа

OpenAI TTS ($0.015/1K символов) — бюджетно и качественно. ElevenLabs ($5/мес старт) — лучшие голоса с эмоциями. Для русского: OpenAI TTS голос «nova» или ElevenLabs с клонированием голоса.

# 5. Собираем всё вместе: голосовой диалог

Объединяем модули в единый цикл: запись → распознавание → AI-ответ → озвучка. Для непрерывного диалога используем VAD (Voice Activity Detection) через Silero VAD — модель определяет, когда пользователь закончил говорить, и только тогда отправляет аудио на обработку.

# Главный цикл голосового ассистента
while True:
    audio_path = record_audio(duration=10)  # запись до 10 сек
    user_text = speech_to_text(audio_path)
    if not user_text.strip():
        continue
    print(f"👤 Вы: {user_text}")
    ai_response = process_with_ai(user_text)
    print(f"🤖 Ассистент: {ai_response}")
    # text_to_speech(ai_response)  # раскомментировать для озвучки
    if "пока" in user_text.lower() or "стоп" in user_text.lower():
        print("👋 До свидания!")
        break
✅ Итог

Голосовой AI-ассистент на Python — это 150 строк кода и 3 API-ключа. Стек: sounddevice + Whisper API + GPT-4o + OpenAI TTS. Затраты: ~$0.08/минута диалога. Продакшн-совет: для низкой задержки используйте streaming mode Whisper и TTS — ответ начнёт озвучиваться до того, как LLM допишет весь текст. Самый простой хостинг: заверните в FastAPI и деплойте на VPS за 500 ₽/мес.