05 · AI-ассистент реального времени для созвонов
Copilot
Пока старое распознавание разбирало одну фразу, Copilot успевает сорок. 86 мс быстрее, чем вы моргнете.
AI-ассистент реального времени для созвонов
macOSWindows
Десктопное приложение для собеседований и созвонов: слушает разговор, распознает речь прямо на устройстве и за доли секунды подсказывает ответ. Собеседник его не увидит: Copilot не попадает в демонстрацию экрана и на скриншоты, у него нет значка ни в Dock, ни в трее. Распознавание в 40 раз быстрее: 86 мс на реплику вместо 3,5 с. За 2,5 месяца сделаны приложения под macOS и Windows, сайт с оплатой, бэкенд лицензий и туннель до LLM.
Островок у выреза
Пока Copilot слушает, под вырезом горит только зеленая полоска. Наведите курсор, и островок раскроется: живая речь собеседника, вопрос и ответ потоком. Собеседник островка не видит: справа в окне созвона его демонстрация, и островка на ней нет.
Интерфейс повторяет приложение по его исходному коду, MacBook собран и отрендерен нами в Blender

Как Copilot понимает разговор
Распознать слова мало. Copilot режет речь на фразы, узнает голоса, отсеивает шум и помнит ход разговора, поэтому подсказка приходит на вопрос, а не на «угу», и звучит от вашего лица.
Пороги и правила из кода приложения, фразы для примера
Один вопрос сквозь систему
пример: фразы и время условные, пороги из кода · 0:00.00
Интервьюер
Подсказка
01Речь по фразам
Детектор режет звук на фразы и берет полсекунды до начала, чтобы не потерять первое слово.
02Чей это голос
Фраза относится к голосу по отпечатку. Короткий кусок лучше оставить без метки, чем приписать чужому.
03Вопрос или шум
Поддакивания, обрывки и галлюцинации распознавания отсеиваются до модели.
04Память разговора
В запрос идет ход беседы по объему, а не по числу реплик.
05Ответ от вашего лица
По профилю и вакансии, без выдуманных фактов. Первую мысль можно говорить сразу.
Под macOS и Windows
Логика одна, а стек на каждой системе свой: каждая версия опирается на сильную сторону своего железа. Сайт и сервер общие.
macOS
Swift · SwiftUI · AppKit · WhisperKit · FluidAudio · Core Audio
- Распознавание WhisperKit на Neural Engine: быстро и без видеокарты
- Звук собеседника через Core Audio process tap из любого клиента созвонов
- Островок у выреза и отдельное окно, оба скрыты от захвата экрана
- Нет значка в Dock и в строке меню
Windows
C# · .NET 10 · WPF · NAudio · Python · faster-whisper
- faster-whisper на видеокарте отдельным процессом, без нее встроенный whisper.cpp на процессоре
- Звук собеседника через WASAPI loopback, микрофон по желанию
- Окно исключено из захвата экрана системным флагом Windows
- Нет кнопки на панели задач и значка в трее, установщик на Inno Setup
Сайт и сервер
Node.js · SQLite · nginx · systemd · SOCKS-туннель
- Сайт продукта: тарифы, оплата, ключ сразу после покупки, загрузка под обе системы
- Бэкенд лицензий: ключ LLM только на сервере, расход по реальным токенам
- Туннель до зарубежного узла: провайдеры LLM не отвечают серверу в РФ
- Админка для выдачи и отключения ключей
Лицензия и данные
Лицензия нужна, чтобы улучшать продукт у всех сразу и управлять доступом. При этом разговор остается вашим: звук не покидает устройство, а текст не хранится на сервере, и владельцы его не видят.
Маршрут запроса и поля базы из кода бэкенда, ключ и числа для примера
Ваше устройство
ICP-7F3A-9C1D-····
Наш сервер лицензий
ключ найден
Стандарт · осталось 250 ответов
Модель
ждет запроса
Куда растет Copilot
Сейчас Copilot слышит и отвечает. Следующий шаг: видеть экран и действовать, но только с разрешения. Собеседник показал задачу, Copilot понял ее, предложил решение и после вашего «да» запустил код в нужной среде.
Вектор развития: этого еще нет в текущей версии
Демонстрация экрана · Интервьюер
Задача 2
Дан массив чисел nums и число target.
Верните индексы двух чисел, сумма которых равна target.
[2, 7, 11, 15], 9 → [0, 1] [3, 2, 4], 6 → [1, 2] [3, 3], 6 → [0, 1]
def two_sum(nums, target):
# ваш кодCopilot
Читаю экран
Задача: два числа с суммой target · Python
Задача
Подсказка в разговоре полезна, только если приходит сразу. Облачное распознавание добавляет задержку и отправляет чужой голос наружу.
Задача: распознавать речь локально, отвечать быстрее, чем собеседник закончит мысль, и не держать ключ LLM в приложении.
Подсказку видит только владелец: окна нет ни в демонстрации экрана, ни на скриншоте, ни в Dock, ни в трее. И все это на двух системах, под каждую свой стек, с гибкой настройкой под человека и конкретный созвон.
Срез по слоям
- Интерфейспиксель
- Панель у выреза экрана, которая разворачивается стеклянным островком, или отдельное окно. Оба не видны при демонстрации экрана
- Логикаденьги и правила
- Сегментация речи, живой текст фразы, различение голосов, подсказка потоком
- Данныесхема и миграции
- Профиль и контекст на устройстве, лицензии и расход в изолированной базе бэкенда
- Сервервыкладка и эксплуатация
- Сайт с оплатой и выдачей ключей, бэкенд лицензий за nginx, SOCKS-туннель до зарубежного узла, инсталляторы под обе платформы
- Безопасностьядро
- Ключ LLM только на сервере, служба не от root в песочнице, аудио не покидает устройство
Распознавание в 40 раз быстрее

