Claude API: ШІ від 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 проти 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?
Структура запиту в обох моделей схожа: системна інструкція, перелік повідомлень і параметр довжини відповіді, тому базова логіка переноситься без глибокого перероблення. Відрізняються назви полів, формат відповіді і обробка зображень, тому доведеться переписати шар інтеграції — функцію надсилання запиту і розбору відповіді, а бізнес-логіку застосунку довкола цього шару змінювати зазвичай не потрібно.