Інтеграція Claude API у мобільний додаток
Claude API від Anthropic — альтернатива OpenAI з кількома технічними відмінностями, важливими для мобільної розробки. Велике контекстне вікно (200k токенів для claude-3-5-sonnet), вбудована підтримка vision у тому ж Messages API, відмінна підтримка російської мови. Інтеграція мобільного додатку дотримується тих же принципів безпеки, що й будь-який LLM API.
Безпечне керування ключами
Anthropic API key — sk-ant-.... Одне правило: тільки на backend. Мобільний клієнт спілкується з вашим proxy-сервером, який додає заголовок x-api-key та перенаправляє на api.anthropic.com.
Архітектура proxy: будь-який backend — Laravel, FastAPI, Cloudflare Worker. Мінімальна реалізація на Cloudflare Worker займає ~30 рядків і обробляє як звичайні запити, так і streaming. Холодний старт Workers — 5–10 мс, не додаючи помітної затримки.
На стороні мобільного клієнта: JWT-аутентифікація користувача на вашому proxy. Proxy перевіряє токен, застосовує обмеження швидкості (наприклад, 20 запитів/хвилину на користувача) та логує input_tokens/output_tokens для аналітики витрат.
Messages API: ключові відмінності від OpenAI
Anthropic Messages API відрізняється від OpenAI Chat Completions кількома деталями:
- Системний промпт — окреме поле
system, а не елемент масивуmessages. Важливо: тримати системний контекст уsystem, а не уmessages[0]зrole: "system". - Ролі: тільки
userтаassistant(немаєsystemу messages). - Немає старомодного
function_calling— замість цьогоtoolsзinput_schemaу форматі JSON Schema.
{
"model": "claude-haiku-4-5",
"max_tokens": 1024,
"system": "Ви помічник у мобільному додатку ...",
"messages": [
{"role": "user", "content": "Поясни цей документ"},
{"role": "assistant", "content": "Звісно, ..."},
{"role": "user", "content": "Що означає пункт 3?"}
]
}
Мобільний streaming
Claude API підтримує SSE-streaming з "stream": true. Формат трохи відрізняється від OpenAI:
Подія content_block_delta містить delta.text — це токен. Подія message_stop позначає кінець потоку. На iOS парсимо через URLSessionDataDelegate, подібно до ChatGPT. На Android — OkHttp EventSource.
Delta-подіїр приходять часто (кожні 10–50 мс під час активної генерації). Буферизуйте перед оновленням UI: оновлюйте @Published var streamText не на кожну подію, а через Throttle publisher (iOS) або distinctUntilChanged + debounce (Android Flow).
Vision: аналіз зображень
Claude 3+ вбудовано підтримує зображення у messages. Формат:
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": "<base64>"
}
},
{"type": "text", "text": "Що зображено на фото?"}
]
}
На мобілі: стисніть зображення перед відправкою. Якість JPEG 70, максимальний розмір 1568×1568 (обмеження API). Оригінальний RAW з камери — 10–15 МБ — не практичний: дорожче по токенам, повільніше. Resize + compress через UIGraphicsImageRenderer (iOS) або Bitmap.createScaledBitmap + compress(Bitmap.CompressFormat.JPEG, 70, out) (Android).
Керування діалогом
Claude добре тримає довгий контекст — 200k токенів. Але для мобільного чату це надмірно і дорого. На практиці ковзне вікно останніх 20 повідомлень достатньо для більшості завдань.
Для спеціалізованих додатків (юридичний помічник, медичний довідник) — RAG (Retrieval Augmented Generation): зберігайте документи у векторній БД на backend, доповнюйте промпт system релевантними фрагментами в кожному запиті. Це не збільшує розмір історії, але дає доступ до великої бази знань.
Обробка помилок Anthropic API
529 Overloaded — сервери перевантажені, експоненціальний backoff. 400 з error.type = "invalid_request_error" — зазвичай перевищено max_tokens або неправильний формат content. 401 — неправильний ключ на proxy. Логуйте всі помилки з request ID (заголовок відповіді x-request-id) — потрібен для звернення до служби підтримки Anthropic.
Приклад: юридичний помічник для B2B-додатку. claude-3-5-sonnet-20241022, аналіз контрактів. Користувач фотографує сторінку контракту, помічник виділяє ключові умови та ризики. Resize зображення до 1200px по довгій стороні, JPEG 80. Середній запит: 2400 input токенів (зображення ~1800 + текст 600) + 800 output. Streaming — перші слова з'являються за 350 мс. Користувачі не помічають затримку зі streaming порівняно з «порожнім екраном 4 секунди» без нього.
Терміни
Базова інтеграція з streaming, контекстом діалогу та backend-proxy — 3–5 робочих днів. З підтримкою зображень та RAG — 1–2 тижні. Вартість розраховується індивідуально.







