Введение
В данной статье я расскажу как добавить 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 (безопасное хранилище ключей и секретов), чтобы не скомпрометировать свои ключи.
Открываем приложение Scriptable
Создаём новый скрипт, нажимая на кнопку «+» вверху экрана
Вставляем 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.
Открываем приложение Scriptable
Создаём новый скрипт, нажимая на кнопку «+» вверху экрана
Вставляем 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 или как отдельное приложение на экране «Домой».
Открываем приложение Команды (Shortcuts)
Создаём новую команду, нажав на кнопку «+» вверху экрана
В строке поиска пишем «Запросить входные данные». В появившемся блоке выбираем «Текст» и сообщение, с которым будет выводиться окно (например, «Что вы хотите спросить у YandexGPT?»).
В строке поиска пишем «Run Script» (имеет иконку приложения Scriptable). В появившемся блоке выбираем «YandexGPT».
В строке поиска пишем «Показать результат». В появившемся блоке автоматически должно подставиться «Output» приложения Scriptable.
После этого возвращаемся в меню, долгим нажатием по команде открываем меню и переименовываем команду в «Спроси у Яндекса» или любое другое название.
Чтобы добавить ярлык команды «Спроси у Яндекса» на экран «Домой»:
Долгим нажатием по команде открываем меню
Нажимаем «Поделиться»
Нажимаем «На экран Домой»
Варианты пользования
Голосовое управление
При активации команды через Siri, возможен голосовой ввод запроса. Полученный ответ от чат-бота будет озвучен с помощью Siri.
Текстовое управление
При активации команды через ярлык, будет выводиться текстовое поле, в котором можно ввести запрос. Полученный ответ чат-бота не будет озвучен.
Ограничения
Скрипт можно реализовать и без Scriptable, это заметно сложнее.
В процессе работы с Shortcuts я столкнулся с ограничением: при использовании типа данных «число» допускается только целочисленный формат (int), тогда как вещественные значения — такие как float или double — не поддерживаются.
Это создало трудности при попытке задать параметры с дробными значениями, например, temperature
.
На Reddit предлагали обходной путь: разбивать число на две переменные (целую и дробную часть), а затем объединять их через точку или запятую. Однако и такой подход не всегда срабатывает: у некоторых пользователей дробные значения автоматически округляются — причём не всегда предсказуемо, то вверх, то вниз. Причины такого поведения остаются неясными.