Введение

В данной статье я расскажу как добавить YandexGPT для использования с Siri.

Входные данные

Подразумевается, что вы уже создали платёжный аккаунт в Yandex Cloud и имеете FolderID и API-ключ для доступа к YandexGPT.

FolderID — это номер каталога, в котором настроен доступ к сервисам YandexCloud. API-ключ — это ключ сервисного аккаунта <ваше название> внутри сервиса Identity and Access Management (IAM) с ролью ai.languageModels.user.

Если у вас не настроен Yandex Cloud, то в официальной документации от Яндекса всё очень подробно расписано.

Для работы с Siri необходимы приложения Команды (Shortcuts) и Scriptable.

Shortcuts используется для запуска команд — это позволяет создать иконку на экране «Домой» и использовать голосовую команду через Siri. Scriptable используется для запуска JS-скрипта, который будет выполнять непосредственную отправку запросов на сервер Yandex Cloud.

Настройка Scriptable

Скрипт для сохранения секретов

Первое, что необходимо сделать, это добавить переменные в Keychain (безопасное хранилище ключей и секретов), чтобы не скомпрометировать свои ключи.

  1. Открываем приложение Scriptable

  2. Создаём новый скрипт, нажимая на кнопку «+» вверху экрана

  3. Вставляем JavaScript-код ниже

// Создаём форму для ввода API-ключа и folder_id
let alert = new Alert();
alert.title = "Настройка доступа к YandexGPT";
alert.message = "Введите API-ключ и Folder ID";
alert.addTextField("API-ключ");
alert.addTextField("Folder ID");
alert.addAction("Сохранить");
await alert.present();

// Получаем данные из полей
let apiKey = alert.textFieldValue(0).trim();
let folderId = alert.textFieldValue(1).trim();

if (!apiKey || !folderId) {
  let error = new Alert();
  error.title = "Ошибка";
  error.message = "Оба поля обязательны!";
  error.addCancelAction("Ок");
  await error.present();
  Script.complete();
}

// Сохраняем в безопасное хранилище
Keychain.set("api_key", apiKey);
Keychain.set("folder_id", folderId);

// Подтверждение
let done = new Notification();
done.title = "Настройка завершена";
done.body = "Данные сохранены в Keychain.";
await done.schedule();

После этого возвращаемся в меню, долгим нажатием на «Untitled Script» открываем меню и переименовываем скрипт в «YandexGPT Setup» — это будет наш скрипт для настройки FolderID и API-ключа.

Запускаем скрипт. В появившемся окне вводим API-ключ и FolderID.

Скрипт для отправки запросов

Второй шаг, это создать скрипт для непосредственной отправки запросов на сервер Yandex Cloud.

  1. Открываем приложение Scriptable

  2. Создаём новый скрипт, нажимая на кнопку «+» вверху экрана

  3. Вставляем JavaScript-код ниже

// Получаем API-ключ и Folder ID из Keychain
let apiKey = Keychain.get("api_key");
let folderId = Keychain.get("folder_id");

if (!apiKey || !folderId) {
  Script.setShortcutOutput("Ошибка: сначала запусти скрипт 'Setup'");
  Script.complete();
}

// Получаем сообщение пользователя из Shortcuts
let userMessage = args.shortcutParameter;

// Формируем запрос
let url = "https://llm.api.cloud.yandex.net/foundationModels/v1/completion";

let payload = {
  modelUri: `gpt://${folderId}/yandexgpt-lite`,
  completionOptions: {
    stream: false,
    temperature: 0.6,
    maxTokens: 1000,
    reasoningOptions: {
      mode: "DISABLED"
    }
  },
  messages: [
    {
      role: "system",
      text: `You're an academic chatbot.`
    },
    {
      role: "user",
      text: userMessage
    }
  ]
};

let req = new Request(url);
req.method = "POST";
req.headers = {
  "Authorization": `Api-Key ${apiKey}`,
  "Content-Type": "application/json"
};
req.body = JSON.stringify(payload);

// Отправка
try {
  let res = await req.loadJSON();
  let reply = res.result.alternatives[0].message.text.trim();
  Script.setShortcutOutput(reply);
} catch (e) {
  Script.setShortcutOutput("Ошибка запроса: " + e.message);
}

Script.complete();

После этого возвращаемся в меню, долгим нажатием на «Untitled Script» открываем меню и переименовываем скрипт в «YandexGPT» — это будет наш скрипт для отправки запросов.

После создания данного скрипта запустить его не получится. За запуск скрипта будет отвечать приложение Команды (Shortcuts).

Настройка Shortcuts

С помощью Shortcuts возможно запускать скрипт с помощью голосовых команд Siri или как отдельное приложение на экране «Домой».

  1. Открываем приложение Команды (Shortcuts)

  2. Создаём новую команду, нажав на кнопку «+» вверху экрана

  3. В строке поиска пишем «Запросить входные данные». В появившемся блоке выбираем «Текст» и сообщение, с которым будет выводиться окно (например, «Что вы хотите спросить у YandexGPT?»).

  4. В строке поиска пишем «Run Script» (имеет иконку приложения Scriptable). В появившемся блоке выбираем «YandexGPT».

  5. В строке поиска пишем «Показать результат». В появившемся блоке автоматически должно подставиться «Output» приложения Scriptable.

После этого возвращаемся в меню, долгим нажатием по команде открываем меню и переименовываем команду в «Спроси у Яндекса» или любое другое название.

Чтобы добавить ярлык команды «Спроси у Яндекса» на экран «Домой»:

  1. Долгим нажатием по команде открываем меню

  2. Нажимаем «Поделиться»

  3. Нажимаем «На экран Домой»

Варианты пользования

Голосовое управление

При активации команды через Siri, возможен голосовой ввод запроса. Полученный ответ от чат-бота будет озвучен с помощью Siri.

Текстовое управление

При активации команды через ярлык, будет выводиться текстовое поле, в котором можно ввести запрос. Полученный ответ чат-бота не будет озвучен.

Ограничения

Скрипт можно реализовать и без Scriptable, это заметно сложнее.

В процессе работы с Shortcuts я столкнулся с ограничением: при использовании типа данных «число» допускается только целочисленный формат (int), тогда как вещественные значения — такие как float или double — не поддерживаются.

Это создало трудности при попытке задать параметры с дробными значениями, например, temperature.

На Reddit предлагали обходной путь: разбивать число на две переменные (целую и дробную часть), а затем объединять их через точку или запятую. Однако и такой подход не всегда срабатывает: у некоторых пользователей дробные значения автоматически округляются — причём не всегда предсказуемо, то вверх, то вниз. Причины такого поведения остаются неясными.

Комментарии (2)