Голосовой ИИ-бот на своём VPS: STT, LLM и TTS
Голосовой ассистент — это три звена: распознать речь, подумать, ответить голосом. Соберём весь пайплайн на VPS, где вы контролируете и модель, и данные пользователей.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Из чего состоит голосовой бот
Голосовой ИИ — это конвейер из трёх компонентов, каждый из которых можно держать локально на сервере:
- STT (speech-to-text) — распознавание речи, обычно Whisper
- LLM — генерация ответа, локальная модель или API
- TTS (text-to-speech) — синтез голоса, например Piper
Держать всё на своём VPS выгодно по приватности: аудио с голосом пользователя не уходит третьим лицам. Для аудио-обработки важен быстрый диск — AMD EPYC + NVMe у MAATRIX снимают узкое место на чтении моделей и временных файлов.
Голос — самые чувствительные данные: по нему идентифицируют человека. Отдавать аудио в облачные STT-сервисы — значит доверять запись голоса третьей стороне. Локальный пайплайн решает это: файл создаётся, распознаётся, озвучивается и удаляется, не покидая сервера. Это важно и с точки зрения закона о персональных данных, и просто по здравому смыслу для бизнеса.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS для голосового ботаТребования к серверу
Whisper и TTS ощутимо грузят CPU. Для модели whisper base/small и Piper комфортно на 4 vCPU и 8 ГБ RAM. Если добавляете локальную LLM — берите 16 ГБ RAM. Латентность конвейера складывается из трёх этапов, поэтому производительность на ядро здесь решает: чем быстрее CPU, тем короче пауза между вопросом и голосовым ответом.
apt update && apt install -y python3 python3-venv ffmpeg git
python3 -m venv ~/venv && source ~/venv/bin/activate
pip install faster-whisper openai piper-tts
ffmpeg обязателен: через него конвертируются входные аудио в нужный формат.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Шаг 1: распознавание речи (Whisper)
faster-whisper работает на CPU заметно быстрее оригинала. Пример распознавания файла:
from faster_whisper import WhisperModel
model = WhisperModel("small", device="cpu", compute_type="int8")
segments, _ = model.transcribe("input.wav", language="ru")
text = " ".join(s.text for s in segments)
print(text)
compute_type int8 экономит память и ускоряет инференс на CPU почти без потери качества. Модель загружайте один раз при старте сервиса и держите в памяти: повторная загрузка на каждый запрос добавит секунды задержки. Размер модели выбирайте по компромиссу: base быстрее и легче, small и medium точнее на именах и терминах, но требовательнее к CPU.
Шаг 2: ответ LLM
Распознанный текст отправляем в модель. Для приватного контура — локальная Ollama, для скорости — внешний API. Системным промптом задайте роль ассистента и попросите отвечать короткими фразами: длинные абзацы плохо звучат в синтезе и раздражают на слух. Голосовой диалог любит лаконичность.
from openai import OpenAI
ai = OpenAI(api_key="...", base_url="http://127.0.0.1:11434/v1")
r = ai.chat.completions.create(model="qwen2.5:7b",
messages=[{"role": "user", "content": text}])
answer = r.choices[0].message.content
Шаг 3: синтез речи (Piper)
Piper — быстрый нейросетевой TTS, работает офлайн. Скачайте голосовую модель и озвучьте ответ:
echo "$answer" | piper --model ru_RU-model.onnx --output_file reply.wav
Готовый reply.wav отдаёте пользователю — через Telegram voice, веб-виджет или SIP-шлюз, в зависимости от канала. Piper поставляется с готовыми голосами под разные языки; русские модели скачиваются отдельными файлами .onnx вместе с конфигом. Выбор голоса влияет на восприятие бота не меньше, чем качество ответов, поэтому послушайте несколько вариантов перед запуском в прод.
Сборка в сервис и типичные грабли
Оберните пайплайн в FastAPI-эндпоинт (принимает аудио, возвращает аудио) и поднимите через systemd или gunicorn/uvicorn с автозапуском. Три модели — Whisper, LLM и Piper — держите загруженными в память единожды при старте процесса, тогда каждый запрос обрабатывается без прогрева.
- Долгий холодный старт — держите модель Whisper загруженной в память, не грузите на каждый запрос.
- Нет ffmpeg — Whisper упадёт на декодировании, ставьте пакет заранее.
- Хрип в TTS — проверьте частоту дискретизации выходного WAV (обычно 22050 Гц).
- Пики CPU — распознавание и синтез не запускайте параллельно на слабом тарифе.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS для голосового ботаОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Можно ли сделать голосового бота без GPU?
Да. faster-whisper и Piper работают на CPU; на быстром NVMe и EPYC задержки приемлемы для небольших нагрузок.
Куда уходит аудио пользователей?
Если STT, LLM и TTS локальные — никуда. Всё остаётся на вашем VPS, что важно для приватности.
Какой тариф выбрать?
Для STT+TTS хватит 4 vCPU / 8 ГБ RAM; с локальной LLM берите 16 ГБ RAM.
Поддерживается ли русский язык?
Да, у Whisper и Piper есть русские модели — качество распознавания и синтеза достойное.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.