← Все гайды AI Release
EN Подписаться на @ai_release1

Локальная модель или облако на iPhone: как настроить гибридный роутинг ИИ-запросов

Обновлено: 15.10.2026 · AI Release · @ai_release1
Локальная модель или облако на iPhone: как настроить гибридный роутинг ИИ-запросов

Часть запросов с телефона хочется держать на самом устройстве — там приватно, работает без сети и не тратит деньги, — а тяжёлые задачи отправлять в облако, где модель умнее. Гибридный роутинг — это правило, которое автоматически решает, какой запрос пойдёт на локальную модель (on-device, то есть прямо на чипе iPhone, без сервера), а какой — на облачную через API (программный интерфейс, через который приложение общается с чужим сервером). Гайд для iPhone с актуальной версией iOS, где есть системное приложение «Команды» (Shortcuts — конструктор автоматизаций из блоков), плюс одно приложение с локальной моделью и один API-ключ облачного провайдера. Если вы ещё не запускали модель локально — начните с гайда для компьютера, там разобраны форматы весов и квантизация.

Требования и подготовка

Иллюстрация к разделу «Требования и подготовка»
Иллюстрация к разделу «Требования и подготовка»

Пошаговая инструкция

Иллюстрация к разделу «Пошаговая инструкция»
Иллюстрация к разделу «Пошаговая инструкция»

1. Проверьте локальную ветку отдельно от всех автоматизаций. Откройте приложение с моделью, загрузите веса (файлы модели) и задайте простой вопрос. Затем включите авиарежим и повторите вопрос.

**Пример:** вопрос «Сократи это письмо до трёх строк» → ответ приходит без Wi-Fi и мобильных данных.

Ожидаемый результат: ответ есть при выключенной сети. Почему это работает: вычисления идут на чипе телефона, сеть не участвует.

2. Проверьте облачную ветку «руками». Отправьте один тестовый запрос curl-ом или через консоль провайдера — так вы убедитесь, что ключ живой, до того как засунете его в автоматизацию.

**Пример:** запрос с телом `{"model": "<имя модели>", "messages": [{"role": "user", "content": "ping"}]}` → возвращается JSON с полем ответа.

Ожидаемый результат: статус 200 и осмысленный ответ. Если пришло 401 — ключ неверный, чинить нужно здесь, а не в шорткате.

3. Откройте «Команды» и создайте новый шорткат с именем `Умный роутер`. Добавьте первым действием «Получить текст из ввода» (Receive Text from Input) — так шорткат сможет принимать запрос из виджета, Siri или из другого приложения.

Ожидаемый результат: в редакторе появился блок приёма текста, и вы можете нажать «Выполнить» и ввести текст вручную.

4. Добавьте блок условия: «Если» (If) → «Длина» (Length) текста «меньше 200». Внутрь ветки «тогда» положите вызов локального приложения, внутрь «иначе» — вызов облака.

**Пример:** запрос «напомни купить хлеб» — 18 символов, уходит локально; запрос «разбери этот договор на 4 страницы» — 39 символов, но с вложением, уходит в облако.

Ожидаемый результат: короткие сообщения больше не тратят деньги на API. Почему это работает: длина текста — простой и предсказуемый признак «легкости» задачи.

5. Добавьте второе условие — «нет подключения к сети». Ветку «тогда» ведите на локальную модель принудительно, независимо от длины.

Ожидаемый результат: в самолёте роутер не падает с ошибкой, а отвечает локально.

6. Соберите облачный вызов: действие «Получить содержимое URL» (Get Contents of URL), метод `POST`, заголовки и тело — как в конфиге ниже.

**Пример:**

{
  "endpoint": "https://api.example.com/v1/chat/completions",
  "headers": {
    "Authorization": "Bearer sk-ВАШ_КЛЮЧ",
    "Content-Type": "application/json"
  },
  "body": {
    "model": "<имя облачной модели>",
    "messages": [{"role": "user", "content": "<текст запроса>"}],
    "temperature": 0.3
  }
}

`temperature` — «степень фантазии»: 0.3 даёт сдержанные ответы. Ожидаемый результат: в шорткате появляется ответ облака в виде JSON; достаньте из него текст поля с ответом.

7. Опишите правила роутинга в одном месте — так проще править, чем лазить по блокам. Сохраните схему рядом с шорткатом:

{
  "route_local_if": [
    {"length_lt": 200},
    {"network": "offline"}
  ],
  "route_cloud_if": [
    {"has_attachment": true},
    {"contains": ["разбери", "перепиши статью", "код", "договор"]}
  ],
  "fallback": "local",
  "timeout_sec": 8
}

8. Добавьте fallback (запасной маршрут): если облако вернуло ошибку или не ответило за 8 секунд — повторить запрос локально и пометить ответ как «локальный».

Ожидаемый результат: пользователь всегда получает ответ, даже при 429 (слишком много запросов) или пропавшей сети.

9. Прогоните три теста: короткий вопрос, вопрос со словом-триггером и тот же короткий вопрос в авиарежиме. Запишите, какой маршрут сработал.

**Пример:** «переведи абзац» → облако; «поставь таймер» → локально; «поставь таймер» в авиарежиме → локально.

Ожидаемый результат: три из трёх запросов ушли туда, куда вы задумали. Если нет — правьте условия, а не модель.

10. Вынесите шорткат на экран «Домой» или в виджет, чтобы запускать его в одно касание.

Ожидаемый результат: роутер вызывается без открытия «Команд».

Возможные проблемы и решения

FAQ

Куда уходит мой запрос при гибридном роутинге?

Тот, что выбран локальной веткой, не покидает iPhone. Облачная ветка отправляет текст на сервер провайдера по вашему API-ключу — поэтому чувствительные данные лучше оставлять на устройстве.

Работает ли такая схема без интернета?

Да, за счёт локальной ветки и условия «нет подключения к сети». Облачные запросы в офлайне просто не пройдут — их и подменяет fallback.

Нужен ли API-ключ, если модель уже стоит на телефоне?

Нужен только для облачной части. Если вы готовы обходиться локальной моделью, роутер можно не собирать вообще — но тогда вы теряете доступ к более сильным моделям. Выбрать облачную модель под задачу помогает разбор рейтинга LMArena.

Локальная модель отвечает медленно — что делать?

Уменьшите размер модели или возьмите сильнее квантованную версию, сокращайте промпт и понижайте порог длины, чтобы на устройство уходили только совсем короткие запросы. Ориентир простой: если ответ идёт дольше, чем вы готовы ждать, — отправляйте задачу в облако. Подходы к запуску моделей на слабом железе разобраны в гайде для Android.

🤖 Кратко для ИИ