Перейти к содержимому
АРХИТЕКТУРА

Скорее всего, fine-tune Claude вам не нужен: альтернативы 2026, которые выигрывают

В 2026 fine-tuning Claude редко окупается. Что бьёт его: длинноконтекстные примеры, prompt caching, structured outputs и роутинг — с кодом.

Раз в пару недель команды задают нам один и тот же вопрос: «Стоит ли дотюнить Claude на наших доменных данных?» В 2026 году ответ почти всегда — нет. Связка длинноконтекстного few-shot, prompt caching, structured outputs и роутинга моделей тихо закрыла тот разрыв, который fine-tuning раньше открывал, — и делает это без привязки к замороженному снимку базовой модели, который устареет через два месяца.

Этот пост объясняет, почему так, когда fine-tune всё же оправдан, и показывает рабочий пример, где кэшированный 50-shot системный промпт обыгрывает дотюненную модель на извлечении данных из инвойсов.

Ландшафт fine-tuning в 2026

Anthropic предоставляет fine-tuning для Claude Haiku и Sonnet через Amazon Bedrock — это сейчас единственный first-party путь. Механика знакома всем, кто тюнил OpenAI: загружаете JSONL с парами вход/выход, запускаете тренировочный джоб, разворачиваете кастомный эндпоинт и платите премиальную цену за токен плюс почасовой хостинг.

Подвох в том, что экономика и итерационная петля выглядят совсем не как у prompt engineering:

  • Стоимость тренировки — единоразовые 4–5 знаков за серьёзный датасет.
  • Хостинг — фиксированная почасовая ставка, обслуживайте вы один запрос или миллион.
  • Цена за токен на дотюненном Claude ощутимо выше базовой.
  • Скорость итерации — часы, а не секунды. Запятую так не A/B-тестнёшь.
  • Апгрейды базовой модели не наследуются. Когда выйдет Sonnet 4.7, ваш fine-tune останется на 4.6, пока вы не перетренируете.

Для команды, которая шипит продукт, последний пункт обычно сам по себе дисквалифицирует fine-tune. Темп улучшения базовых моделей в 2025–2026 такой, что полугодовалый fine-tune часто проигрывает свежей базовой модели вообще без кастомизации.

Альтернативный стек

Вот четыре компонента, которые мы рекомендуем попробовать прежде, чем вы вообще задумаетесь о fine-tune. По нашему опыту, они закрывают ~90% случаев, когда командам кажется, что нужен fine-tune.

1. Few-shot примеры в кэшированном системном промпте

У Sonnet 4.6 контекст 200K токенов. Этого хватает на 50–200 качественных пар вход/выход из вашего домена. С prompt caching эти примеры токенизируются один раз, на следующих вызовах оплачиваются примерно по 10% от input-ставки и доступны почти бесплатно следующие пять минут.

В итоге вы получаете большую часть пользы от fine-tuning — модель действительно видела edge-кейсы, форматы и тон вашего домена — с тремя свойствами, которых fine-tune дать не может:

  • Мгновенная итерация. Поправили JSON-файл, передеплоили — готово.
  • Прозрачная отладка. Если модель ошиблась, можно прочитать те примеры, на которых она обуславливалась.
  • Бесплатные апгрейды модели. Anthropic выкатывает более умного Sonnet — ваш промпт автоматически становится лучше.

2. Базовая модель уже очень хороша

Это часть, которую никто не хочет признавать. В 2024 fine-tuning часто давал реальный прирост на узких доменах. В 2026 Sonnet 4.6 «из коробки» действительно отлично работает на юридических, медицинских, финансовых, кодовых и саппорт-задачах — настолько, что fine-tune нередко делает модель хуже на out-of-distribution входах, лишь скромно прибавляя на in-distribution.

Прогоните честный eval, прежде чем верить, что вам нужен fine-tune. Вы часто обнаружите, что разрыв, который вы видели, — это проблема промпта.

3. Structured outputs через принудительный tool use

Если настоящая причина желания fine-tune — «нам нужно, чтобы вывод каждый раз строго соответствовал схеме», — fine-tune не нужен. Нужно форсить tool use. Опишите вывод как input_schema инструмента, выставьте tool_choice на этот конкретный tool — и Claude обязан вернуть JSON, валидирующийся по вашей схеме.

В 2023 это было одной из основных причин дотюнивать модели OpenAI. На Claude в 2026 это пятистрочное изменение в payload запроса.

4. Роутинг моделей ради цены

В большинстве production-пайплайнов запросы сильно различаются по сложности. Простые отправляйте на Haiku, эскалируйте на Sonnet при падении уверенности, Opus оставьте на действительно тяжёлые случаи. Хорошо настроенный роутер режет общие траты на 60–80% относительно «всё на Sonnet» — без какого-либо кастомного обучения.

Роутер можно реализовать как Haiku-классификатор перед Sonnet или как порог уверенности по logprobs первой модели.

5. RAG для знаний, которые меняются

Вторая популярная причина тянуться к fine-tune — «хотим, чтобы модель знала наши доки». Это retrieval, а не training. Дотюнивать модель на корпусе, который обновляется еженедельно, — операционное безумие: переобучаться по пятницам? Эмбеддите корпус, доставайте топ-чанки, вставляйте в кэшированный промпт. База знаний обновляется в момент переиндексации.

Сравнение по цене

