Интеграция YandexGPT в мобильное приложение
При попытке напрямую использовать IAM-токен в мобильном приложении пользователи сталкиваются с ошибкой 401 Unauthorized через 12 часов — срок жизни токена истекает. API-ключ же остаётся в APK после сборки и извлекается обратной разработкой за несколько минут. Решение — прокси-сервис на собственном бэкенде. Рассмотрим архитектуру и ключевые моменты интеграции YandexGPT на iOS и Android.
YandexGPT даёт преимущество там, где важна русскоязычная семантика: поддержка пользователей, автозаполнение форм, генерация контента с учётом локальной лексики. OpenAI-модели сильны для английской речи, но YandexGPT точнее обрабатывает региональные запросы и специфичные термины. Задача интеграции на первый взгляд проста: POST на https://llm.api.cloud.yandex.net/foundationModels/v1/completion, передать IAM-токен и текст. На практике — цепочка нетривиальных решений, которые мы отработали на десятках проектов.
Как настроить IAM-токен для мобильного приложения?
Первая точка отказа — авторизация. IAM-токен живёт 12 часов, API-ключ — постоянный, но менее безопасный. В мобильном приложении хранить сервисный ключ напрямую нельзя: его вытащат из APK за 10 минут через apktool. Правильная схема: мобильный клиент авторизуется в вашем бэкенде, бэкенд держит IAM-токен и проксирует запросы к Yandex Cloud.
// iOS: запрос через собственный прокси
struct YGPTRequest: Encodable {
let prompt: String
let maxTokens: Int
let temperature: Double
}
func sendToYandexGPT(prompt: String) async throws -> String {
let url = URL(string: "https://api.yourapp.com/ai/complete")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer \(authToken)", forHTTPHeaderField: "Authorization")
request.httpBody = try JSONEncoder().encode(YGPTRequest(
prompt: prompt,
maxTokens: 500,
temperature: 0.7
))
let (data, _) = try await URLSession.shared.data(for: request)
return try JSONDecoder().decode(CompletionResponse.self, from: data).text
}
На Android — аналогично через Retrofit с OkHttp-интерсептором для подстановки токена.
Почему стоит использовать потоковую генерацию?
Режим stream: true в Yandex Foundation Models API возвращает ответ чанками — как в ChatGPT. Для мобильного UX это важно: пользователь видит текст по мере генерации, не ждёт 3–5 секунд. Мы гарантируем, что потоковая передача не увеличивает нагрузку на устройство при правильной реализации.
На iOS обработка Server-Sent Events через URLSessionDataDelegate:
class StreamingDelegate: NSObject, URLSessionDataDelegate {
var onChunk: (String) -> Void
var buffer = Data()
func urlSession(_ session: URLSession,
dataTask: URLSessionDataTask,
didReceive data: Data) {
buffer.append(data)
guard let text = String(data: buffer, encoding: .utf8) else { return }
let lines = text.components(separatedBy: "\n")
for line in lines where line.hasPrefix("data: ") {
let json = String(line.dropFirst(6))
if let chunk = parseYGPTChunk(json) {
DispatchQueue.main.async { self.onChunk(chunk) }
}
}
}
}
На Android — OkHttp с EventSource (библиотека okhttp-sse) или ручной парсинг BufferedReader по строкам.
Модели и параметры
Yandex предоставляет несколько вариантов: yandexgpt-lite — быстрый и дешёвый, yandexgpt — полная версия, yandexgpt-32k — для длинных контекстов. Для большинства мобильных сценариев (чат-подсказки, автозаполнение) yandexgpt-lite достаточен и заметно быстрее.
| Модель | Контекст | Скорость ответа | Применение |
|---|---|---|---|
| yandexgpt-lite | 8k токенов | ~1–2 сек | Подсказки, саммари |
| yandexgpt | 8k токенов | ~3–5 сек | Сложные задачи |
| yandexgpt-32k | 32k токенов | ~8–15 сек | Длинные документы |
Параметр temperature от 0 до 1: 0.2–0.4 — детерминированные ответы (FAQ-бот), 0.7–0.9 — творческие тексты. Рекомендуем системный промпт на русском языке — это повышает релевантность ответов.
Подробнее о моделях — в Yandex Cloud API documentation.
Кеш и ограничения
Yandex Cloud тарифицирует по токенам. На мобильном клиенте необходимо кешировать повторяющиеся запросы — типичный паттерн для FAQ или онбординга. Простой LRU-кеш на 100 записей в памяти сокращает расходы при повторяющихся сессиях. Мы используем такой кеш во всех проектах — экономия до 40% на API-запросах.
Rate limit Yandex Foundation Models — 10 RPS на фолдер по умолчанию. При пиковой нагрузке (много пользователей одновременно) нужна очередь на бэкенде, а не прямые вызовы с каждого устройства. Оценим ваш проект и поможем выбрать архитектуру.
Что входит в работу
- Аудит сценариев: профилирование пользовательских запросов, оценка необходимой глубины контекста.
- Проектирование архитектуры: прокси-сервис, управление IAM-токенами, кеширование.
- Интеграция в мобильное приложение (iOS/Android) с поддержкой потоковой генерации.
- Тестирование качества ответов на реальных данных, подбор системного промпта.
- Документация по API и примеры кода.
- Обучение команды заказчика работе с Yandex Cloud.
Процесс работы
- Аудит сценариев: где именно нужен LLM — поддержка, генерация текста, классификация запросов.
- Выбор модели и режима (synchronous / stream).
- Разработка прокси-сервиса на бэкенде с управлением IAM-токеном.
- Интеграция в мобильное приложение с UI для потоковой генерации.
- Тестирование качества ответов на реальных пользовательских запросах, подбор системного промпта.
- Передача документации и финальное демо.
Пример архитектуры для Android
// Retrofit интерфейс
interface YandexGPTProxy {
@POST("ai/complete")
suspend fun complete(@Body request: CompletionRequest): CompletionResponse
}
// ViewModel с кешированием
class ChatViewModel(private val api: YandexGPTProxy) : ViewModel() {
private val cache = LruCache<String, String>(100)
fun sendPrompt(prompt: String) = viewModelScope.launch {
cache.get(prompt)?.let { /* use cached */ }
val result = api.complete(CompletionRequest(prompt))
cache.put(prompt, result.text)
}
}
Ориентиры по срокам
| Этап | Сроки (дни) |
|---|---|
| Базовая интеграция через прокси (без стриминга) | 2–3 дня |
| Полноценный чат-интерфейс с потоковой генерацией | 5–8 дней |
| Оптимизация кеширования и обработка ошибок | +1–2 дня |
Стоимость рассчитывается индивидуально в зависимости от сложности и объёма работ. Получите консультацию: мы оценим ваш проект в течение одного рабочего дня. Свяжитесь с нами для обсуждения деталей.







