О ценах: суммы ниже используют исторические листовые тарифы Anthropic для наглядности пропорций. На Claudexia все Opus и GPT-5 стоят $0.50 / $0.50 за 1M, все Sonnet и gpt-5.6-luna: $0.33 / $0.33 за 1M. Реальные счета в 5–30 раз ниже.
У нас нет тира Haiku. Самая дешёвая модель это gpt-5.6-luna, но учтите: это другое семейство. Формат запросов совместимый, а поведение и промпты могут отличаться, так что проверьте на своей задаче.
Почему расходы на Claude API растут лавинообразно
Каждый доллар, потраченный на Claude API, складывается из двух составляющих: входные токены и выходные токены. Большинство команд фокусируются на длине промпта, игнорируя настоящий драйвер расходов: выходные токены.
Вот актуальные цены на апрель 2026 для трёх основных моделей:
| Модель | Вход (за 1M токенов) | Выход (за 1M токенов) | Соотношение |
|---|---|---|---|
| Claude Opus 4.8 | $0.50 | $0.50 | 5× |
| Claude Sonnet 4.6 | $0.33 | $0.33 | 5× |
| gpt-5.6-luna | $0.33 | $0.33 | 5× |
Множитель 5× на выходные токены одинаков для всей линейки. Это значит, что ответ в 500 токенов стоит столько же, сколько ввод в 2 500 токенов. Команды, которые генерируют длинные тексты, цепочки рассуждений или объёмные JSON без контроля длины вывода, видят взрывной рост счетов.
Типичный стартап, отправляющий 10 миллионов запросов к Sonnet в месяц со средним объёмом 1 000 входных и 500 выходных токенов, платит:
- Вход: 10M × 1 000 / 1M × $3.00 = $30 000
- Выход: 10M × 500 / 1M × $15.00 = $75 000
- Итого: $105 000/мес.
Выходные токены: 71% счёта. Каждая стратегия ниже либо уменьшает количество токенов, либо переносит их на более дешёвый тариф, либо и то и другое.
Стратегия 1: Кэширование промптов, скидка 90% на повторяющийся контекст
Если ваш системный промпт, few-shot примеры или RAG-контекст одинаковы для многих запросов, вы платите полную цену за одни и те же токены снова и снова. Кэширование промптов от Anthropic сохраняет их на сервере и берёт всего 10% от нормальной цены на входные токены при повторных обращениях.
Как это работает
Вы отмечаете один или несколько блоков в сообщениях атрибутом cache_control: {'type': 'ephemeral'}. При первом запросе взимается небольшая надбавка за запись (25% сверху). При каждом последующем запросе в рамках TTL кэша (сейчас 5 минут, продлевается при каждом попадании) эти токены читаются со скидкой 90%.
Пример на Python
import anthropic
client = anthropic.Anthropic()
# Системный промпт на 4000 токенов, кэшируется после первого вызова
system_blocks = [
{
"type": "text",
"text": LARGE_SYSTEM_PROMPT, # ваш промпт на 4к токенов
"cache_control": {"type": "ephemeral"},
}
]
def ask(question: str) -> str:
response = client.messages.create(
model="claude-sonnet-4.6",
max_tokens=1024,
system=system_blocks,
messages=[{"role": "user", "content": question}],
)
usage = response.usage
print(f"Токены из кэша: {usage.cache_read_input_tokens}")
print(f"Токены записи в кэш: {usage.cache_creation_input_tokens}")
return response.content[0].text
Пример на TypeScript
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const systemBlocks = [
{
type: "text" as const,
text: LARGE_SYSTEM_PROMPT,
cache_control: { type: "ephemeral" as const },
},
];
async function ask(question: string): Promise<string> {
const response = await client.messages.create({
model: "claude-sonnet-4.6",
max_tokens: 1024,
system: systemBlocks,
messages: [{ role: "user", content: question }],
});
console.log("Из кэша:", response.usage.cache_read_input_tokens);
return response.content[0].type === "text" ? response.content[0].text : "";
}
Расчёт экономии
Если системный промпт занимает 4 000 токенов и вы делаете 1 000 запросов в час на Sonnet:
- Без кэширования: 4 000 × 1 000 × $3 / 1M = $12.00/час
- С кэшированием: первый запрос по $3.75/M (надбавка за запись), остальные 999 по $0.30/M = ~$1.21/час
- Экономия: ~90%
Кэширование: оптимизация с самой высокой отдачей. Если вы внедрите только одну вещь из этой статьи, пусть это будет кэширование.
Стратегия 2: Маршрутизация моделей, нужная модель для нужной задачи
Не каждый запрос требует Opus. Не каждый запрос переживёт gpt-5.6-luna. Идея проста: классифицируйте входящую задачу и направьте её на самую дешёвую модель, которая справится.
Практическое распределение:
| Тип задачи | Модель | Почему |
|---|---|---|
| Классификация, тегирование, извлечение | gpt-5.6-luna | Быстрая, дешёвая, точность >95% на структурированных задачах |
| Суммаризация, генерация, ответы RAG | Sonnet | Лучшее соотношение цены и качества для открытой генерации |
| Сложные рассуждения, генерация кода, агентные циклы | Opus | Премиум оправдан только когда качество напрямую влияет на выручку |
Пример роутера на Python
import anthropic
client = anthropic.Anthropic()
MODEL_MAP = {
"classify": "gpt-5.6-luna",
"generate": "claude-sonnet-4.6",
"reason": "claude-opus-4.8",
}
def route_and_call(task_type: str, prompt: str, max_tokens: int = 1024) -> str:
model = MODEL_MAP.get(task_type, "claude-sonnet-4.6")
response = client.messages.create(
model=model,
max_tokens=max_tokens,
messages=[{"role": "user", "content": prompt}],
)
return response.content[0].text
# Классификация: gpt-5.6-luna по $0.80/M на входе
label = route_and_call("classify", "Классифицируй тикет: 'Мой заказ опаздывает'")
# Генерация: Sonnet по $3/M на входе
summary = route_and_call("generate", f"Резюмируй документ: {doc}")
# Сложные рассуждения: Opus по $15/M на входе
analysis = route_and_call("reason", f"Проанализируй риски контракта: {contract}")
Расчёт экономии
Допустим, 60% трафика это классификация, 30% это генерация, 10% это рассуждения. По сравнению с использованием только Sonnet:
| Сценарий | Месячная стоимость (10M запросов) |
|---|---|
| Всё на Sonnet | $105 000 |
| С маршрутизацией (60% gpt-5.6-luna, 30% Sonnet, 10% Opus) | $55 200 |
| Экономия | ~47% |
В сочетании с кэшированием экономия нарастает мультипликативно.
Стратегия 3: Batch API, скидка 50% для нереалтаймовых нагрузок
Любая нагрузка, не требующая синхронного ответа (ночная классификация, оценочные прогоны, разметка данных, модерация контента), должна использовать Batch API. Вы отправляете JSONL-файл с запросами, Anthropic обрабатывает их в течение 24 часов, и вы платите ровно половину обычной цены за входные и выходные токены.
Пример на Python
import anthropic
import json
client = anthropic.Anthropic()
# Формируем запросы
requests = []
for i, item in enumerate(dataset):
requests.append({
"custom_id": f"item-{i}",
"params": {
"model": "claude-sonnet-4.6",
"max_tokens": 256,
"messages": [
{"role": "user", "content": f"Классифицируй: {item['text']}"}
],
},
})
# Отправляем батч
batch = client.batches.create(requests=requests)
print(f"Batch ID: {batch.id}, статус: {batch.processing_status}")
# Ждём завершения
import time
while True:
status = client.batches.retrieve(batch.id)
if status.processing_status == "ended":
break
time.sleep(60)
# Забираем результаты
for result in client.batches.results(batch.id):
print(result.custom_id, result.result.message.content[0].text)
Когда использовать Batch API
- Оценочные прогоны на сотнях или тысячах тест-кейсов
- Ночная классификация или разметка больших датасетов
- Ежемесячная модерация контента
- Генерация синтетических данных для обучения
Когда НЕ использовать
- Всё, что видит пользователь и требует задержку
<5с - Стриминговые чат-интерфейсы
- Агентные циклы с tool use, где следующий шаг зависит от предыдущего ответа
Batch API сочетается с кэшированием. Вы можете получить скидку 90% на кэшированные токены плюс скидку 50% от батча на остальные. Это абсолютно самый дешёвый способ использовать Claude в масштабе.
Стратегия 4: Бюджетирование токенов, перестаньте платить за лишнее
Простейшая оптимизация расходов это генерировать меньше токенов. Три техники:
1. Устанавливайте max_tokens агрессивно
Если вы знаете, что ответ это одно слово или короткий JSON, не оставляйте max_tokens на 4096. Установите минимально разумное значение.
# Плохо: платим за потенциальные 4096 выходных токенов
response = client.messages.create(
model="claude-sonnet-4.6",
max_tokens=4096,
messages=[{"role": "user", "content": "Это спам? Ответь да или нет."}],
)
# Хорошо: платим максимум за 16 выходных токенов
response = client.messages.create(
model="claude-sonnet-4.6",
max_tokens=16,
messages=[{"role": "user", "content": "Это спам? Ответь да или нет."}],
)
2. Используйте стоп-последовательности
Укажите Claude остановиться при генерации определённого разделителя:
response = client.messages.create(
model="claude-sonnet-4.6",
max_tokens=512,
stop_sequences=["</answer>"],
messages=[{"role": "user", "content": "Ответь в тегах <answer>."}],
)
3. Стриминг с ранним завершением
При стриминге вы читаете токены по мере поступления и можете отменить запрос, как только получили нужное:
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
async function classifyWithEarlyStop(text: string): Promise<string> {
let result = "";
const stream = client.messages.stream({
model: "claude-sonnet-4.6",
max_tokens: 64,
messages: [{ role: "user", content: `Классифицируй: ${text}` }],
});
for await (const event of stream) {
if (
event.type === "content_block_delta" &&
event.delta.type === "text_delta"
) {
result += event.delta.text;
if (result.includes("\n")) {
await stream.abort(); // прекращаем платить
break;
}
}
}
return result.trim();
}
Эти три техники вместе могут сократить расходы на выходные токены на 30-60% для задач классификации и извлечения.
Стратегия 5: Префилл ответа, перенос токенов с выхода на вход
API Claude позволяет добавить сообщение assistant в конец массива сообщений, чтобы «предзаполнить» начало ответа. Модель продолжает с того места, где вы остановились. Предзаполненные токены считаются входными (дешёвыми), а не выходными (дорогими).
Пример: извлечение JSON
response = client.messages.create(
model="claude-sonnet-4.6",
max_tokens=256,
messages=[
{"role": "user", "content": f"Извлеки имя, email, компанию из: {text}"},
{"role": "assistant", "content": '{"name": "'},
],
)
# Claude продолжит: Иван Петров", "email": "ivan@example.com", "company": "Acme"}
# Префикс '{"name": "' тарифицирован по ставке входных токенов, а не выходных
Почему это важно
Для JSON-ответа в 200 токенов, если вы предзаполните 50 токенов структуры (ключи, скобки, форматирование), вы перенесёте 25% стоимости выхода на входной тариф: снижение в 4 раза на эти токены.
Префилл также повышает надёжность: Claude гораздо реже оборачивает ответ в маркдаун-блоки или добавляет вступительный текст, когда уже находится внутри JSON.
Стратегия 6: Структурированные выходы через tool use
Вместо того чтобы просить Claude генерировать JSON как свободный текст и потом парсить его (что ненадёжно и генерирует лишние токены на пояснения), используйте tool use (вызов функций) для принудительного структурированного вывода.
Пример на Python
import anthropic
client = anthropic.Anthropic()
tools = [
{
"name": "classify_ticket",
"description": "Классифицировать тикет поддержки",
"input_schema": {
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": ["billing", "technical", "general", "urgent"],
},
"priority": {
"type": "integer",
"minimum": 1,
"maximum": 5,
},
"summary": {
"type": "string",
"maxLength": 100,
},
},
"required": ["category", "priority", "summary"],
},
}
]
response = client.messages.create(
model="gpt-5.6-luna",
max_tokens=256,
tools=tools,
tool_choice={"type": "tool", "name": "classify_ticket"},
messages=[
{"role": "user", "content": f"Классифицируй тикет: {ticket_text}"}
],
)
tool_block = next(b for b in response.content if b.type == "tool_use")
result = tool_block.input # {'category': 'billing', 'priority': 3, 'summary': '...'}
Пример на TypeScript
const response = await client.messages.create({
model: "gpt-5.6-luna",
max_tokens: 256,
tools: [
{
name: "classify_ticket",
description: "Классифицировать тикет поддержки",
input_schema: {
type: "object",
properties: {
category: {
type: "string",
enum: ["billing", "technical", "general", "urgent"],
},
priority: { type: "integer", minimum: 1, maximum: 5 },
summary: { type: "string", maxLength: 100 },
},
required: ["category", "priority", "summary"],
},
},
],
tool_choice: { type: "tool", name: "classify_ticket" },
messages: [{ role: "user", content: `Классифицируй тикет: ${ticketText}` }],
});
const toolBlock = response.content.find((b) => b.type === "tool_use");
const result = toolBlock?.input;
Преимущества перед свободным JSON:
- Гарантированно валидный JSON: без ошибок парсинга, без повторных запросов
- Меньше выходных токенов: Claude не добавляет пояснения, оговорки или маркдаун-обёртки
- Валидация схемы: перечисления, обязательные поля и типы проверяются на стороне API
Команды, которые переходят с «генерации JSON в тексте» на tool use, обычно видят снижение выходных токенов на 20-40% в задачах извлечения.
Стратегия 7: Используйте экономичный шлюз вроде Claudexia
Все шесть стратегий выше уменьшают количество потребляемых токенов. Седьмая стратегия снижает цену, которую вы платите за токен, или, как минимум, устраняет ненужные наценки.
При прямом доступе к Claude API через Anthropic вам нужно:
- Нероссийская кредитная карта или платёжный адрес
- Разбираться с долларовыми счетами и комиссиями за конвертацию валюты
- Соответствовать требованиям минимального объёма или предоплаты на некоторых тарифах
Claudexia: OpenAI-совместимый шлюз, который проксирует запросы к официальному API Anthropic по тем же ценам без наценки. Он добавляет:
- Оплата в рублях: СБП, карты, криптовалюта
- Без минимального порога: платите по факту, даже для маленьких проектов
- Совместимость с OpenAI SDK: смените base URL и используйте существующий код
- Все модели доступны: Sonnet, Opus, gpt-5.6-luna, включая последние релизы
from openai import OpenAI
# Направляем существующий OpenAI SDK на Claudexia
client = OpenAI(
base_url="https://claudexia.tech/v1",
api_key="your-claudexia-key",
)
response = client.chat.completions.create(
model="claude-sonnet-4.6",
max_tokens=1024,
messages=[{"role": "user", "content": "Привет от Claudexia!"}],
)
print(response.choices[0].message.content)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://claudexia.tech/v1",
apiKey: "your-claudexia-key",
});
const response = await client.chat.completions.create({
model: "claude-sonnet-4.6",
max_tokens: 1024,
messages: [{ role: "user", content: "Привет от Claudexia!" }],
});
console.log(response.choices[0].message.content);
Дело не в том, чтобы получить «более дешёвый» API. Claudexia соответствует ценам Anthropic. Дело в устранении трения: накладные расходы на конвертацию валюты, сложность биллинга и географические ограничения, которые добавляют скрытую стоимость к вашему рабочему процессу.
Реальный расчёт стоимости: до и после оптимизации
Возьмём стартап из введения (10 миллионов запросов к Sonnet в месяц, в среднем 1 000 входных и 500 выходных токенов) и применим все стратегии.
| Оптимизация | Стоимость входа | Стоимость выхода | Итого | Экономия vs базовый |
|---|---|---|---|---|
| Базовый (без оптимизации) | $30 000 | $75 000 | $105 000 | - |
| + Кэширование промптов (70% входа в кэше) | $11 700 | $75 000 | $86 700 | 17% |
| + Маршрутизация моделей (60% на gpt-5.6-luna) | $5 148 | $33 000 | $38 148 | 64% |
| + Бюджетирование токенов (среднее → 300 токенов) | $5 148 | $19 800 | $24 948 | 76% |
| + Batch API на 30% трафика | $4 378 | $16 830 | $21 208 | 80% |
| + Префилл и tool use (−20% выход) | $4 378 | $13 464 | $17 842 | 83% |
С $105 000 до менее $18 000. Это снижение на 83%, и мы даже не трогали промпт-инжиниринг для сокращения входных данных.
Точные цифры зависят от вашего микса нагрузок, но паттерн стабилен: стекируйте несколько стратегий, и экономия нарастает мультипликативно.
FAQ
Как именно работает ценообразование кэширования промптов?
Запись в кэш стоит на 25% дороже обычных входных токенов (т.е. $3.75/M на Sonnet вместо $3.00/M). Чтение из кэша стоит на 90% меньше ($0.30/M на Sonnet). Кэш живёт 5 минут, и TTL сбрасывается при каждом обращении. Если ваш трафик стабилен (хотя бы один запрос каждые 5 минут с одним и тем же кэшированным префиксом), вы экономите с первого же цикла.
Можно ли сочетать кэширование промптов с Batch API?
Да. Скидка на кэширование применяется к кэшированной части входных токенов, а 50% скидка батча применяется ко всему остальному. Они стекируются мультипликативно. Кэшированный токен в батч-запросе стоит примерно на 95% дешевле обычного входного токена.
Какой минимальный размер кэша?
Anthropic требует минимум 1 024 токена в кэш-блоке (2 048 для Opus). Если ваш системный промпт короче, кэширование не активируется. Дополните его few-shot примерами или подробными инструкциями, чтобы пересечь порог.
Как решить, на какую модель маршрутизировать запрос?
Начните с простой эвристики: если у задачи фиксированная выходная схема (классификация, извлечение, да/нет), используйте gpt-5.6-luna. Если нужна открытая генерация с умеренным качеством, используйте Sonnet. Opus используйте только для задач, где ошибки имеют высокую цену: юридический анализ, сложная генерация кода, многошаговые агентные рассуждения. Измерьте точность на вашем eval-наборе и скорректируйте пороги.
Работает ли префилл ответа с tool use?
Нет. Префилл (добавление частичного сообщения assistant) и tool_choice: отдельные механизмы. Используйте префилл для свободного текстового JSON и tool use для структурированного вывода с валидацией схемы. Не комбинируйте их в одном запросе.
Что будет, если батч-задание упадёт на середине?
Batch API обрабатывает каждый запрос независимо. Если 5 из 10 000 запросов упадут (например, из-за политики контента), остальные 9 995 выполнятся нормально. Упавшие запросы содержат детали ошибки в ответном JSONL. Вы платите только за успешные запросы.
Есть ли разница в rate limit между синхронным API и батчем?
Батч-запросы не учитываются в ваших реалтаймовых rate limit. Они выполняются в отдельной очереди с более высокой совокупной пропускной способностью. Это делает батч идеальным для пиковых нагрузок, которые иначе потребовали бы увеличения лимитов.
Чем Claudexia отличается от прямого использования Anthropic?
Claudexia проксирует запросы к официальному API Anthropic, поэтому вы получаете идентичное поведение модели, задержку и функции, включая кэширование, батчи и tool use. Разница операционная: Claudexia принимает локальные способы оплаты (СБП, российские карты, криптовалюта), не требует минимального порога и предоставляет OpenAI-совместимый эндпоинт, чтобы вы могли переключиться одной строкой с base URL.
Каждая стратегия в этом руководстве готова к продакшену и может быть внедрена за полдня. Начните с кэширования промптов (максимальная отдача, минимальные усилия), добавьте маршрутизацию моделей и подключите батчи и бюджетирование по мере роста использования.
Готовы начать экономить? Получите API-ключ Claudexia и применяйте эти оптимизации уже сегодня, с оплатой в рублях и без наценки на цены Anthropic.