Інтеграція 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.
Кеш та обмеження
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 дні |
Вартість розраховується індивідуально в залежності від складності та обсягу робіт. Отримайте консультацію: ми оцінимо ваш проєкт протягом одного робочого дня. Зв'яжіться з нами для обговорення деталей.







