Как подключить Claude Fable 5.2 API, проверить ответ и рассчитать стоимость
Точный ID Fable 5.2, нативный запрос, сохранение истории инструментов и расчёт токенов: что заявлено в каталоге и что проверено на практике.
При первом подключении Fable 5.2 укажите точный ID модели, отправьте небольшой запрос и проверьте текст ответа и причину остановки. Только после этого добавляйте инструменты или переносите существующие разговоры. В каталоге Ofox используется anthropic/claude-fable-5.2, а в Claude API — claude-fable-5-2. Эти идентификаторы относятся к разным конфигурациям провайдера.
В руководстве отдельно рассматриваются опубликованные правила модели, текущий каталог Ofox и проверки со стороны приложения. Документацию, каталог и небольшой тест нативного API мы проверили 10 ноября 2026 года. Тело cURL-запроса ниже действительно использовалось в тесте; фрагменты с SDK показывают эквивалентный способ интеграции, но отдельно на сервисе не запускались. Ofox публикует этот блог и предоставляет описанный здесь шлюз.
Выбирайте endpoint вместе с точным ID
| Подключение | Идентификатор модели | Endpoint запроса |
|---|---|---|
| Claude API | claude-fable-5-2 | https://api.anthropic.com/v1/messages |
| Ofox, протокол Anthropic | anthropic/claude-fable-5.2 | https://api.ofox.ai/anthropic/v1/messages |
| Ofox, OpenAI-совместимый Chat Completions | anthropic/claude-fable-5.2 | https://api.ofox.ai/v1/chat/completions |
В официальном обзоре указаны контекст в 1 млн токенов и максимальный вывод 128 тыс. токенов. Это верхние пределы, а не разумный размер первого запроса. Начните с короткого ввода без чувствительных данных и ограниченного бюджета вывода.
Страница модели Ofox и публичный каталог указывают поддержку протоколов Anthropic и OpenAI; текущий тип провайдера для 5.2 — aws_bedrock. Наличие протокола в каталоге не доказывает, что любой маршрут передаёт все бета-возможности Anthropic. Проверьте конкретную функцию, прежде чем делать её обязательной частью приложения.
Распространённая ошибка с версией: в нашем датированном снимке каталога claude-fable-latest всё ещё является псевдонимом записи 5.1. Для проверки внедрения используйте точный ID 5.2 и сохраняйте модель из ответа и ID запроса. Выход новой версии не означает автоматического переназначения псевдонима.
Отправьте небольшой нативный запрос
Создайте ключ по инструкции Ofox по аутентификации и загрузите его в OFOX_API_KEY через привычный менеджер секретов. Запускайте пример на сервере или локальной машине разработчика, а не в публичном браузерном коде. В теле намеренно отсутствуют настройки сэмплирования, принудительный выбор инструмента и необязательные бета-параметры.
curl --fail-with-body --max-time 180 \
https://api.ofox.ai/anthropic/v1/messages \
-H "x-api-key: $OFOX_API_KEY" \
-H 'anthropic-version: 2023-06-01' \
-H 'content-type: application/json' \
--data '{
"model": "anthropic/claude-fable-5.2",
"max_tokens": 4096,
"output_config": {"effort": "low"},
"messages": [{
"role": "user",
"content": "A synthetic order contains 3 units at USD 12 each. Return the total and one calculation line. Do not use tools."
}]
}' > response.json
Ожидаемый результат — 36 USD. В реальном ответе были эта сумма и вычисление, HTTP 200, stop_reason: "end_turn", 46 входных и 32 выходных токена. Один синтетический запрос подтверждает только этот узкий сценарий, а не все рабочие процессы. Проверьте собственный response.json, прежде чем продолжать. Успешный HTTP-статус сам по себе не означает, что модель дала ответ, выполнила задачу или уложилась в лимит вывода.
Небольшой скрипт ниже не предполагает, что первый блок ответа обязательно содержит текст:
import json
from pathlib import Path
response = json.loads(Path("response.json").read_text())
if "error" in response:
raise RuntimeError(response["error"])
text = "\n".join(
block.get("text", "") for block in response.get("content", [])
if block.get("type") == "text"
)
print("model:", response.get("model"))
print("stop_reason:", response.get("stop_reason"))
print("usage:", response.get("usage"))
print(text)
if response.get("stop_reason") != "end_turn" or not text.strip():
raise SystemExit("Not a completed text answer; inspect before continuing.")
Для этого запроса без инструментов требуйте завершённый текстовый ответ и вручную проверьте расчёт. В рабочем приложении замените ручную проверку независимым валидатором, соответствующим результату. Поиск подстроки 36 недостаточен: она есть и в фразе «сумма не равна 36».
Документация нативного Messages описывает endpoint и формат аутентификации. Если приложение использует Chat Completions, во всём цикле соблюдайте его формат messages, ответов и результатов инструментов. Не вставляйте нативные блоки tool_result в разговор формата OpenAI в надежде, что адаптер восстановит исходное состояние.
Оставьте достаточно места для рассуждений и ответа
Fable 5.2 использует постоянно включённое адаптивное мышление. output_config.effort регулирует усилие, но не меняет цену отдельного токена. В небольшом тесте применяется low, чтобы ограничить простую задачу. Это не рекомендация для сложного исправления репозитория или многоэтапного анализа.
Для содержательной работы начните с документированного значения high и сравните его с меньшим усилием на своих приёмочных примерах. Рекомендации Anthropic по effort предлагают повышать настройку там, где дополнительная работа полезна. Измеряйте общее число токенов и завершение задачи, а не только убедительность текста.
max_tokens включает рассуждения и вывод ответа. При слишком малом лимите модель может вернуть блок рассуждений, затем stop_reason: "max_tokens", но не дать видимого ответа. Это не ошибка запроса 400. Проверьте причину остановки, затем осознанно увеличьте лимит или уменьшите effort. Многократные повторы с тем же лимитом не следует выдавать за сравнение цен моделей.
Не теряйте итоговое сообщение при стриминге
При работе с официальным Python SDK сохраняйте собранное сообщение после завершения потока. Пример ниже рассчитан на современную версию SDK с документированным полем output_config. Запишите и закрепите версию SDK, которую проверите в своём приложении.
import os
import anthropic
client = anthropic.Anthropic(
api_key=os.environ["OFOX_API_KEY"],
base_url="https://api.ofox.ai/anthropic",
max_retries=0,
timeout=180.0,
)
with client.messages.stream(
model="anthropic/claude-fable-5.2",
max_tokens=4096,
output_config={"effort": "low"},
messages=[{"role": "user", "content": "Calculate 3 times 12."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
final_message = stream.get_final_message()
print(final_message.stop_reason, final_message.usage)
Текстовый поток нужен для отображения. Он не заменяет полное сообщение, которое понадобится на следующем шаге с инструментом. Если соединение оборвалось до завершения, отметьте попытку как незавершённую; не сохраняйте частичный видимый текст как корректный ответ ассистента. В разборе ошибок подписи thinking перечислены поля, которые теряет сборщик только текстовых фрагментов.
Начните с одного инструмента только для чтения
Подходящий первый инструмент возвращает синтетическую запись остатков. Определите lookup_stock со схемой входа, требующей строковый SKU, задайте tool_choice: auto и попросите проверить DEMO-001. Перед выполнением сверяйте имя и аргументы с разрешённым списком.
Готовый исполняемый вариант — скрипт чтения остатков и его модуль контрольной точки. В нём read_stock возвращает все три строки примера; включены начальный запрос, проверка инструмента, сообщение с реальным результатом, продолжение и проверка итоговой передачи задачи. В пошаговом руководстве локальные проверки отделены от явно запускаемых платных запросов.
В нативном протоколе добавляйте всё содержимое ответа ассистента точно в полученном виде. Затем добавляйте пользовательское сообщение с реальным результатом и соответствующим ID инструмента:
# response is the completed SDK response; tool is one validated tool_use block.
messages.append({
"role": "assistant",
"content": [b.model_dump(exclude_none=True) for b in response.content],
})
messages.append({"role": "user", "content": [{
"type": "tool_result",
"tool_use_id": tool.id,
"content": '{"sku":"DEMO-001","available":7,"source":"synthetic fixture"}'
}]})
Этот фрагмент показывает формат продолжения, а не полный цикл нескольких инструментов. Если модель запросила несколько вызовов, обработайте каждый ID и передайте каждый фактический результат. При сбое инструмента нужен результат с ошибкой, а не выдуманная успешная запись. Руководство по отсутствующему tool_result объясняет ошибки сопоставления; разбор обновления до 5.2 — ограничения версии.
auto не означает «инструмент обязательно выполнится». Если для задачи требуется поиск, а модель вернула только текст, приложение должно заметить это и не считать работу завершённой. Начните с примера только для чтения: повторы при отладке не должны дважды оформлять заказ или отправлять сообщение.
Рассчитывайте стоимость по отдельным категориям токенов
Стандартные тарифы в USD за миллион токенов, проверенные 10 ноября:
| Категория | Опубликованный тариф Claude API | Публичный тариф каталога Ofox |
|---|---|---|
| Некэшированный ввод | $8 | $8 |
| Вывод | $40 | $40 |
| Запись в кэш на 5 минут | $10 | $10 |
| Запись в кэш на 1 час | $16 | $16 |
| Чтение кэша | $0,20 | $0,20 |
Источники: тарифы Anthropic, страница модели Ofox и датированный снимок каталога. В репозитории Ofox поля каталога определены в USD за токен; для таблицы они умножены на миллион. Код репозитория читает динамические данные моделей, поэтому сам Git-источник не является текущим прайс-листом. В снимке 5.2 нет отдельного объекта provider_price: это отсутствие данных о цене поставщика, а не нулевая себестоимость или подтверждённая скидка.
Для расчётного запроса с 20 000 некэшированных входных и 4 000 оплачиваемых выходных токенов:
20,000 × $8 / 1,000,000 + 4,000 × $40 / 1,000,000 = $0.32
Для расчётного запроса с 19 000 токенов чтения кэша, 1 000 некэшированных входных токенов и тем же выводом:
19,000 × $0.20 / 1,000,000 + 1,000 × $8 / 1,000,000
+ 4,000 × $40 / 1,000,000 = $0.1718
Во втором примере не учтён предшествующий запрос записи в кэш. Добавьте его при оценке всей сессии. Категории ввода не должны пересекаться: не прибавляйте токены записи в кэш к некэшированному вводу повторно. Учитывайте оплачиваемые токены рассуждений, повторы и отдельно тарифицируемые инструменты. Это расчёты, а не фактические счета. Для пакетных запросов и быстрого режима отдельно проверяют условия и маршрут; здесь эти тарифы не применяются.

Англоязычный скриншот локально отображённого журнала теста, заполненного реальными ответами API. Это не скриншот интерфейса продукта Ofox.
Определите, готова ли интеграция к работе
Дополнительные тесты нативного протокола завершили потоковый текстовый ответ и цикл инструмента только для чтения. Два теста с намеренно несовместимыми параметрами тоже вернули 200: один передавал thinking: {"type":"disabled"}, другой принудительно выбирал lookup_stock, хотя промпт требовал арифметический ответ без инструментов. Во втором случае пришёл текст без вызова инструмента. Ни один ответ не доказывает, что эти настройки сработали. Результаты для конкретного маршрута в статье об ошибках 400 показывают, почему необходимы приёмочные проверки приложения.
До переноса трафика проверьте четыре результата: завершённый текстовый запрос, полный поток, цикл инструмента только для чтения с корректными ID и восстановление существующей многошаговой сессии без изменения истории. Для каждого случая сохраняйте ID запроса, точную модель, effort, usage, причину остановки, версию SDK и результат приёмки.
При 400 разбирайте тело ошибки, а не повторяйте неизменный запрос. При перегрузке ограничивайте повторы и используйте руководство по Claude 529 (на английском). При смене модели сохраняйте факты приложения отдельно от непрозрачных рассуждений, как показано в руководстве по контрольной точке. Сравнение 5.2, 5.1 и Opus 5.5 поможет оценить стоимость и миграцию.
Документация: аутентификация API, нативный Messages, маршрутизация провайдеров. Требования к хранению данных уточняйте у сервиса, который действительно их обрабатывает: Anthropic описывает специальные требования для 5.2, а отметка о поддержке протокола в Ofox не является гарантией конфиденциальности.


