Gemma 26B дообучили на MacBook с 24 ГБ: офлайн-помощник дал 703 из 766
Разработчик полгода собирает голосового помощника для macOS, который выполняет действия на компьютере: открывает папки, ищет файлы, читает почту. Языковая модель работает локально, без облака. Он дообучил Gemma 4 26B A4B методом QLoRA прямо на MacBook с 24 ГБ общей памяти. Ключевой ход — перенос правил из системной подсказки на 5 000 токенов в веса LoRA-насадки. Версия v4b с короткой подсказкой решила 703 из 766 тестовых разговоров при медиане 1,64 с. Базовая Gemma с длинной подсказкой отвечала за 1,94 с и давала 89 % верных шагов. • Обучение: ~3 часа на проход, примеры не длиннее ~1400 токенов, иначе Metal падает по памяти • Ремонтный проход на 416 проблемных примерах занял 70 минут и дал лучший результат • Поиск по документам идёт через Spotlight за 60–700 мс, без своей векторной базы
AI-обработка оригинала Habr AI; редакция Hamidun News
Полгода работы, один MacBook с 24 ГБ общей памяти и жёсткое условие: никакого облака и подписок. Автор проекта собрал голосового помощника для macOS, который не болтает, а действует: открывает папки, ищет файлы, запускает фильмы, читает почту. Для этого он дообучил Gemma 4 26B A4B (MoE с ~4 млрд активных параметров) методом QLoRA через mlx-lm. Правила, которые раньше занимали около 5 000 токенов системной подсказки, переехали в веса небольшой LoRA-насадки. На замороженном стенде из 766 разговоров версия v4b с короткой подсказкой решила 703, а медиана ответа составила 1,64 секунды.
Мозг выбирает инструмент, а не пишет текст
Приложение написано на Electron, вокруг окна работают отдельные процессы. За слух отвечает Python с детектором речи и Whisper в сборке MLX. За мозг отвечает llama-server (llama.cpp) с Gemma в 4-битной квантизации и LoRA в формате GGUF. Голос синтезирует Qwen-TTS по эталонной записи. Системные вещи macOS (звук, микрофон, эхо) закрывает помощник на Swift. Упавший процесс перезапускает сторож, голос поднимается примерно за 7 секунд.
На каждую реплику модель возвращает один шаг в фиксированном JSON с полями think, tool, args, say и next. Окно выполняет инструмент и при необходимости возвращает результат модели. Любое изменение или удаление файлов требует голосового подтверждения. Тот же формат отдают ChatGPT, Claude и Gemini, если пользователь их подключил: инструменты передаются им родными вызовами функций. Тогда локальный llama-server выключается и освобождает около 13 ГБ.
Стенд на 766 разговоров и ремонтный проход
Прежде чем учить модель, автор собрал замороженный стенд: фразы с эталонными шагами, на которых он никогда не обучается. В него вошли команды папкам, поиск фильмов, почта, вопросы к документам, цепочки реплик, отказы и ослышки распознавания. Два урока обошлись дорого. Проверка по отдельным репликам выбрасывала более 400 цепочек и рисовала слишком радужную картину, поэтому сравнивать нужно целые разговоры. Примеры, собранные по ошибкам стенда, завышают оценку на нём же, так что для честной проверки нужен свежий набор.
Динамика версий (стенд вырос с 533 до 766 разговоров, поэтому прямое сравнение корректно только внутри одного размера):
- Без насадки, полная подсказка: 475 из 533 (89 %), медиана 1,94 с
- v3, полная подсказка: 487 из 533 (91 %), медиана 1,63 с
- v4 с новыми разделами (документы, чертежи, английский, цепочки): 684 из 766
- v4b, короткая подсказка: 703 из 766, медиана 1,64 с
В v4 модель выросла на новых разделах, но просела на старых. «Включи фильм» стало запускать музыку, «найди фильм» потерял тип поиска, а «свою папку» путалась с папкой заметок. Помог ремонтный проход: 416 примеров на эти случаи плюс случайная выборка старых и новых данных, всего около 1100. Доучивание шло ещё ~1000 шагов с learning rate 1,5e-5 вместо 3e-5 и без валидации. Заняло это около 70 минут и дало лучший результат за весь проект. Обучение с нуля, наоборот, заставляло модель забывать старое.
Что ломалось на ноутбуке
Лимит Metal диктует длину примера: не больше ~1400 токенов, иначе вылетает Insufficient Memory. Учить с полной подсказкой на Mac физически нельзя, и это ещё один довод в пользу переноса правил в веса. Скрипт заранее отбрасывает примеры, которые не влезают. Скорость составляет 0,25–0,4 шага в секунду, проход занимает около трёх часов, поэтому учится модель ночью.
Остальные грабли:
- Mac засыпал. После одного обучения проверка на стенде шла шесть часов. Теперь вся цепочка (обучение, перевод в GGUF, стенд) запускается под одним caffeinate -i -s.
- Срывы по памяти. Браузер и индексация Spotlight разгоняют своп до 6–7 ГБ, и срывы совпадали с валидацией каждые 200–400 шагов. Решение: сохранять точки, автоматически продолжать с --resume-adapter-file и отключать валидацию на поздних этапах.
- Правка bash-скрипта на лету уронила цепочку с syntax error, потому что bash читает файл по ходу выполнения.
- Для Gemma 4 понадобились две небольшие правки в mlx-lm, а для конвертации насадки в GGUF нужно отдельное окружение с torch.
Вокруг модели тоже хватает инженерии. Фильм приглушается не по имени помощника, а по началу речи: если голос громче «плавающего пола» на 6 дБ и это не эхо, звук снижается, а через 2,5 секунды без имени возвращается. Дефект синтеза, когда «сэр» превращается в «сёр» примерно в каждом третьем дубле, ловится акустикой.
Гласную измеряют LPC-анализом 12-го порядка и сравнивают вторую форманту (у «э» около 2000–2300 Гц, у «ё» 750–900 Гц). Проверка занимает около 3 мс, детектор находит 39 сбоев из 46, а фраза пересинтезируется другим дублем. Вопросы к документам решает Spotlight: поиск за 60–700 мс, два-три лучших файла, окна по ~600 знаков и ответ только по ним.
Чертежи DWG разбирает LibreDWG в WebAssembly в отдельном потоке, результат превращается в SVG и кэшируется.
Рецепт для своего проекта
Если строите локального агента, начните со стенда, а не с обучения. Заморозьте набор разговоров и сравнивайте версии только на нём, а для финальной оценки держите свежую выборку, которую не видели ни модель, ни вы.
Правила, которые тащат за собой тысячи токенов подсказки в каждом запросе, выгодно переносить в LoRA: точность и задержка улучшаются одновременно. Новые навыки добавляйте поверх прежней насадки на смеси старых и новых данных, с пониженным learning rate. 24 ГБ хватает для MoE-модели на 26B, если резать длину примеров, сохранять точки и не давать машине уснуть. Следующий шаг автора — личная память и самообучение на фразах, которые помощник не понял.
- 28 окт. 2026 г.Keystone убрал имя модели из кода: open-source LLM-шлюз добавляет 0,64 мс
- 28 окт. 2026 г.Wired за сутки протестировал 6 ИИ-агентов: Dots лидирует, Gemini Spark провалил обед
- 28 окт. 2026 г.Anthropic превращает Claude Code в платформу: Claude Mods переворачивают обвязку агента
- 28 окт. 2026 г.Liquid AI выпустила LFM2.5-24B-A2B: агент с 2B активных параметров
Вопросы и ответы по материалу
Что известно по теме: мозг выбирает инструмент, а не пишет текст?
Приложение написано на Electron, вокруг окна работают отдельные процессы. За слух отвечает Python с детектором речи и Whisper в сборке MLX. За мозг отвечает llama-server (llama.cpp) с Gemma в 4-битной квантизации и LoRA в формате GGUF. Голос синтезирует Qwen-TTS по эталонной записи. Системные вещи macOS (звук, микрофон, эхо) закрывает помощник на Swift. Упавший процесс перезапускает сторож, голос поднимается примерно за 7 секунд. На каждую реплику модель возвращает один шаг в фиксированном JSON с полями think, tool, args, say и next. Окно выполняет инструмент и при необходи
Что известно по теме: стенд на 766 разговоров и ремонтный проход?
Прежде чем учить модель, автор собрал замороженный стенд: фразы с эталонными шагами, на которых он никогда не обучается. В него вошли команды папкам, поиск фильмов, почта, вопросы к документам, цепочки реплик, отказы и ослышки распознавания. Два урока обошлись дорого. Проверка по отдельным репликам выбрасывала более 400 цепочек и рисовала слишком радужную картину, поэтому сравнивать нужно целые разговоры. Примеры, собранные по ошибкам стенда, завышают оценку на нём же, так что для честной проверки нужен свежий набор. Динамика версий (стенд вырос с 533 до 766 разговоров, поэ
Что известно по теме: что ломалось на ноутбуке?
Лимит Metal диктует длину примера: не больше ~1400 токенов, иначе вылетает Insufficient Memory. Учить с полной подсказкой на Mac физически нельзя, и это ещё один довод в пользу переноса правил в веса. Скрипт заранее отбрасывает примеры, которые не влезают. Скорость составляет 0,25–0,4 шага в секунду, проход занимает около трёх часов, поэтому учится модель ночью. Остальные грабли: Mac засыпал. После одного обучения проверка на стенде шла шесть часов. Теперь вся цепочка (обучение, перевод в GGUF, стенд) запускается под одним caffeinate -i -s. Срывы по памяти. Браузер и индекс
Соберите рабочего ИИ-агента или сервис своими руками без ручного кода
В Академии Жемала Хамидуна (academy.hamidun.com) открыт бесплатный 72-часовой тест-драйв: интерактивные скетч-уроки по Claude Code и Cursor, живой Tech Radar и готовые шаблоны агентов.
Главное из мира ИИ — раз в неделю
7 ключевых событий недели, отобранных вручную. Без шума, репостов и пресс-релизов.
Готово! Проверьте почту — мы отправили подтверждение.