Учебник

Как подключить Claude API к бизнесу без программиста за вечер

Ваши менеджеры тратят часы на рутину, а вы хотите автоматизировать обработку заявок, договоров или каталога? Разбираем Anthropic Claude API: какую модель выбрать (Sonnet, Haiku, Opus), как настроить первый запрос и system prompt. Без лишней теории - конкретные шаги, которые вы или ваш менеджер внедрите за 2-8 часов.

Макс Космов··9 мин чтения

У ваших менеджеров уходит по 3-4 часа в день на ручную обработку заявок, договоров или прайсов. Часть документов теряется, ответы задерживаются. А конкуренты уже автоматизируют это через API языковых моделей. Вот как подключить Claude API к своему бизнесу за вечер - без найма программиста и без курсов на полгода.

Anthropic API устроен иначе, чем OpenAI: max_tokens обязателен, system prompt (системная инструкция) - отдельный параметр, а не часть сообщений, и структура ответа отличается. Пять минут чтения сэкономят час отладки.

Установка SDK и первый запрос

SDK (Software Development Kit) - это библиотека кода, которая упрощает обращение к API (интерфейс для связи между программами). Вместо того чтобы вручную формировать запросы, вы вызываете готовые функции на Python.

Эта команда устанавливает официальную библиотеку Anthropic для Python.

pip install anthropic

Ключ создаётся на console.anthropic.com. Переменная окружения - ANTHROPIC_API_KEY. Переменная окружения - это способ передать секретный ключ программе, не вписывая его прямо в код. Если ключ окажется в коде и код попадёт на GitHub (публичный хостинг для программ), боты найдут его за минуты и начнут тратить ваши деньги.

Этот код подгружает библиотеку и создаёт клиента, который автоматически читает API-ключ из переменной окружения.

import anthropic

client = anthropic.Anthropic() # читает ANTHROPIC_API_KEY из env автоматически

Первый запрос:

Этот код отправляет сообщение пользователя модели claude-sonnet-4-6 и печатает ответ.

message = client.messages.create(
 model="claude-sonnet-4-6",
 max_tokens=1024,
 messages=[
 {"role": "user", "content": "Привет! Что такое API?"}
 ]
)
print(message.content[0].text)

Заметьте: max_tokens обязателен. Без него API вернёт ошибку. В OpenAI этот параметр опциональный; Anthropic считает, что разработчик должен явно указывать бюджет токенов. Токен - примерно 4 символа английского текста или 2-3 символа русского. Запрос на 1000 токенов - это примерно страница текста.

Зачем это бизнесу

Claude API используется там, где нужна языковая модель прямо в вашем продукте, а не через чат на сайте Anthropic. Типичные сценарии: автоматическая обработка входящих заявок от клиентов, анализ договоров и документов, генерация описаний для каталога товаров, ответы в корпоративном чат-боте.

Разберём на примере стройфирмы (это пример, не реальный кейс автора). У вас есть прайс на работы и типовой договор подряда. Каждый день приходит 50 заявок из мессенджеров - менеджеры вручную отвечают, сверяют цены, готовят договоры. Через API можно настроить бота, который сам отвечает на типовые вопросы, подбирает позиции из прайса и генерирует договор. Результат: обработка заявок - 10 минут вместо 4 часов.

Разница между Claude через сайт и Claude через API - это разница между тем, чтобы нанять человека и дать ему компьютер, или написать программу, которая делает ту же работу автоматически без участия человека. API позволяет обрабатывать 10 000 документов, пока все спят.

Иерархия моделей 2026

Прежде чем писать код, стоит понять, за что вы платите. У Anthropic три уровня моделей с разным балансом цены и качества.

Модель Input $/1M Output $/1M Контекст Применение
claude-haiku-4-5 $0.80 $4.00 200K Простые задачи, высокий объём
claude-sonnet-4-6 $3.00 $15.00 200K Рабочий баланс
claude-opus-4-7 $15.00 $75.00 200K Сложные рассуждения

