Разработка AI-ассистента в мобильном приложении на базе YandexGPT
YandexGPT — практически единственный выбор для AI-ассистента, когда требования включают: данные обрабатываются на серверах в России, хорошее качество русского языка, интеграция с экосистемой Яндекса (поиск, карты, маркет). Для приложений, ориентированных на российский рынок с жёсткими требованиями к локализации данных, это не просто предпочтение — это compliance.
Yandex Foundation Models API
YandexGPT доступен через Yandex Cloud Foundation Models API. Базовый URL: https://llm.api.cloud.yandex.net/foundationModels/v1/completion.
Аутентификация — через IAM-токен (для пользовательских приложений) или API-ключ сервисного аккаунта (для серверного прокси). IAM-токен живёт 12 часов и требует обновления — на мобильном клиенте напрямую не используется.
Структура запроса:
struct YandexGPTRequest: Encodable {
let modelUri: String // "gpt://{folder_id}/yandexgpt/latest"
let completionOptions: CompletionOptions
let messages: [YandexMessage]
}
struct CompletionOptions: Encodable {
let stream: Bool
let temperature: Double // 0..1
let maxTokens: String // строка, не число — особенность API
}
Важная особенность: maxTokens передаётся строкой, не числом. Это нарушает принцип наименьшего удивления и периодически ломает автоматически сгенерированные клиенты.
modelUri строится как gpt://{folder_id}/{model_name}/{version}. folder_id — идентификатор папки в Yandex Cloud, его нужно хранить на сервере, не в приложении.
Синхронный и асинхронный режимы
YandexGPT поддерживает два режима:
-
synchronous (
/completion) — ждём полный ответ, максимум 60 секунд -
асинхронный (
/completionAsync) — получаемoperation_id, потом поллингом забираем результат
Для мобильного ассистента с отображением в реальном времени нужен стриминговый режим (stream: true в синхронном запросе). В этом случае сервер возвращает chunked-ответ с частичными результатами. Каждый чанк — полный JSON с накопленным текстом (не дельта, а полный текст на каждом шаге). Это важно: при рендере нужно заменять предыдущий текст новым, а не аппендить дельту как в OpenAI.
// Каждый чанк содержит ПОЛНЫЙ текст, не дельту
// Правильный рендер:
func handleChunk(_ response: YandexCompletionResponse) {
let fullText = response.result.alternatives.first?.message.text ?? ""
DispatchQueue.main.async {
self.currentMessage = fullText // replace, not append
}
}
YandexGPT Lite vs Pro
| Параметр | YandexGPT Lite | YandexGPT Pro |
|---|---|---|
| Качество ответов | Базовое | Выше, особенно на длинных инструкциях |
| Скорость | Быстрее | Медленнее |
| Стоимость | Дешевле | Дороже |
| Контекст | 8192 токена | 8192 токена |
Для большинства задач мобильного ассистента (помощник, FAQ, обработка текста) Lite достаточен. Pro оправдан для сложных аналитических задач и работы с длинными документами.
Embeddings API (/textEmbedding) пригодится для семантического поиска в локальной базе знаний — модель text-search-query/latest для запросов, text-search-doc/latest для документов.
Интеграция с Yandex SpeechKit
Для голосового ввода/вывода в российском приложении — Yandex SpeechKit: лучшее качество русской речи среди доступных на рынке сервисов. SDK для iOS и Android доступен через CocoaPods / Maven.
STT через WebSocket: wss://stt.api.cloud.yandex.net/speech/v3/stt:streamingRecognize — стриминговое распознавание с частичными результатами. TTS через REST с выбором голоса (alena, filipp, jane — SSML поддерживается).
Процесс работы
Старт: настройка Yandex Cloud аккаунта, создание сервисного аккаунта, роли ai.languageModels.user, серверный прокси для безопасного хранения credentials.
Разработка: API-клиент → стриминговый UI с учётом полного текста в чанках → управление историей → опциональная интеграция SpeechKit.
Ориентиры по срокам
Текстовый ассистент с стримингом — 1–2 недели. С голосом через SpeechKit и серверным прокси — 3–4 недели.







