О ценах: суммы ниже используют исторические листовые тарифы Anthropic для наглядности пропорций. На Claudexia все Opus и GPT-5 — $0.50 / $0.50 за 1M, все Sonnet и Haiku — $0.33 / $0.33 за 1M. Реальные счета в 5–30 раз ниже.
Почему расходы на Claude API растут лавинообразно
Каждый доллар, потраченный на Claude API, складывается из двух составляющих: входные токены и выходные токены. Большинство команд фокусируются на длине промпта, игнорируя настоящий драйвер расходов — выходные токены.
Вот актуальные цены на апрель 2026 для трёх основных моделей:
| Модель | Вход (за 1M токенов) | Выход (за 1M токенов) | Соотношение |
|---|---|---|---|
| Claude Opus 4.5/4.7 | $0.50 | $0.50 | 5× |
| Claude Sonnet 4.5/4.6 | $0.33 | $0.33 | 5× |
| Claude Haiku 4.5 | $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.5",
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.5",
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. Не каждый запрос переживёт Haiku. Идея проста: классифицируйте входящую задачу и направьте её на самую дешёвую модель, которая справится.
Практическое распределение:
| Тип задачи | Модель | Почему |
|---|---|---|
| Классификация, тегирование, извлечение | Haiku | Быстрая, дешёвая, точность >95% на структурированных задачах |
| Суммаризация, генерация, ответы RAG | Sonnet | Лучшее соотношение цены и качества для открытой генерации |
| Сложные рассуждения, генерация кода, агентные циклы | Opus | Премиум оправдан только когда качество напрямую влияет на выручку |
Пример роутера на Python
import anthropic
client = anthropic.Anthropic()
MODEL_MAP = {
"classify": "claude-haiku-4.5",
"generate": "claude-sonnet-4.5",
"reason": "claude-opus-4.5",
}
def route_and_call(task_type: str, prompt: str, max_tokens: int = 1024) -> str:
model = MODEL_MAP.get(task_type, "claude-sonnet-4.5")
response = client.messages.create(
model=model,
max_tokens=max_tokens,
messages=[{"role": "user", "content": prompt}],
)
return response.content[0].text
# Классификация — Haiku по $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% Haiku, 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.5",
"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.5",
max_tokens=4096,
messages=[{"role": "user", "content": "Это спам? Ответь да или нет."}],
)
# Хорошо: платим максимум за 16 выходных токенов
response = client.messages.create(
model="claude-sonnet-4.5",
max_tokens=16,
messages=[{"role": "user", "content": "Это спам? Ответь да или нет."}],
)
2. Используйте стоп-последовательности
Укажите Claude остановиться при генерации определённого разделителя:
response = client.messages.create(
model="claude-sonnet-4.5",
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.5",
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.5",
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="claude-haiku-4.5",
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: "claude-haiku-4.5",
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 и используйте существующий код
- Все модели доступны — Haiku, Sonnet, Opus, включая последние релизы
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.5",
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.5",
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% на Haiku) | $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 примерами или подробными инструкциями, чтобы пересечь порог.
Как решить, на какую модель маршрутизировать запрос?
Начните с простой эвристики: если у задачи фиксированная выходная схема (классификация, извлечение, да/нет) — используйте Haiku. Если нужна открытая генерация с умеренным качеством — 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.