Введение
В данной статье я расскажу как добавить 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 предлагали обходной путь: разбивать число на две переменные (целую и дробную часть), а затем объединять их через точку или запятую. Однако и такой подход не всегда срабатывает: у некоторых пользователей дробные значения автоматически округляются — причём не всегда предсказуемо, то вверх, то вниз. Причины такого поведения остаются неясными.
ссылка на оригинал статьи https://habr.com/ru/articles/932884/
Добавить комментарий