6 декабря Яндекс открыл доступ к своим диалоговым моделям (моделям генерации) и векторного представления текста через API. API уже доступно в Yandex Cloud.
Вчера мне потребовалось применить его в приложении, однако не удалось найти руководства, как сделать это быстро. Документация Яндекса хороша, но предполагает, что опыт работы с Yandex Cloud уже имеется. В отсутствие такого опыта документация выглядит фрагментированной.
Предлагаю пошаговый гайд, который, надеюсь, сэкономит читателю, не знакомому с Yandex Cloud, часик-другой.
Для того, чтобы использовать Yandex GPT в Вашем Python-проекте, нужно выполнить 4 шага:
Создать Яндекс ID (например, зарегистрировавшися в Яндекс.Почте).
Подключить средство оплаты в Yandex Cloud и при необходимости пополнить баланс.
Получить ключ авторизации и идентификатор каталога.
Создать Python файл, реализующий взаимодействие с API.
Создаём Яндекс ID
Регистрироваться удобно по номеру телефона. Процесс не должен вызывать затруднений: просто перейдите по ссылке и следуйте инструкциям системы до получения аккаунта.
Подключаем средство оплаты и пополняем баланс
Yandex GPT API - платный сервис Yandex Cloud. Ознакомиться с тарифами можно здесь.
Для получения доступа перейдите в консоль. Система предложит создать облако, выбрав (или создав) организацию и подтвердив название облака. Создаём.
Оказавшись в консоли, Вы увидите структуру каталогов слева. А еще левее - кнопку вызова меню "Все сервисы", по нажатии на которую открывается список сервисов. Выберите Yandex Cloud Billing.
В консоли Yandex Cloud Billing нажмите "Создать". Процесс создания аккаунта прост, но потребует привязки пластиковой карты. При привязке карты VPN лучше отключить.
После нажатия кнопки "Создать" в зависимости о того, создавали ли Вы ранее платежные аккаунты, система либо предоставит аккаунт пополненный стартовым грантом, либо предоставит пустой аккаунт. В этом случае нужно воспользоваться кнопкой "Пополнить баланс" справа. Минимальная сумма пополнения на сегодняшний день 500 рублей.
Получаем ключ авторизации
Самым простым способом авторизации мне показалась авторизации по API ключу. Для его получения необходимо создать сервисный аккаунт.
Для этого:
Вернитесь на главную страницу консоли через меню слева.
Создайте сервисный аккаунт через меню папки default.
При создании сервисного аккаунта назначьте роль "ai.languageModels.user".
В результате Вы попадёте на страницу каталога default, но, если этого не произошло, просто выберите default в дереве каталогов слева.
Сразу скопируйте идентификатор каталога из строки навигации сверху. Он понадобится при написании скрипта наряду с API-ключом, который мы получим далее.
Ниже на странице каталога default выберите вкладку "Сервисные аккаунты", а там кликните на вновь созданный аккаунт, в моём случае default-service.
В меню навигации справа вверху страницы нажмите "+ Создать новый ключ". В открывшемся меню выберите "Создать API-ключ".
Откроется окно создания ключа. Описание может быть любым, но после генерации не закрывайте окно с ключом: его нужно скопировать и сохранить вместе со скопированным ранее идентификатором каталога. Если поспешите закрыть окно, ключ придётся пересоздать.
Подготовка завершена.
Создаём пример на Python
Я исхожу из того, что Pythonи среда разработки уже установлены. Но если их нет, их можно скачать по ссылке и установить.
Создайте файл yandexGPTdemo.py следующего содержания:
import requests
prompt = {
"modelUri": "gpt://<ВАШ_ИДЕНТИФИКАТОР_КАТАЛОГА>/yandexgpt-lite",
"completionOptions": {
"stream": False,
"temperature": 0.6,
"maxTokens": "2000"
},
"messages": [
{
"role": "system",
"text": "Ты ассистент дроид, способный помочь в галактических приключениях."
},
{
"role": "user",
"text": "Привет, Дроид! Мне нужна твоя помощь, чтобы узнать больше о Силе. Как я могу научиться ее использовать?"
},
{
"role": "assistant",
"text": "Привет! Чтобы овладеть Силой, тебе нужно понять ее природу. Сила находится вокруг нас и соединяет всю галактику. Начнем с основ медитации."
},
{
"role": "user",
"text": "Хорошо, а как насчет строения светового меча? Это важная часть тренировки джедая. Как мне создать его?"
}
]
}
url = "https://llm.api.cloud.yandex.net/foundationModels/v1/completion"
headers = {
"Content-Type": "application/json",
"Authorization": "Api-Key <ВАШ_API_КЛЮЧ>"
}
response = requests.post(url, headers=headers, json=prompt)
result = response.text
print(result)
В файле следует сделать две замены: <ВАШ_ИДЕНТИФИКАТОР_КАТАЛОГА> нужно заменить на скопированный ранее идентификатор каталога, а <ВАШ_API_КЛЮЧ> на сгенерированный ранее API-ключ.
Для его выполнения потребуется установить модуль requests. Для этого в командной строке нужно выполнить pip install requests.
Обратите внимание на переменную prompt. Она содержит диалог трёх участников: system, user и assistant. Это общий принцип для GPT моделей, аналогичную структуру имеют запросы к GPT моделям от OpenAI, или, например, к LLaMa 2. System определяет контекст диалога, user - это Вы, а assistant - модель. Суть работы API в продолжении этого диалога, в ответе на запрос поступит следующее сообщение, которое можно обработать, добавить к исходному промпту, дополнить следующим вопросом, и снова отправить модели для получения следующей интеграции диалога.
После этого файл можно запускать.
В ответ придёт что-то вроде:
{"result":{"alternatives":[{"message":{"role":"assistant","text":"Создание светового меча - это сложный процесс, требующий знания техники и ресурсов. Джедаи тренировались годами, чтобы овладеть этим искусством. Если ты хочешь создать световой меч, ты можешь попробовать найти его в магазинах или на аукционах, но учти, что это может быть очень дорого."},"status":"ALTERNATIVE_STATUS_FINAL"}],"usage":{"inputTextTokens":"108","completionTokens":"58","totalTokens":"166"},"modelVersion":"08.12.2023"}}
Хочется отметить, что в примере использована модель yandexgpt-lite. Доступна также и полная yandexgpt, однако обращение к ней в синхронном режиме невозможно из-за правил квотирования. Для обращения к полной yandexgpt следует переписать файл, используя другой тип обращения (completionAsync вместо completion) и добавить функцию опроса сервера на предмет готовности ответа, как приведено в документации по ссылке.