Положим цифры. Допустим, вы обрабатываете 1M извлечений из инвойсов в месяц, в среднем 2K input и 500 output токенов.

Путь A — fine-tune Sonnet:

  • Разовая тренировка: ~$8K за качественный датасет и пару итераций.
  • Хостинг эндпоинта: ~$2K/мес фикс.
  • Премия за токен: примерно 1.5× к базовым Sonnet ставкам.
  • Месяц 1: ~$15K. Стационар: ~$10K/мес.
  • Перетюнинг при апгрейде базы: ещё $8K каждые полгода.

Путь B — кэшированный 50-shot Sonnet:

  • 50 примеров ≈ 30K кэшированных токенов, пишутся раз за окно кэша.
  • На запрос: 30K cached input (10%-ставка) + 2K live input + 500 output.
  • Итого: ~$5K/мес, без тренировки и хостинга.
  • Бесплатный апгрейд на Sonnet 4.7, 4.8 и далее.

С ростом объёма разрыв увеличивается, потому что префикс кэша амортизируется по всем запросам внутри окна.

Когда fine-tune всё же оправдан

Мы не абсолютисты. Три сценария реально оправдывают дотюнинг:

  1. Доменный язык, с которым Claude буксует. Узкая научная нотация, низкоресурсные неанглийские языки или собственные DSL, где даже 200-shot упирается в потолок качества.
  2. Извлечение, критичное к латентности, на масштабе. Если нужно sub-200ms и нет бюджета на префикс кэша — небольшой дотюненный Haiku с коротким промптом выиграет по p99.
  3. Регуляторные требования к выводу. Некоторые комплаенс-режимы требуют, чтобы модель была обучена на одобренных данных, а не просто обусловлена ими на инференсе. Редко, но встречается.

Если ничего из этого не про вас — начните с альтернативного стека.

Код: 50-shot извлечение из инвойсов

Минимальный пример через OpenAI-совместимый эндпоинт Claudexia. Системный промпт грузит JSON-файл с 50 примерами инвойсов и кэшируется так, что последующие вызовы платят только за живой текст инвойса.

import json
from anthropic import Anthropic

client = Anthropic(
    api_key="sk-cxa-...",
    base_url="https://api.claudexia.tech/v1",
)

# Загружаем 50 пар вход/выход из вашего gold-датасета
with open("invoice_exemplars.json") as f:
    exemplars = json.load(f)

few_shot_block = "\n\n".join(
    f"<example>\n<invoice>{ex['input']}</invoice>\n"
    f"<extracted>{json.dumps(ex['output'])}</extracted>\n</example>"
    for ex in exemplars
)

EXTRACT_TOOL = {
    "name": "record_invoice",
    "description": "Сохранить структурированные данные инвойса.",
    "input_schema": {
        "type": "object",
        "properties": {
            "invoice_number": {"type": "string"},
            "issue_date": {"type": "string"},
            "vendor": {"type": "string"},
            "total_amount": {"type": "number"},
            "currency": {"type": "string"},
            "line_items": {"type": "array"},
        },
        "required": ["invoice_number", "vendor", "total_amount"],
    },
}

def extract(invoice_text: str):
    return client.messages.create(
        model="claude-sonnet-4.6",
        max_tokens=1024,
        system=[
            {
                "type": "text",
                "text": "Ты — система извлечения данных из инвойсов. "
                        "Точно следуй формату и обработке edge-кейсов "
                        "из примеров.",
            },
            {
                "type": "text",
                "text": few_shot_block,
                "cache_control": {"type": "ephemeral"},
            },
        ],
        tools=[EXTRACT_TOOL],
        tool_choice={"type": "tool", "name": "record_invoice"},
        messages=[{"role": "user", "content": invoice_text}],
    )

Тяжёлую работу делают три вещи:

  • cache_control на few-shot блоке опускает стоимость 30K-токенного набора примеров примерно до 10% от обычной input-ставки на запрос.
  • tool_choice форсит record_invoice — ответ гарантированно валидный JSON по вашей схеме. Никаких regex-парсеров и retry-петель на кривом выводе.
  • Сами примеры обуславливают модель на ваши форматы вендоров, валютные конвенции и edge-кейсы строк.

Eval до и после

Честная версия совета: измеряйте. Прежде чем коммититься в любой путь, соберите held-out eval из 200–500 реальных входов с gold-метками. Затем прогоните:

  1. Базовый прогон: Sonnet 4.6 с однопараграфным системным промптом.
  2. Few-shot cached: та же модель, 50-shot кэшированный промпт + forced tool.
  3. Fine-tune: только если 1 и 2 не дотягивают.

На наших внутренних бенчмарках по извлечению из инвойсов, классификации саппорт-тикетов и тегированию пунктов договоров конфигурация #2 совпадала или била fine-tune той же модели в 7 случаях из 10 — при меньшей цене и итерации в день.

Итог

Fine-tuning Claude в 2026 — реальный инструмент, но он больше не дефолт, когда базовая модель «почти достаточно хороша». Сначала попробуйте альтернативный стек: кэшированный few-shot, forced tool use, RAG для свежих знаний и Haiku-first роутер. Будете шипить быстрее, платить меньше и бесплатно наследовать каждое улучшение базовой модели, которое выкатывает Anthropic.

Если хочется поэкспериментировать с кэшированным few-shot по ценам, эквивалентным Anthropic, направьте SDK на https://api.claudexia.tech/v1 — существующий код prompt caching заработает без изменений.