Цифры в таблице - цена за миллион токенов. Для большинства задач запрос стоит доли цента. Но при объёме в сотни тысяч запросов выбор модели начинает влиять на итоговый счёт ощутимо.

claude-haiku-4-5 - самый быстрый, первый токен примерно за 0.2-0.3 секунды. Подходит для классификации, маршрутизации, простых вопросов-ответов с высокой частотой запросов. Если вы классифицируете отзывы покупателей по тематике - Haiku справится и обойдётся в разы дешевле.

claude-sonnet-4-6 - текущий рабочий конь. Кодирование, анализ документов, сложные инструкции. Соотношение цена/качество оптимально для большинства боевых задач. Боевая среда - это где программа работает с реальными пользователями, в отличие от тестовой среды.

claude-opus-4-7 - для задач, где нужна глубина рассуждений: сложный анализ, длинные цепочки логики, агентные сценарии с многошаговым планированием. Стоит в 5 раз дороже Sonnet, используйте, когда качество принципиально важнее стоимости. Например, анализ юридических рисков в сделке по слиянию - не место для экономии.

Все три модели имеют контекстное окно 200K токенов - это примерно 150 000 слов или небольшая книга. Контекстное окно - это сколько текста модель может удержать в памяти за один разговор. Подробнее о работе с длинным контекстом - длинный контекст в 1 млн токенов.

Практический ориентир: как выбирать модель

Начинайте с Sonnet. Это рабочая лошадь, на которой строится большинство продуктов. Если задача простая - классификация, короткие ответы, маршрутизация запросов, и стоимость важна - переходите на Haiku. Экономия будет в 4-5 раз. Если Sonnet стабильно ошибается на сложных задачах - многошаговый юридический анализ, составление технических спецификаций, сложные рассуждения - пробуйте Opus.

Практический тест: запустите 100 реальных запросов вашей задачи на Sonnet и Haiku, сравните качество ответов. Если разница незаметна - переходите на Haiku.

messages.create(): параметры

Этот фрагмент показывает полный набор параметров запроса: модель, бюджет токенов, системная инструкция, история диалога, температура и условие остановки.

message = client.messages.create(
 model="claude-sonnet-4-6",
 max_tokens=2048,
 system="Ты старший Python-разработчик. Отвечай кратко и по делу.",
 messages=[
 {"role": "user", "content": "Что лучше: list comprehension или map()?"}
 ],
 temperature=0.3,
 stop_sequences=["КОНЕЦ"]
)

system - строка или список блоков. Это отдельный параметр, не элемент messages. В OpenAI system prompt идёт внутри messages с role: system; здесь - снаружи. System prompt - это инструкция для модели о том, как себя вести, кем она является и в каком формате отвечать.

stop_sequences - список строк, при появлении которых генерация прекращается. Полезно, когда нужно ограничить ответ до определённой метки. Например, если вы просите модель генерировать JSON и хотите остановиться после закрывающей скобки.

temperature принимает значения 0-1 (не 0-2, как у OpenAI). 0 - максимальная детерминированность, то есть модель будет давать одинаковый ответ на одинаковый вопрос. 1 - максимальное разнообразие. Для аналитических задач и кода используйте 0.0-0.3. Для творческих текстов - 0.7-1.0.

top_p и top_k - альтернативные методы управления разнообразием ответов. Обычно достаточно temperature. Не смешивайте все три параметра одновременно.

Структура ответа

Этот код показывает, как достать из ответа модели текст, причину остановки, расход токенов и данные по кэшу.

message = client.messages.create(...)

# Текст ответа
text = message.content[0].text

# Причина остановки
stop = message.stop_reason # 'end_turn', 'max_tokens', 'stop_sequence', 'tool_use'

# Токены
input_tok = message.usage.input_tokens
output_tok = message.usage.output_tokens

# Кэш (если настроен)
cache_created = message.usage.cache_creation_input_tokens
cache_read = message.usage.cache_read_input_tokens

