← Все проекты

voicenotes · синтез речи · 2026 собран за одну сессию

Синтез речи

Не всё сказанное — событие. Разговор с врачом, договорённость с подрядчиком, мысль по дороге: у этого нет даты, но потерять жалко. Такие записи некуда девать — в календарь они не ложатся, а в ленте мессенджера теряются на второй день. Здесь они складываются в архив и находятся по смыслу: «напомни, о чём был разговор у врача» возвращает нужную запись, даже если слова «врач» в ней нет.

Роль
Постановка задачи, архитектура, сборка, запуск
Срок разработки
одна сессия
Платформа
Whisper Qwen3-TTS bge-m3 pgvector
Доступ
Закрыто NDA
0обращений к облачным AI-сервисам
1,3 срасшифровка минуты речи
×3синтез быстрее реального времени
16 собразца хватает, чтобы снять голос
Синтез речи — Найденная заметка: выжимка и четыре действия под ней

Экраны проекта

01 / 02
Как это работает

От сказанной фразы до ответа голосом

Запись экрана: заметка надиктована, найдена по смыслу и зачитана голосом обратно в чат.

За минуту срабатывают четыре модели подряд: Whisper разбирает речь, языковая модель делает выжимку и выбирает нужную заметку из пяти кандидатов, bge-m3 считает вектор для поиска, Qwen3-TTS озвучивает ответ голосом со снятой сигнатурой. Всё на одной машине, без обращений наружу.

Задача

Записать мысль, не решая, куда её деть

Голосом записывают то, что не оформлено, — и потом не могут найти: человек помнит смысл, а не формулировку.

Ответ нужен голосом и знакомым: за рулём читать нечего, а синтетического диктора слушать неприятно.

Заметки — это здоровье, семья и деньги. Поэтому распознавание, понимание и синтез идут на локальном оборудовании.

Решение

Три модели на локальном оборудовании и векторная база

  • Сначала записать, потом думать. Запись сохраняется в базу сразу. Только потом её читает модель. Даже если модель ошибётся — текст уже сохранён и не пропадёт.
  • Ищется не текст, а выжимка. В поиск попадает короткая сводка заметки, а не вся запись. Короткая сводка находится точнее длинного текста обо всём сразу.
  • Выбирает модель, а не математика. Поиск всегда что-то возвращает, даже если ничего похожего нет. Поэтому последнее слово за моделью: она смотрит пять ближайших записей и либо называет нужную, либо честно говорит — такой нет.
  • Сбой не превращается в случайный ответ. Ответила модель невнятно — считается, что она ничего не нашла. Система не подсовывает случайную запись в момент поломки.
  • Голос снимается с образца, без обучения. Хватает 16 секунд речи и её текста. Сменить голос — заменить два файла.
  • Ответ — настоящее голосовое сообщение в мессенджере. Не файл, который надо скачивать.
  • Ошибку можно поправить одной кнопкой. Система приняла заметку за вопрос? Под ответом две кнопки: «это была заметка» и «надо было найти». Текст не теряется.

Технологии

Чем собран проект

Распознавание речи
whisper.cpp, модель large-v3-turbo, локальный сервер
Понимание и выжимка
Qwen 3 (14B, 8 бит) через Ollama
Эмбеддинги
bge-m3, 1024 измерения
Синтез речи
Qwen3-TTS 1.7B через mlx-audio, клонирование по образцу
Векторная база
pgvector в self-hosted Supabase, индекс HNSW, косинусная близость
Оркестрация
n8n
Железо
Mac Studio M4 Max, 128 ГБ памяти

Результат

заметка находится по смыслу: запрос «что было у врача» вытаскивает нужную запись с заметным отрывом от соседних
ответ приходит настоящим голосовым сообщением в мессенджере, а не файлом на скачивание
минута речи расшифровывается за 1,3 секунды, синтез идёт примерно втрое быстрее реального времени
ни одного обращения к облачным AI-сервисам: распознавание, понимание, векторы и синтез — на локальном оборудовании
удаление мягкое: запись пропадает из поиска, но текст остаётся — восстановить стёртую диктовку было бы неоткуда

Откуда цифры: замеры на боевых запросах. Скорость расшифровки и синтеза — измерена. 16 секунд — размер образца голоса. Ноль облачных обращений — свойство архитектуры.

Другие работы

Контакты

Нужен такой же результат?

Расскажите о задаче — ответ в течение дня: оценка срока, вилка бюджета и честное предупреждение, если она решается дешевле, чем вы рассчитывали.