Как дообучить свою модель на сессиях Claude Code: установка и разбор скилла tinker-ai-skill

Как дообучить свою модель на сессиях 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.
Репозиторий tinker-ai-skill на GitHub: 226 звёзд на 8 ноября 2026 года. Источник: GitHub
Репозиторий tinker-ai-skill на GitHub: 226 звёзд на 8 ноября 2026 года. Источник: GitHub

Установка скилла и настройка хранения логов

Скилл клонируется в персональную директорию агента одной командой:

git clone https://github.com/drost-ai/tinker-ai-skill.git ~/.claude/skills/tinker-ai-skill

По умолчанию Claude Code удаляет файлы сессий старше 30 дней. Чтобы сохранить данные для обучения, в конфигурационном файле ~/.claude/settings.json увеличивают период очистки до десяти лет:

{ "cleanupPeriodDays": 3650 }

После установки скилл вызывается в интерфейсе 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. Если в итоговых файлах остаётся хоть одна подстрока из списка или кандидат в учетные данные, процесс останавливается с ошибкой.
python scripts/collect_sessions.py --data-dir ./data python scripts/normalize_sessions.py --data-dir ./data python scripts/anonymize_sessions.py --data-dir ./data --identity-file identity.json

Нарезка на контекст и сборка датасета

  • Измерение реальным токенизатором: скрипт build_dataset.py рассчитывает точные размеры строк через рендерер выбранной архитектуры. Смена токенизатора способна сдвинуть объем на 14%, поэтому нарезка выполняется строго под конкретную модель.
  • Безопасные границы окон: граница фрагмента ставится только там, где нет незакрытого вызова инструмента, чтобы модель не обучалась на изолированных ответах.
  • Разделение на обучение и валидацию: разбиение происходит целиком по сессиям с фиксированным сидом, исключая утечку сообщений между выборками при пересборке под разные модели.
python scripts/build_dataset.py --data-dir ./data --model Qwen/Qwen3.6-35B-A3B --max-len 65536 \ --system-prompt-file assets/system-prompt.md

Обучение на платформе 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 запускает инференс базовой модели и чекпоинтов на реальных задачах. Чекпоинт выбирается по корректности вызова инструментов и связности рассуждений, так как график снижения функции потерь может скрывать ухудшение логики.
python scripts/train_tinker.py --data-dir ./data --name qwen3.6-35b-a3b-64k python scripts/sample_checkpoint.py --data-dir ./data --name qwen3.6-35b-a3b-64k \ --checkpoint tinker://default/weights/000100 --prompt "Find and fix the failing test."

Слияние весов и локальный запуск в 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 равным нулю, предотвращая искажение ответов.
python scripts/export_checkpoint.py --run-dir ./runs/ --checkpoint 000100 \ --base-model Qwen/Qwen3.6-35B-A3B --out ./export/my-coder --trust-remote-code LLAMA_CPP=~/src/llama.cpp scripts/make_gguf.sh ./export/my-coder/hf-merged ./export/my-coder/gguf my-coder Q4_K_M Q8_0 scripts/serve_gguf.sh ./export/my-coder/gguf/my-coder-Q4_K_M.gguf

Требования к оборудованию и ограничения

  • Оперативная память: слияние весов модели на 27 млрд параметров выполняется за несколько минут на рабочей станции, тогда как для архитектур MoE на 120 млрд параметров требуется до 220 ГБ оперативной памяти.
  • Место на диске: требуется свободное пространство для хранения исходных весов базовой модели, объединённой версии bf16 и квантованных файлов GGUF.
  • Срок хранения контрольных точек: промежуточные чекпоинты на платформе Tinker хранятся в течение 7 дней, поэтому экспорт адаптера необходимо выполнять до истечения этого периода.

Всё самое интересное — в нашем Telegram-канале «Claude без воды».

11