Claude Sonnet 5.5: профиль, доступ через Zenith и выбор для разработки

Первые пользовательские тесты Sonnet 5.5: реальные задачи в Claude Code, ревью 44 PR, научные ссылки и визуальные проекты. Сравниваем качество, скорость и стоимость с Opus 5.5.

Скриншот таблицы пользовательского теста Sonnet 5.5 на Reddit

Коротко: Anthropic позиционирует Claude Sonnet 5.5 для ограниченных повседневных задач: исправления локальной ошибки, преобразования данных, первичного ревью и подготовки документов. Anthropic позиционирует Opus 5.5 для более сложной работы, где требуется тщательное суждение. Это описание сценариев разработчика, а не гарантия результата на конкретном проекте. Источник Anthropic.

Официальный API ID Anthropic — claude-sonnet-5-5. В таблице Anthropic для версии указаны контекст до 1 млн токенов, максимальный вывод до 128 тыс. токенов, адаптивный thinking и высокий effort по умолчанию. В снимке каталога Zenith от 27 октября 2026 года для одного ключа был SKU claude-sonnet-5-5. Это каталожный ID и наблюдение одного ключа, а не доказательство того, что Zenith использует определённый внутренний backend модели.

Кому подходит Claude Sonnet 5.5

Anthropic сообщает, что Sonnet 5.5 отвечает более чем на 30% быстрее Sonnet 5 и в собственных оценках может снижать стоимость задачи до 30%. Эти показатели относятся к оценкам разработчика: «стоимость задачи» не равна ставке за токен, а скорость зависит от входа, вывода и условий запуска. Публикация Anthropic.

Идентификация версии и статус доступа

Официальный API ID Anthropic — claude-sonnet-5-5. Отдельно, в снимке каталога Zenith от 27.10.2026 для одного ключа присутствовал SKU с таким же ID. Это датированное наблюдение каталога, не подтверждение текущего доступа или соответствия внутренней модели.

claude-sonnet-5-5

В наблюдении GET /v1/models Zenith от 28.10.2026 ответ был объектом с массивом data. Для собственного ключа проверьте точный ID записи и supported_endpoint_types; наличие SKU подтверждает метаданные каталога, а не работу inference. В снимке от 27.10.2026 reasoningEffortModes для SKU был пустым: доступность режима medium этим наблюдением не подтверждается. Высокий effort по умолчанию указан в таблице Anthropic для официальной модели и не устанавливает настройки маршрута Zenith. Таблица моделей Anthropic и каталог Zenith.

На 28.10.2026 документация Zenith указывала способ получения API key через Telegram-бота; процесс покупки редакция не проходила. Условия оплаты опубликованы на странице условий Zenith, но конкретная операция и платный inference редакцией не проверялись. Поэтому этот материал описывает документированные маршруты и способ предварительной проверки каталога, а не подтверждённый доступ к рабочему запросу. Факт SKU — наблюдение каталога одного ключа, цены — архивный снимок от 27.10.2026; ни то ни другое не подтверждает текущую доступность или соответствие backend официальной модели.

Чем Sonnet 5.5 отличается от ближайших вариантов

Вариант Подтверждённое отличие Практический компромисс
Sonnet 5.5 Anthropic позиционирует модель для чётко ограниченных повседневных задач, исправления ошибок и создания документов, презентаций и таблиц. В официальной таблице указаны контекст 1 млн токенов, адаптивный thinking и высокий effort по умолчанию. Подходит для рассмотрения, когда важны ясные границы задачи и большой контекст; качество на конкретном проекте здесь не измерялось.
Sonnet 5 Anthropic сообщает о сравнительных результатах по скорости, стоимости задачи и Terminal-Bench 4.0. Для Sonnet 5 указаны автоматически добавляемые budget tags; Sonnet 5.5 их не получает. Это различия в опубликованных характеристиках, а не гарантия результата на вашем коде. Доступность обеих версий зависит от выбранного канала.
Opus 5.5 Anthropic позиционирует её для сложной работы, требующей тщательного суждения. Рассмотрите её для неоднозначной задачи, но не считайте это доказательством превосходства на каждом проекте. В официальном прайсе Anthropic базовые ставки Opus 5.5 выше ставок Sonnet 5.5.

