Интеграция Claude API в мобильное приложение
Типичная ситуация: вы разрабатываете мобильный чат-ассистент на Swift или Kotlin и выбираете между OpenAI и Anthropic. Claude API от Anthropic даёт контекст до 200k токенов (claude-3-5-sonnet), нативную поддержку vision и отличное качество русского языка. Мы подключаем Claude к вашему приложению под ключ: от архитектуры backend-proxy до финального тестирования streaming. Наш опыт — более 30 проектов с AI-интеграциями, что позволяет сократить время вывода на рынок в 2-3 раза по сравнению с самостоятельной разработкой.
Безопасная работа с ключами
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 ms, latency не заметна.
На стороне мобильного клиента: JWT-аутентификация пользователя на proxy. Proxy проверяет токен, применяет rate limiting (например, 20 запросов/минуту на пользователя) и логирует input_tokens/output_tokens для аналитики расходов. Мы гарантируем, что ключ не покинет backend.
Почему 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, на Android — OkHttp EventSource. Дельта-события приходят каждые 10–50 ms при активной генерации. Буферизируем перед обновлением UI: обновляем @Published var streamText не при каждом событии, а через Throttle publisher (iOS) или distinctUntilChanged + debounce (Android Flow).
Сравнение streaming Claude vs OpenAI:
| Параметр | Claude (SSE) | OpenAI (SSE) |
|---|---|---|
| Формат событий | content_block_delta / message_stop | choices[i].delta.content / finish_reason |
| Задержка первого токена | ~350 мс (средняя) | ~300 мс |
| Поддержка vision в streaming | Да | Да (но через gpt-4-vision) |
| Буферизация на клиенте | Throttle / debounce | Аналогично |
Как анализировать изображения через Claude на мобиле?
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). Resize + compress через UIGraphicsImageRenderer (iOS) или Bitmap.createScaledBitmap + compress (Android). Экономия токенов в 5–10 раз по сравнению с отправкой RAW.
Управление диалогом и RAG
Claude держит 200k токенов, но для мобильного чата это оверкилл и дорого. На практике — скользящее окно последних 20 сообщений достаточно. Для специализированных приложений (юридический ассистент, медицинский справочник) — RAG (Retrieval Augmented Generation): храним документы в векторной БД на backend, при каждом запросе дополняем system промпт релевантными фрагментами. Не увеличивает размер истории, но даёт доступ к большой базе знаний. Подробнее о RAG в документации Anthropic.
Обработка ошибок 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, анализ договоров. Пользователь фотографирует страницу договора, ассистент выделяет ключевые условия и риски. Изображение resize до 1200px по длинной стороне, JPEG 80. Средний запрос: 2400 input tokens (изображение ~1800 + текст 600) + 800 output. Streaming — первые слова появляются через 350 ms. Пользователи не замечают задержку при streaming по сравнению с «пустым экраном 4 секунды» без него.
Сравнение моделей Claude
| Модель | Скорость | Контекст | Стоимость за 1M токенов (input/output) |
|---|---|---|---|
| Claude Haiku | Быстрая | 200k | $0.25 / $1.25 |
| Claude Sonnet | Средняя | 200k | $3.00 / $15.00 |
| Claude Opus | Медленная | 200k | $15.00 / $75.00 |
Выбор модели зависит от сценария: для простого чата Haiku, для сложного анализа — Sonnet или Opus. Мы поможем подобрать оптимальную модель и настроить fallback для снижения расходов.
Что входит в работу
- Архитектура backend-proxy (Cloudflare Worker / Laravel / FastAPI)
- Интеграция Messages API с streaming и vision
- Управление диалогами (скользящее окно, RAG при необходимости)
- Логирование токенов и обработка ошибок
- Документация по развёртыванию и поддержке
- Тестирование с TestFlight / Firebase App Distribution
Сроки и стоимость
Базовая интеграция с streaming, контекстом диалога и backend-proxy — 3–5 рабочих дней. С поддержкой изображений и RAG — 1–2 недели. Стоимость рассчитывается индивидуально. Свяжитесь с нами для оценки вашего проекта — мы подготовим предложение в течение дня. Также вы можете заказать консультацию по архитектуре — её стоимость спишется с основного проекта.







