Я устал от того, что мои рабочие созвоны улетают на чужие сервера. Собрал ассистента встреч, который работает целиком на моём маке

Полгода назад я прикинул, сколько рабочих разговоров в неделю уходит в облако через модные AI-ноутейкеры. Otter, Granola, Fireflies — все забирают аудио встречи и обрабатывают его на своих мощностях. Это удобно ровно до первого вопроса: «А где теперь лежит запись конфиденциальных переговоров, которые я только что вёл?».

В этом году сервис Granola наглядно показал, чем это кончается. Издание The Verge выяснило, что заметки юзеров по умолчанию доступны любому по ссылке, а на пользовательских данных компания тренирует свои модели. Отключить обучение на своих данных можно, но только на Enterprise-тарифе за $35 в месяц за пользователя. То есть за приватность своих же разговоров надо доплачивать, причём заметно.

Я решил проверить простую гипотезу: можно ли собрать умного ассистента целиком на своём железе, без единого облачного вызова? Оказалось — можно.

Проект получил название Charoite (в честь фиолетового минерала чароита). Он работает каждый день на моём MacBook с M1 Max, а код открыт под лицензией Apache 2.0. Требования приземлённые: Apple Silicon (M1 и новее), от 16 ГБ объединённой памяти (на 32 ГБ — идеально), macOS 14+. Версия под Linux уже в планах.

Что он делает

Charoite слушает микрофон и системный звук во время встречи. Никаких криповых ботов, которые «присоединяются к звонку» — захват аудио идёт напрямую с вашей машины.

По ходу созвона он:

- Ведёт живую стенограмму и различает голоса (кто и что сказал). - Главная фича: когда собеседник задаёт вопрос, ассистент за пару секунд генерирует и подсказывает готовый ответ от первого лица. Незаменимо, если вас застали врасплох. - Вытаскивает тезисы, решения и поручения в реальном времени. - Если тема уже всплывала на прошлых созвонах, напоминает: «Эту тему поднимали 15 июля, статус был такой-то».

А после встречи Charoite собирает то, чего нет у большинства коммерческих конкурентов — граф знаний. Люди, системы, решения и сквозные темы накапливаются и связываются между встречами. Через месяц у вас в базе не папка с мёртвым текстом транскриптов, а связная картина, где видно, как конкретное решение по проекту эволюционировало от созвона к созвону.

На выходе вы получаете саммари, которое реально читается за минуту: суть одной строкой, о чём говорили, что решили, поручения в формате «кто-что-срок», открытые вопросы и связка с прошлыми встречами («было так — стало так»).

Приватность здесь не обещание, а архитектура

Это ключевое отличие, и его легко проверить. Все сетевые вызовы идут только на localhost — к локальным моделям на этой же машине. И это не держится на честном слове разработчика: вы можете открыть Wireshark или LuLu и убедиться, что наружу не уходит ни байта. Телеметрии нет вообще.

Запись встречи хранится пару дней (она нужна, чтобы после звонка пересобрать чистую стенограмму) и удаляется. Голосовые отпечатки (эмбеддинги), по которым различаются собеседники, живут только в оперативной памяти на время встречи — на диск они не пишутся. Биометрия не должна валяться в файлах, для меня это принципиальная позиция.

Облачный слой (более глубокий разбор встречи через Claude CLI по подписке) в коде есть, но по умолчанию он выключен и честно задокументирован. Не включаете его — продукт остаётся 100% офлайновым.

Как это устроено внутри

- Распознавание речи (STT): GigaAM от Сбера. Лучшая русская открытая модель на сегодня. Работает через ONNX и распознаёт трёхсекундный фрагмент аудио за доли секунды. - Основной «мозг» (саммари и граф): Qwen 3.6 (35B-A3B) через Ollama. - Диаризация (различение голосов): модель эмбеддингов ERes2Net.

Самое сложное крылось не там, где ждёшь. Различать говорящих в реальном времени — та ещё боль. Даже лучшие открытые модели путают спикеров, а метки скачут посреди фразы. Пришлось внедрять два прохода: «живой» (быстрый) во время встречи и аккуратную пересборку полной записи после её окончания.

Ещё одна забавная проблема: LLM, расставляющая имена, поначалу приписывала реплику тому, к кому обращались. Услышав фразу «Саш, а ты что думаешь?», модель подписывала говорящего «Сашей», хотя Саша — это тот, кто ответит следующим. Пришлось лечить это промптами и логикой. Именно такие мелочи и отличают рабочий инструмент от техно-демки.

Что дальше и при чём тут бизнес

Пока это инструмент для тех, кто дружит с терминалом и командной строкой. И он полностью бесплатный. В планах: нативное приложение для macOS (чтобы запускалось в пару кликов), английские промпты для мировой аудитории и сквозное узнавание голосов между встречами (чтобы голос сам привязывался к узлу человека в графе — с этим пока не справляется ни один коммерческий продукт).

Модель монетизации, если продукт взлетит, будет честной. Локальное ядро остаётся бесплатным и open-source навсегда. Платным будет только облачный функционал для тех, кому он действительно нужен. Приватность не должна быть платной опцией — именно на этом сейчас обжигаются SaaS-сервисы.

Код, документация с бенчмарками и подробным обоснованием выбора моделей лежат на GitHub: github.com/charoiteai/Charoite_audio.

Если вы пробовали собирать что-то похожее или просто устали платить подписки за то, чтобы компании обучались на ваших же данных — залетайте в комменты, буду рад обсудить.