content - список блоков. При обычном запросе один блок с type='text'. При использовании инструментов появляются блоки с type='tool_use'. Инструменты - это когда модель вызывает вашу функцию вместо того, чтобы отвечать текстом. При потоковой передаче блоки собираются постепенно.

stop_reason - сигнал о том, как завершилась генерация. end_turn - норма, модель сама решила остановиться. max_tokens - ответ обрезан, нужно увеличить max_tokens. tool_use - модель хочет вызвать функцию, нужно обработать вызов и вернуть результат. stop_sequence - модель встретила вашу метку остановки.

Проверять stop_reason важно, если пишете автоматический конвейер обработки данных. Обрезанный ответ с stop_reason='max_tokens' может выглядеть как нормальный, но содержать только половину нужного текста.

System prompt: строка vs список блоков

Простой вариант - строка. Подходит для большинства задач:

Здесь system prompt задан одной строкой: короткая инструкция для модели.

system="Ты ассистент по юридическим вопросам России."

Для кэширования длинного system prompt - список блоков с cache_control. Кэширование - это сохранение части запроса на серверах Anthropic, чтобы не пересчитывать её снова при следующем запросе:

В этом варианте system prompt оформлен как блок с флагом кэша: при повторных запросах большой текст не пересчитывается, а читается из кэша со скидкой 90%.

system=[
 {
 "type": "text",
 "text": """Ты юридический ассистент. Вот полный текст ГК РФ часть 1...
 [50 000 токенов текста]
 """,
 "cache_control": {"type": "ephemeral"}
 }
]

С cache_control первый запрос записывает кэш (стоимость 2x от обычной), все последующие с тем же префиксом читают из кэша (стоимость 0.1x). Время жизни кэша по умолчанию 5 минут. Если вы запрашиваете Claude каждую минуту с одним и тем же большим system prompt, кэш сэкономит до 90% затрат на входные токены. Подробнее - в статье про кэширование промптов.

Минимальный размер кэшируемого блока: 1024 токена для Sonnet и Opus, 2048 для Haiku. Короткий system prompt кэшировать не имеет смысла - не дотянет до порога.

Мультитёрн-диалог

API не хранит состояние - история диалога хранится на стороне клиента, то есть в вашей программе. При каждом запросе вы передаёте всю историю разговора. Чередуйте роли user и assistant:

Этот код хранит историю диалога в списке и при каждом новом вопросе пользователя добавляет в неё ответ модели, чтобы Claude помнил контекст разговора.

conversation = []

def chat(user_message: str) -> str:
 conversation.append({"role": "user", "content": user_message})
 
 response = client.messages.create(
 model="claude-sonnet-4-6",
 max_tokens=1024,
 system="Ты помощник.",
 messages=conversation
 )
 
 assistant_text = response.content[0].text
 conversation.append({"role": "assistant", "content": assistant_text})
 return assistant_text

print(chat("Как зовут президента России?"))
print(chat("А премьер-министра?"))

Ограничение: messages должны чередоваться. Нельзя два user подряд без assistant между ними. API вернёт ошибку проверки.

При длинных диалогах следите за суммарным числом токенов - оно не должно превышать контекстное окно модели (200K). Обрезайте старые сообщения или используйте суммаризацию - периодически просите модель сжать историю в короткое резюме и замените ею старые сообщения.

Обработка ошибок

Любой внешний API может ответить ошибкой. Это нормально и предсказуемо. Важно написать код, который умеет подождать и повторить попытку, а не упасть с необработанным исключением.

Этот скрипт реализует устойчивый вызов API с автоматическими повторами: при превышении лимита запросов ждёт экспоненциально возрастающее время, при перегрузке сервера - 60 секунд, при критических ошибках - бросает исключение сразу.

import anthropic
import time

