Интеграция YandexGPT в мобильное приложение
YandexGPT подходит там, где важна русскоязычная семантика: поддержка пользователей, автозаполнение форм, генерация текстов для контента. OpenAI-модели справляются с английским лучше — YandexGPT даёт преимущество именно на русскоязычной аудитории, особенно при работе с региональными запросами и специфичной лексикой.
Задача интеграции на первый взгляд проста: POST на https://llm.api.cloud.yandex.net/foundationModels/v1/completion, передать IAM-токен и текст. На практике — цепочка нетривиальных решений.
Авторизация: IAM-токен vs API-ключ
Первая точка отказа — авторизация. 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)
Режим 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)
// SSE парсинг: ищем "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 тарифицирует по токенам. На мобильном клиенте необходимо кешировать повторяющиеся запросы — типичный паттерн для FAQ или онбординга. Простой LRU-кеш на 100 записей в памяти сокращает расходы при повторяющихся сессиях.
Rate limit Yandex Foundation Models — 10 RPS на фолдер по умолчанию. При пиковой нагрузке (много пользователей одновременно) нужна очередь на бэкенде, а не прямые вызовы с каждого устройства.
Процесс работы
Аудит сценариев: где именно нужен LLM — поддержка, генерация текста, классификация запросов. Выбор модели и режима (synchronous / stream). Разработка прокси-сервиса на бэкенде с управлением IAM-токеном. Интеграция в мобильное приложение с UI для потоковой генерации. Тестирование качества ответов на реальных пользовательских запросах, подбор системного промпта.
Ориентиры по срокам
Базовая интеграция через прокси без стриминга — 2–3 дня. Полноценный чат-интерфейс с потоковой генерацией, кешированием и обработкой ошибок — 5–8 дней.