В опубликованном Anthropic результате Terminal-Bench 4.0 Sonnet 5.5 набрала 70,6%, а Sonnet 5 — 10,3%. Это показатель конкретной оценки Anthropic, не точность на вашем репозитории и не результат редакционного прогона. Из этих процентов нельзя вывести качество или скорость на приведённой ниже функции. Описание оценки Anthropic.

Практический сценарий с заданным контрактом

Пример ниже демонстрирует проверяемую методику исправления кода, а не преимущество Sonnet 5.5 перед другой моделью и не фактический ответ модели. Контракт ограничен целыми числами: вернуть уникальные элементы в порядке возрастания, не изменяя исходный список.

Исправь функцию минимальным изменением.
Контракт: items — список целых чисел. Вернуть отсортированный
список уникальных элементов; исходный список не изменять.
Публичную сигнатуру не менять.
Верни только JSON с полями cause, patch, tests и risks.

Фрагмент:
def unique_sorted(items):
    items.sort()
    return list(set(items))

Ожидаемый результат для входа [3, 1, 3, 2] — список [1, 2, 3], при этом исходный список остаётся [3, 1, 3, 2]. Следующий объект — пример формата и эталонного содержания, а не полученный ответ модели; корректность кода проверяется тестами.

{
  "cause": "items.sort() меняет исходный список",
  "patch": "def unique_sorted(items):\n    return sorted(set(items))",
  "tests": [
    {"input": [3, 1, 3, 2], "expected": [1, 2, 3], "source_after": [3, 1, 3, 2]},
    {"input": [], "expected": []},
    {"input": [2, 2], "expected": [2]}
  ],
  "risks": ["Контракт рассчитан на целые числа"]
}

Критерии проверки: cause указывает на мутацию исходного списка; patch содержит полный текст функции; tests задаёт входы и ожидаемые выходы, включая отсутствие мутации; risks фиксирует ограничение на целые числа. Объект выше — пример ожидаемого формата, не ответ модели.

Проверка результата и границ изменений

Сохраните следующий код как check_paths.py во временной Git-копии вместе с solution.py и тестами. До передачи задания зафиксируйте эти файлы коммитом. Проверка имеет два независимых режима: before требует чистую базу, after допускает изменение только отслеживаемого solution.py.

"""Read-only Git scope check for the isolated solution.py example."""
import argparse
import subprocess
from pathlib import Path


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('phase', choices=['before', 'after'])
    parser.add_argument('--repo', type=Path, default=Path.cwd())
    args = parser.parse_args()
    result = subprocess.run(
        ['git', 'status', '--porcelain=v1', '-z', '--untracked-files=all'],
        cwd=args.repo, check=True, capture_output=True,
    )
    records = [record.decode('utf-8', errors='strict')
               for record in result.stdout.split(b'\0') if record]
    if args.phase == 'before':
        if records:
            raise SystemExit('Expected a clean committed baseline before work')
        print('precheck=OK')
        return
    if not records:
        raise SystemExit('No tracked solution.py modification found')
    if any(record[:2] not in {' M', 'M ', 'MM'}
           or record[3:] != 'solution.py' for record in records):
        raise SystemExit('Unexpected changes outside tracked solution.py')
    print('postcheck=OK')


if __name__ == '__main__':
    main()

Это документарная методика, а не отчёт о запуске. В отдельной временной Git-копии заранее зафиксируйте базовое состояние, включая тесты и check_paths.py. Выполните python check_paths.py before, примените полный текст функции из поля patch только к solution.py, затем выполните python check_paths.py after и python test_solution.py. Успех требует чистой базы до работы, изменения только solution.py после неё и прохождения независимых тестов. Сам Git-checker проверен редакцией офлайн в семи изолированных Git-сценариях, включая чистую базу, изменение только solution.py, staged-изменение и посторонние файлы. Это проверка вспомогательного кода, не результат Sonnet или платного API-запроса.