На Windows реплика в 3 секунды распознавалась 3,5 секунды: движок на процессоре всегда обрабатывает 30-секундное окно.
- 01faster-whisper вынесен на видеокарту отдельным процессом, приложение общается с ним по IPC и поднимает его само
- 02Нет Python или видеокарты: тихий откат на встроенный движок без потери функций, внизу окна индикатор GPU или CPU
- 03Проверены и отброшены тупики: CUDA-рантайм требует установленный CUDA Toolkit, Vulkan-рантайм втрое медленнее процессора
- 04На macOS WhisperKit работает на Neural Engine
Итог
Та же реплика распознается за 86 мс.
Живой текст без обрывков

Фраза появляется на экране, пока человек говорит, и не склеивается из кусков.
- 01Фраза пересчитывается окном с начала каждые 0,8 с новой речи, полсекунды до начала речи сохраняются, чтобы не потерять первое слово
- 02Начало длинной фразы закрепляется и дальше не пересчитывается
- 03Нейросетевой детектор речи и голосовые отпечатки различают собеседников, порог мягче из-за сжатия звука в созвоне
Интерфейс у выреза экрана

В покое панель не видна, при наведении разворачивается стеклянным островком.
- 01Системный звук на macOS снимается через Core Audio process tap: другие пути отдают тишину
- 02Окно видно только владельцу: на macOS его исключает из захвата sharingType, на Windows флаг WDA_EXCLUDEFROMCAPTURE, поэтому его нет ни в демонстрации, ни в записи, ни на скриншотах
- 03Нет значка в Dock и строке меню на macOS, нет кнопки на панели задач и значка в трее на Windows
- 04Ответ занимает все свободное место, история свернута в тонкую полосу, пустые поля объясняют себя текстом
Сайт, лицензии и туннель

Приложение не знает ключ LLM: каждый запрос идет через свой бэкенд с проверкой лицензии и учетом расхода. Вокруг него сайт, где продукт покупают и скачивают.
- 01Сайт продукта: три тарифа, оплата, ключ приходит сразу после покупки по вебхуку, загрузка под macOS и Windows
- 02Админка: выдача ключей вручную и отключение лицензий
- 03Тарифы по числу ответов, метринг по реальным токенам провайдера
- 04Служба слушает только петлю за nginx и работает от отдельного пользователя в песочнице systemd
- 05Сервер в РФ заблокирован LLM-провайдерами: запросы идут SOCKS-туннелем на Амстердам со строгой проверкой ключа хоста
- 06Текст запроса идет к модели транзитом: в базе только ключ, тариф и расход токенов, разговор не пишется ни в базу, ни в журнал
Гибкая настройка

Copilot подстраивается под человека и под конкретный созвон: где стоять на экране, какой длины отвечать, от чьего лица говорить.
- 01Где показывать: отдельное окно, островок у выреза или оба сразу, островок можно закрепить раскрытым
- 02Длина ответа по умолчанию: кратко, обычно или подробно, а у каждого ответа кнопки «короче», «подробнее», «пример»
- 03Поле «О себе» и описание вакансии: ответы звучат от лица кандидата и под стек компании
- 04Голосам даются имена: вместо «Голос 1» в подсказке стоит «Интервьюер»
- 05Горячие клавиши работают, пока в фокусе окно созвона: слушать, короче, листать ответы, размер шрифта
- 06На Windows выбор модели распознавания и языка, микрофон включается отдельно
Понимание контекста

Подсказка полезна, только если попадает в вопрос. Между распознаванием и моделью стоит свой слой понимания: чья реплика, вопрос ли это, что уже сказано.
- 01Голоса различаются по отпечаткам: уверенное совпадение, мягкое для коротких кусков, новый человек только после 2,5 секунды чистой речи и не больше четырех на созвоне
- 02Поддакивания, обрывки и галлюцинации распознавания вроде «спасибо за просмотр» не доходят до модели
- 03Память разговора считается по объему, около 8000 знаков, и видит фразу, которую еще договаривают
- 04Инструкция требует отвечать от первого лица и только по реальному опыту из профиля, без выдуманных фактов и цифр
- 05Первая мысль ответа выделена отдельно: ее начинают говорить, пока дочитывается остальное
- 06Профиль кэшируется у провайдера модели, повторные запросы в сессии дешевле
Куда развиваем

Следующая версия видит экран и умеет действовать, а решение остается за человеком: каждое действие ждет его разрешения.
- 01Зрение: читает то, что собеседник показывает в демонстрации, так же, как сейчас слышит голос
- 02Задача на экране: понимает условие, предлагает решение под стек кандидата и объясняет ход мысли
- 03Действия: запуск кода в нужной среде, открытие файла, ввод в редактор, каждое только после «разрешить»
- 04Правило приватности то же, что сейчас: экран разбирается для ответа и не хранится на сервере
Истории с прода
Инцидент 01 · открыт
Системный звук, которого нет
Через ScreenCaptureKit системный звук в нужном режиме не приходил вообще.
Инцидент 02 · открыт
Сервис лицензий рядом с чужой базой
Бэкенд жил на том же сервере, что и другой продукт, и работал от root: находка в нем давала доступ к чужим секретам.
Стек
Swift · AppKit · SwiftUI · WhisperKit · Core Audio · C# · .NET 10 · WPF · NAudio · Python · faster-whisper · Node.js · SQLite · OpenRouter