Claude API: AI от Anthropic
Anthropic Claude — сильный конкурент ChatGPT с контекстным окном до 200K токенов. Claude 3.5 Sonnet часто превосходит GPT-4o в задачах анализа кода и следования инструкциям.
Получение ключа
Зарегистрируйтесь на console.anthropic.com. Первые $5 кредитов предоставляются бесплатно.
Первый запрос (cURL)
curl https://api.anthropic.com/v1/messages -H "x-api-key: $ANTHROPIC_API_KEY" -H "anthropic-version: 2023-06-01" -H "content-type: application/json" -d '{
"model": "claude-3-5-haiku-20241022",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Как настроить Nginx на Ubuntu?"}]
}'Python SDK
pip install anthropicimport anthropic, os
client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
message = client.messages.create(
model="claude-3-5-haiku-20241022",
max_tokens=1024,
system="Ты технический эксперт по Linux и веб-хостингу.",
messages=[{"role": "user", "content": "Объясни разницу между Apache и Nginx."}]
)
print(message.content[0].text)PHP интеграция
<?php
function askClaude(string $prompt, string $system = ''): string {
$data = [
'model' => 'claude-3-5-haiku-20241022',
'max_tokens' => 1024,
'messages' => [['role' => 'user', 'content' => $prompt]],
];
if ($system) $data['system'] = $system;
$ch = curl_init('https://api.anthropic.com/v1/messages');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'x-api-key: ' . $_ENV['ANTHROPIC_API_KEY'],
'anthropic-version: 2023-06-01',
'content-type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($data),
]);
$r = json_decode(curl_exec($ch), true);
curl_close($ch);
return $r['content'][0]['text'] ?? '';
}
echo askClaude('Напиши мета-описание для хостинга', 'Ты SEO-специалист.');Vision: анализ изображений
import anthropic, base64
client = anthropic.Anthropic()
with open("screenshot.png", "rb") as f:
img_data = base64.b64encode(f.read()).decode("utf-8")
msg = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
messages=[{"role": "user", "content": [
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": img_data}},
{"type": "text", "text": "Опиши интерфейс на скриншоте."}
]}]
)
print(msg.content[0].text)Claude vs ChatGPT
| Критерий | Claude 3.5 Sonnet | GPT-4o |
|---|---|---|
| Контекст | 200K токенов | 128K токенов |
| Анализ кода | Лучше | Хорошее |
| Output (1M) | $15 | $10 |
Частые ошибки и коды ответа API
{
"type": "error",
"error": {
"type": "authentication_error",
"message": "invalid x-api-key"
}
}| HTTP-код / тип ошибки | Причина | Решение |
|---|---|---|
| 401 authentication_error | Ключ API неверный, отозван или передан не в том заголовке | Проверить заголовок x-api-key, перевыпустить ключ в консоли при необходимости |
| 429 rate_limit_error | Превышен лимит запросов или токенов в минуту для аккаунта | Реализовать экспоненциальную задержку между повторами и учитывать заголовки лимитов в ответе |
| 529 overloaded_error | Временная перегрузка на стороне API, не связанная с вашим аккаунтом | Повторить запрос с задержкой — это не ошибка клиента, а временная недоступность сервиса |
| 400 invalid_request_error | Некорректный формат запроса — например, отсутствует обязательное поле max_tokens | Сверить тело запроса со схемой API, проверить типы полей в JSON |
Потоковый вывод (streaming)
import anthropic
client = anthropic.Anthropic()
with client.messages.stream(
model="claude-3-5-haiku-20241022",
max_tokens=1024,
messages=[{"role": "user", "content": "Перечисли шаги установки Nginx"}]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)Стриминг полезен для чат-интерфейсов: пользователь видит текст по мере генерации, а не ждёт весь ответ целиком. Без стриминга запрос с длинным ответом может ощущаться зависшим на несколько секунд.
SDK против прямых HTTP-запросов
| Способ | Когда использовать | Сложность |
|---|---|---|
| Официальный SDK (Python/TypeScript) | Основная разработка, нужна поддержка стриминга и повторов из коробки | Низкая, есть готовые обработчики ошибок |
| Прямые HTTP-запросы (curl, любой язык) | Нет SDK под нужный язык, либо нужна максимальная прозрачность запроса | Средняя, обработку ошибок и ретраи пишете сами |
| Сторонние обёртки (LiteLLM и аналоги) | Нужна абстракция над несколькими провайдерами AI сразу | Низкая, но добавляет ещё одну зависимость в проект |
Когда Claude API не подходит
- Нужна работа полностью офлайн или без передачи данных за периметр компании — здесь потребуется локальная модель, а не облачный API
- Задача — простая классификация с фиксированным набором меток на большом потоке данных — специализированная ML-модель может быть на порядок дешевле и быстрее, чем вызов LLM на каждый объект
- Бюджет проекта не закладывает оплату за токены, а нагрузка непредсказуемо большая — расходы на API могут вырасти быстрее, чем ожидалось, без жёстких лимитов на стороне приложения
- Требуется гарантированная задержка ответа в единицы миллисекунд — облачный API добавляет сетевой round-trip, которого нет у модели, запущенной локально
Проверка, что интеграция работает
# Быстрая проверка ключа и доступности API
curl -s https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-3-5-haiku-20241022","max_tokens":10,"messages":[{"role":"user","content":"ping"}]}' \
-o /dev/null -w '%{http_code}\n'- Выполните тестовый запрос и убедитесь, что код ответа 200, а не 401/403 — это подтверждает, что ключ действителен
- Проверьте, что поле
contentв ответе непустое и содержит осмысленный текст, а не ошибку, завёрнутую в JSON - Замерьте время ответа для типичного запроса вашего приложения — если оно заметно больше нескольких секунд, проверьте, не блокирует ли код синхронное ожидание там, где нужен стриминг
- Настройте логирование кода ошибки и типа ошибки (
error.type) отдельно от текста сообщения — это упрощает алертинг при массовых сбоях
Сравнение Claude с другими LLM API по цене и возможностям — в статье сравнение AI API, а безопасную работу AI-агентов с доступом к внешним системам разбирает материал безопасность AI-агентов.
Частые вопросы
Нужен ли отдельный сервер для работы с Claude API, или подключение возможно с обычного хостинга?
Claude API — это обычный HTTPS-эндпоинт, поэтому жёсткой привязки к VPS нет: подойдёт любая площадка, способная выполнять исходящие запросы и хранить переменные окружения. VPS даёт больше контроля над фоновыми процессами, очередями и логированием, что удобно для нагруженных интеграций, но для простого скрипта или сайта хватает и обычного хостинга с поддержкой PHP или Python.
Как обезопасить ключ API, чтобы он не попал в чужие руки?
Ключ нужно хранить в переменных окружения или отдельном файле конфигурации вне репозитория, а не прямо в коде страницы или фронтенде — иначе любой посетитель сайта увидит его в исходниках браузера. Запросы к модели всегда выполняются на стороне сервера, доступ к файлу с ключом стоит ограничить правами на уровне операционной системы, а при подозрении на утечку ключ перевыпускают в консоли.
Почему ответ модели иногда обрывается на середине фразы?
Чаще всего причина — слишком маленькое значение max_tokens, заданное в запросе: модель останавливается, как только исчерпывает отведённый лимит токенов на ответ, даже если мысль не закончена. Решение — увеличить лимит под длину ожидаемого ответа и проверять поле stop_reason в ответе API, которое показывает, остановка произошла по лимиту или по завершении мысли естественным образом.
Насколько сложно перейти на Claude API, если проект уже написан под ChatGPT?
Структура запроса у обеих моделей похожа: системная инструкция, список сообщений и параметр длины ответа, поэтому базовая логика переносится без глубокой переработки. Отличаются названия полей, формат ответа и обработка изображений, так что потребуется переписать слой интеграции — функцию отправки запроса и разбора ответа, а бизнес-логику приложения вокруг этого слоя менять обычно не нужно.