from solution import unique_sorted

items = [3, 1, 3, 2]
before = items.copy()
assert unique_sorted(items) == [1, 2, 3]
assert items == before
assert unique_sorted([]) == []
assert unique_sorted([2, 2]) == [2]
print("OK")

Стоимость одного сценария через Zenith

В нормализованном архивном снимке каталога Zenith от 27.10.2026 для SKU claude-sonnet-5-5 указаны ставки за миллион токенов: вход — $0,67, выход — $3,35, создание кэша — $0,84, чтение кэша — $0,07. Это запись каталога Zenith на указанную дату, а не официальный тариф Anthropic, текущая цена, подтверждение inference или доказательство происхождения модели. Срок кэширования из этих полей не следует. Расчёт ниже предполагает отсутствие кэша.

При 4 000 входных и 800 выходных токенах без комиссий и внешних инструментов: 4 000 × 0,67 / 1 000 000 + 800 × 3,35 / 1 000 000 = $0,00536. При тех же объёмах 10 000 запросов дали бы расчётные $53,60. Это арифметика по заданным ставкам, а не сравнение качества моделей и не обещание фиксированного итогового списания. Методика расчёта разобрана в статье о стоимости API по токенам.

Подключение через документированный endpoint

Документация Zenith, прочитанная 28.10.2026, указывает Anthropic-совместимый base URL https://api.zenithmarket.dev без суффикса /v1 и маршрут Messages /v1/messages. Это документированные маршруты, а не подтверждение доступности SKU для каждого ключа. Отдельное наблюдение GET /v1/models от 28.10.2026 для одного ключа вернуло объект с массивом data; это не универсальная гарантия схемы для других ключей или будущих ответов. При несовпадении актуального ответа следует свериться с документацией Zenith, а не считать модель недоступной. Снимок наличия SKU и цен датирован 27.10.2026. Платного запроса редакция не выполняла. Код ниже использует Messages как документарное предположение примера; конкретную форму ответа и совместимость заголовков нужно подтвердить по актуальной документации Zenith перед запуском.

import getpass
import json
import urllib.request
import urllib.error

key = getpass.getpass("Zenith API key: ")
base = "https://api.zenithmarket.dev"
headers = {
    "User-Agent": "Comrad404SourceReview/1.0",
    "Authorization": "Bearer " + key,
    "Content-Type": "application/json",
}

try:
    request = urllib.request.Request(base + "/v1/models", headers=headers)
    with urllib.request.urlopen(request, timeout=30) as response:
        payload = json.load(response)

    # Это проверка наблюдавшейся формы ответа одного ключа, не универсальная схема.
    if not isinstance(payload, dict) or not isinstance(payload.get("data"), list):
        raise SystemExit("Форма каталога отличается; сверьтесь с актуальной документацией Zenith")
    rows = payload["data"]
    if any(not isinstance(row, dict) for row in rows):
        raise SystemExit("Неизвестная форма записи каталога; сверьтесь с документацией Zenith")
    model = next((row for row in rows if row.get("id") == "claude-sonnet-5-5"), None)
    endpoints = model.get("supported_endpoint_types") if model else None
    if not isinstance(endpoints, list) or "messages" not in endpoints:
        raise SystemExit("SKU или endpoint Messages не указаны в каталоге этого ключа")

    task = """Исправь unique_sorted(items): items.sort(); return list(set(items)).
Контракт: целые числа, отсортированные уникальные значения, без изменения items.
Ответ только JSON с полями cause, patch, tests, risks; patch — полный текст функции."""
    body = {
        "model": model["id"],
        "max_tokens": 800,
        "messages": [{"role": "user", "content": task}],
    }
    request = urllib.request.Request(
        base + "/v1/messages",
        data=json.dumps(body).encode("utf-8"),
        headers=headers,
        method="POST",
    )
    with urllib.request.urlopen(request, timeout=60) as response:
        result = json.load(response)

    # Ожидаемая форма Messages для примера; её совместимость с Zenith не подтверждена.
    if not isinstance(result, dict) or not isinstance(result.get("content"), list):
        raise SystemExit("Ответ не соответствует предполагаемой форме Messages")
    blocks = [item.get("text") for item in result["content"]
              if isinstance(item, dict) and item.get("type") == "text"
              and isinstance(item.get("text"), str)]
    if not blocks:
        raise SystemExit("В предполагаемой форме нет текстовых блоков")
    answer = json.loads("\n".join(blocks))
    required = {"cause", "patch", "tests", "risks"}
    if not isinstance(answer, dict) or not required.issubset(answer):
        raise SystemExit("Ответ не выполнил JSON-контракт")
    if not isinstance(answer["patch"], str):
        raise SystemExit("Поле patch должно содержать текст функции")
    print(answer)
    print("usage:", result.get("usage"))
    print("Структура JSON проверена; корректность patch требует ручной проверки и тестов.")
