До основного вмісту

Claude API (Anthropic): підключення та інтеграція з VPS

AI-агенти на VDS · 19.04.2026 · 6 хв читання
Ілюстрація до статті «Claude API (Anthropic): підключення та інтеграція з VPS»

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 anthropic
import 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 SonnetGPT-4o
Контекст200K токенів128K токенів
Аналіз кодуКращеДобре
Output (1M)$15$10
Порада: Claude 3 Haiku ($0.25/$1.25 за 1M) — швидкий і дешевий варіант для чат-ботів з високим навантаженням.

Часті помилки та коди відповіді 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'
  1. Виконайте тестовий запит і переконайтеся, що код відповіді 200, а не 401/403 — це підтверджує, що ключ дійсний
  2. Перевірте, що поле content у відповіді непорожнє і містить осмислений текст, а не помилку, загорнуту в JSON
  3. Заміряйте час відповіді для типового запиту вашого застосунку — якщо він помітно більший за кілька секунд, перевірте, чи не блокує код синхронне очікування там, де потрібен стримінг
  4. Налаштуйте логування коду помилки і типу помилки (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?

Структура запиту в обох моделей схожа: системна інструкція, перелік повідомлень і параметр довжини відповіді, тому базова логіка переноситься без глибокого перероблення. Відрізняються назви полів, формат відповіді і обробка зображень, тому доведеться переписати шар інтеграції — функцію надсилання запиту і розбору відповіді, а бізнес-логіку застосунку довкола цього шару змінювати зазвичай не потрібно.

Чи була стаття корисною?
← Назад до бази знань Поставити питання підтримці