Как дообучить свою модель на сессиях Claude Code: установка и разбор скилла tinker-ai-skill
Пайплайн из девяти шагов превращает логи диалогов в LoRA-адаптер на платформе Tinker и собирает квантованную GGUF-модель для локального запуска через llama.cpp.
Создатель моделей семейства Tess Мигель Тиссера опубликовал на GitHub открытый репозиторий tinker-ai-skill под лицензией MIT. На 8 ноября 2026 года проект набрал 226 звёзд и 33 форка. Скилл работает по открытому стандарту Agent Skills в Claude Code, OpenAI Codex и OpenCode, предлагая готовый сквозной пайплайн для дообучения небольших базовых моделей на истории собственных диалогов с Claude Code.
Почему логам агента не подходит обычный SFT
- Диалоги агента принципиально отличаются от стандартных чат-датасетов: они содержат вызовы инструментов с JSON-аргументами, системные рассуждения и многократно превышают окно контекста базовых моделей.
- Попытка применить стандартный подход к логам приводит к деградации: модель теряет цепочки рассуждений, ломает синтаксис вызова инструментов или переобучается на вымышленные тестовые данные.
- Случайная анонимизация для каждой сессии: при подстановке единого фейкового окружения модель заучивает его и начинает навязывать вымышленные пути в реальной среде. Скрипт генерирует новый случайный набор подставных данных для каждого сеанса.
- Контекст компактизации на срезах: длинные сессии разбиваются на фрагменты, и каждый срез после первого получает детерминированный блок рабочего контекста и мост продолжения, имитирующий работу настоящего механизма сжатия.
- Объявление инструментов на каждой строке: обучение без схемы приводит к потере навыка вызова функций, даже если график функции потерь стабильно снижается.
- Сохранение рассуждений в истории: стандартные гибридные рендереры вырезают рассуждения из предыдущих реплик, поэтому скрипты пересобирают рендерер с сохранением исходных блоков thinking.
Установка скилла и настройка хранения логов
Скилл клонируется в персональную директорию агента одной командой:
По умолчанию Claude Code удаляет файлы сессий старше 30 дней. Чтобы сохранить данные для обучения, в конфигурационном файле ~/.claude/settings.json увеличивают период очистки до десяти лет:
После установки скилл вызывается в интерфейсе Claude Code командой /tinker-ai-skill. Для окружения требуются Python 3.11+, пакетный менеджер uv или pip, библиотека tinker-cookbook версии не ниже 0.6.0 и ключ API платформы Tinker.
Подготовка логов: нормализация и анонимизация
- Сбор сессий: скрипт collect_sessions.py копирует файлы основных сессий из директории ~/.claude/projects/, отсеивая короткие диалоги и сохраняя хеши в манифест.
- Нормализация структуры: скрипт normalize_sessions.py переводит сырые записи в единую схему сообщений. Блоки рассуждений сохраняются в виде текста, ошибки API и служебные события удаляются, а вызовы инструментов проверяются на парность с ответами.
- Анонимизация: скрипт anonymize_sessions.py удаляет токены и заменяет персональные данные по файлу identity.json. Если в итоговых файлах остаётся хоть одна подстрока из списка или кандидат в учетные данные, процесс останавливается с ошибкой.
Нарезка на контекст и сборка датасета
- Измерение реальным токенизатором: скрипт build_dataset.py рассчитывает точные размеры строк через рендерер выбранной архитектуры. Смена токенизатора способна сдвинуть объем на 14%, поэтому нарезка выполняется строго под конкретную модель.
- Безопасные границы окон: граница фрагмента ставится только там, где нет незакрытого вызова инструмента, чтобы модель не обучалась на изолированных ответах.
- Разделение на обучение и валидацию: разбиение происходит целиком по сессиям с фиксированным сидом, исключая утечку сообщений между выборками при пересборке под разные модели.
Обучение на платформе Tinker и оценка поведения
- Офлайн-проверка: запуск скрипта train_tinker.py без флага --train декодирует тестовую строку, показывает системный промпт, схему инструментов, шаги на эпоху и итоговое число токенов для расчёта стоимости.
- Тарификация за токены: платформа Tinker рассчитывает стоимость по числу активных параметров модели. По расценкам ноября 2026 года эпоха на корпусе из 100 сессий (около 5 млн токенов) обходится примерно в $6 для Qwen3.6-35B-A3B, $8 для Inkling 2 Small и $21 для плотной Qwen3.8-27B.
- Оценка по поведению: скрипт sample_checkpoint.py запускает инференс базовой модели и чекпоинтов на реальных задачах. Чекпоинт выбирается по корректности вызова инструментов и связности рассуждений, так как график снижения функции потерь может скрывать ухудшение логики.
Слияние весов и локальный запуск в llama.cpp
- Слияние адаптера: скрипт export_checkpoint.py загружает веса LoRA из хранилища Tinker и объединяет их с базовой моделью через функцию build_hf_model в формат HuggingFace bf16.
- Конвертация и квантование: скрипт make_gguf.sh преобразует веса в формат GGUF с помощью инструментов llama.cpp и выполняет квантование в Q4_K_M или Q8_0, сохраняя проектор зрения и голову спекулятивного декодирования при их наличии.
- Параметры запуска: скрипт serve_gguf.sh запускает llama-server с сохранением рассуждений через флаг --reasoning-preserve, контекстом не менее 64K токенов и параметром min-p равным нулю, предотвращая искажение ответов.
Требования к оборудованию и ограничения
- Оперативная память: слияние весов модели на 27 млрд параметров выполняется за несколько минут на рабочей станции, тогда как для архитектур MoE на 120 млрд параметров требуется до 220 ГБ оперативной памяти.
- Место на диске: требуется свободное пространство для хранения исходных весов базовой модели, объединённой версии bf16 и квантованных файлов GGUF.
- Срок хранения контрольных точек: промежуточные чекпоинты на платформе Tinker хранятся в течение 7 дней, поэтому экспорт адаптера необходимо выполнять до истечения этого периода.
Всё самое интересное — в нашем Telegram-канале «Claude без воды».