except urllib.error.HTTPError as error:
    print("HTTP", error.code)
    raise SystemExit(1)
except urllib.error.URLError:
    raise SystemExit("Ошибка сети; перед повтором проверьте состояние запроса")
except (ValueError, KeyError, TypeError):
    raise SystemExit("Некорректный JSON или форма ответа; автоматического повтора нет")

Итоговый выбор

Для ограниченной задачи с ясным контрактом Sonnet 5.5 — кандидат для проверки, а не автоматический выбор: сравнительного прогона на этой функции нет. Anthropic позиционирует Sonnet 5.5 для повседневных задач с чёткими границами, а Opus 5.5 — для сложной работы, требующей тщательного суждения. По официальному прайсу Anthropic базовые ставки Opus 5.5 выше. Отдельно, в датированном снимке Zenith от 27.10.2026 для SKU claude-opus-5-5 были указаны ставки $1,35/$6,70 за миллион входных/выходных токенов; это предложение Zenith на дату снимка, не официальный тариф или текущая цена.

Цена и настройка — отдельные основания сравнения

В официальном прайсе Anthropic базовые ставки Sonnet 5 и Sonnet 5.5 одинаковы: $2 за миллион входных и $10 за миллион выходных токенов; Opus 5.5 — $4/$20. Для 4 000 входных и 800 выходных токенов это соответственно $0,016 и $0,032 по базовым ставкам Anthropic. Это расчёт короткого сценария без кэша; при длинном контексте могут действовать отдельные условия тарификации, поэтому суммы нельзя переносить на такие запросы. Их также нельзя смешивать с историческими ценами Zenith или использовать как оценку стоимости запроса через Zenith. По документации контекста официального Claude API, Sonnet 5 получает автоматически добавляемые budget tags, а Sonnet 5.5 — нет. Это не меняет указанное для Sonnet 5.5 контекстное окно и не подтверждает поведение маршрута Zenith.

Дата и границы обновления

Материал документарный: платного прогона функции и запроса к Zenith редакция не проводила. Характеристики, позиционирование и бенчмарк приведены по материалам Anthropic; маршруты — по документации Zenith; SKU, поля каталога и цены — по датированным наблюдениям 27–28.10.2026 для одного ключа. API ID Anthropic claude-sonnet-5-5 и одноимённый SKU Zenith — разные сведения: совпадение строк не доказывает маршрутизацию к официальной модели или соответствие backend. GET-каталог подтверждает метаданные ключа, но не inference. Цены не являются текущим предложением, а пример ответа и форма Messages не выдаются за результат запуска.

Поле patch должно содержать полный текст функции, а не unified diff. Проверка JSON подтверждает только структуру ответа, не корректность кода: перенесите функцию в solution.py, выполните независимые тесты и проверьте границы изменений в два этапа, описанные выше.

Ручной эталон исправления, не ответ модели

def unique_sorted(items):
    return sorted(set(items))

source = [3, 1, 3, 2]
assert unique_sorted(source) == [1, 2, 3]
assert source == [3, 1, 3, 2]
assert unique_sorted([]) == []