def safe_create(client, **kwargs):
 for attempt in range(4):
 try:
 return client.messages.create(**kwargs)
 except anthropic.RateLimitError:
 wait = 2 ** attempt
 time.sleep(wait)
 except anthropic.APIStatusError as e:
 if e.status_code == 529: # overloaded_error
 time.sleep(60)
 elif e.status_code >= 500:
 time.sleep(2 ** attempt)
 else:
 raise
 raise RuntimeError("Не удалось выполнить запрос")

Специфика Anthropic: код 529 (overloaded_error) означает временную перегрузку серверов. Это не лимит запросов - ждите 30-60 секунд и повторяйте. В часы пик 529 встречается чаще.

Лимит запросов - это ограничение на количество запросов в единицу времени. Актуальные лимиты Anthropic (первый уровень аккаунта): claude-sonnet-4-6 - 50 запросов в минуту и 40 000 токенов в минуту. claude-haiku-4-5 - 50 запросов в минуту и 50 000 токенов в минуту. Лимиты растут с уровнем аккаунта по мере наращивания расходов.

Типичные ошибки при первом запуске

Ошибка ValidationError без max_tokens - самая частая для новичков, пришедших с OpenAI. Просто добавьте max_tokens=1024 как минимальное значение.

Ошибка 401 AuthenticationError - неверный ключ или ключ не передан. Проверьте, что переменная ANTHROPIC_API_KEY установлена в окружении: echo $ANTHROPIC_API_KEY в терминале должна показать значение.

Ошибка Invalid messages: roles must alternate - вы передали два сообщения с role: user подряд. Между ними должно быть role: assistant.

Ответ обрезан (текст заканчивается на полуслове) - stop_reason равен max_tokens. Увеличьте max_tokens. Для анализа страницы текста обычно достаточно 2048, для длинных документов - 4096-8192.

Реальные числа: сколько стоит задача

Чтобы принять решение о модели, полезно считать не в абстрактных «токенах за миллион», а в деньгах за конкретную задачу.

Разберём на примере турагентства (это пример, не реальный кейс автора). Анализ одного запроса клиента на подбор тура: входной контекст - около 5000 токенов (история переписки, описание отелей), ответ - около 500 токенов (рекомендация).

На Haiku: 5000 x $0.80/1M + 500 x $4.00/1M = $0.004 + $0.002 = $0.006 за запрос. Тысяча запросов - $6.

На Sonnet: 5000 x $3.00/1M + 500 x $15.00/1M = $0.015 + $0.0075 = $0.022 за запрос. Тысяча запросов - $22.

На Opus: 5000 x $15.00/1M + 500 x $75.00/1M = $0.075 + $0.0375 = $0.11 за запрос. Тысяча запросов - $110.

Если качества Haiku устраивает - разница между $6 и $110 за тысячу запросов весомая. Если для ответственных решений нужен Opus - $110 всё равно дешевле одного часа менеджера.

Частые вопросы

Есть ли бесплатный тариф?

Да, при регистрации на console.anthropic.com есть небольшой стартовый кредит. Для постоянного использования нужна кредитная карта и пополнение баланса. Бесплатного тарифа без ограничений нет.

Как передать system prompt для активации кэширования?

Используйте формат списка блоков с cache_control: {"type": "ephemeral"}. Блок должен быть не меньше 1024 токенов для Sonnet и Opus. Подробно в статье про кэширование.

Что такое stop_reason='tool_use'?

Модель решила вызвать инструмент (function calling). Это нормальная часть цикла агента - нужно обработать вызов и вернуть результат через role: user с type: tool_result.

Что дальше

Следующий шаг - Function Calling и Tool Use: как заставить модель вызывать ваш код. Также полезно: основы промптинга для Claude и продвинутые техники для Claude. Все маршруты обучения - ai-uchebnik.ru.

AI Компас (t.me/kosmoslab_ai) - канал для предпринимателей в РФ и СНГ, которые применяют AI в своём бизнесе без программиста. Разбираем инструменты и схемы - без курсов и теории.