Во время разговора помощь нужна в очень неудобный момент: ты уже слушаешь человека, пытаешься понять его вопрос и одновременно вспоминаешь то, что собирался сказать. Если рядом появится ещё один болтливый интеллект, количество участников увеличится, а ясности может стать меньше.
CallCoach я делаю как нативный прототип для macOS. Интерфейс на SwiftUI держит рядом транскрипт, сценарий и подсказку. Мне нужна одна короткая реплика, которую можно сразу произнести. Читать объяснение модели во время разговора человек не успевает.
Разговор приходит кусками
Микрофонный звук проходит через AVAudioEngine, для системного аудио используется отдельный путь на ScreenCaptureKit. Распознавание связано с речевыми API Apple. Затем обновления текста попадают в слой подсказок.
На скриншоте — CallCoach для macOS из текущей версии проекта. Открыт режим Real Estate: слева место для транскрипта, справа быстрые ответы и этапы разговора. Здесь показан предпросмотр готовой реплики; запись звонка не запускалась.

Каждое промежуточное слово не должно запускать новую рекомендацию. В текущем коде есть задержка объединения обновлений — 450 миллисекунд. Это параметр обработки, а не обещанная задержка всей системы: захват, распознавание и генерация добавляют своё время.
Контекст тоже ограничен. Для поиска по базе знаний берётся недавний фрагмент разговора; в запрос к модели отправляется окно последних слов, а не бесконечная стенограмма. Иначе приложение постепенно начинает обсуждать начало звонка, когда люди уже перешли к совершенно другой теме.
В режиме Interview тот же интерфейс помогает готовиться к собеседованию. На экране выбран Portfolio: видны короткие заготовки для рассказа о задаче, своей роли и результате. Это настоящее окно приложения без записи разговора.

«Знает мою тему» не означает «я обучил модель»
В проекте есть сценарии разговора, контрольные пункты и подбор релевантных фрагментов базы знаний. Это передача контекста и поиск, а не собственное обучение весов модели. Разница важна: новый документ может помочь ответу, но не превращает систему в проверенного эксперта.
Для локальной генерации используется Foundation Models с проверкой доступности на устройстве. В коде также есть переключаемый облачный режим Gemini Live. По умолчанию облачный режим выключен, но при его выборе аудио обрабатывается по другому маршруту. Поэтому обещание «всё всегда остаётся на Mac» было бы неверным.
Самое трудное находится на экране
Подсказка может быть правильной и всё равно мешать: появиться поздно, повторить очевидное, перекрыть нужный фрагмент или потребовать слишком много чтения. Здесь нужны проверки в настоящих разговорах на конкретном оборудовании. Репозиторий не доказывает качество распознавания и не выдаёт сертификат удачного собеседника.
На скриншотах — настоящее окно приложения и предпросмотр готовых реплик. Они показывают устройство интерфейса, но не качество распознавания в живом разговоре. Следующая проверка — своевременность и полезность короткой подсказки на конкретном оборудовании.
Связанные истории: Разговорное портфолио.




@nevsky_alexander
В Instagram — Дубай без парадного фасада: семья, город, находки и то, что происходит между проектами. В Threads — мысли вслух о дизайне и AI, на YouTube — видео, которым тесно в сторис. Подписывайтесь там, где вам удобнее: будем на связи