API Yandex GPT для Python, Excel, Power BI и Google Sheets

API Yandex GPT для Python, Excel, Power BI и Google Sheets

В эпоху ChatGPT хочется попробовать разные LLM, чтобы понять какие из них больше подходят под наши задачи. Сегодня речь пойдёт про Yandex GPT - одну из двух главных российских нейросетей на основе GPT. Мы разберём именно её API, так как нас в первую очередь интересуют моменты, связанные с автоматизацией.

Активируем доступ к Yandex Cloud 

Как и в ChatGPT, API Yandex GPT стоит денег и эти деньги должны откуда-то списываться. Для этого у Яндекса есть Yandex Cloud с его платёжным профилем и множеством интересных продуктов, которые можно тестировать.

Переходим в https://console.cloud.yandex.ru/ - если вы еще не пользовались Yandex Cloud, то его сначала нужно активировать. После активации Cloud создаст дефолтную папку и вы увидите следующее окно:

Для тестирования различных продуктов вам предлагают 4000 рублей и 60 дней, что довольно удобно. Поэтому создаём аккаунт и соглашаемся на получение гранта.

Когда платёжный аккаунт создан, возвращаемся в папки https://console.cloud.yandex.ru/folders/. Вам потребуется Folder ID - он будет как в URL, так и справа от названия папки "default" (на картинке выше он замазан). 

Следующий шаг - получение токена для доступа к вашему Yandex GPT. Перейдите по ссылке и сохраните полученный токен. Токен и ID папки Yandex Cloud потребуются нам далее.

Модели и способы работы с ними

Вы можете общаться с API Yandex GPT двумя способами - обычным и асинхронным. В случае обычного (синхронного) способа вы почти сразу получаете ответ модели. В случае  же асинхронного - получаете ID операции, по которому можете уточнить ответ модели позже. 

Стандартный синхронный способ выглядит проще, поэтому я выбрал его. Но основная модель YandexGPT в настоящий момент может работать только асинхронно, поэтому я взаимодействую с Yandex GPT Lite. Какие же отличия у модели Lite? Вот что говорит сам Яндекс:

YandexGPT API предоставляет доступ к двум большим текстовым генеративным нейросетям: стандартной YandexGPT Lite, подходящей для решения задач в режиме реального времени, и большой YandexGPT, которая дает более точные ответы на сложные запросы.

Действительно, YandexGPT Lite - очень быстрая модель, хорошо подходящая для ответов в реальном времени. По ощущениям она даже быстрее ChatGPT. Еще один плюс - YandexGPT Lite можно дообучать, добавляя туда дополнительные знания по вашей теме. 

Ниже я поясню как получать данные от основной модели YandexGPT асинхронно. Но во всех решениях, описанных здесь, используется модель YandexGPT Lite - именно на ней я решил остановиться.

Параметры функций на Python, Power Query и JS

Чтобы три раза не описывать доступные параметры функции - опишу их в этом разделе. Всего мы можем задать 7 разных значений:

  1. folder - это ID папки на Yandex Cloud, в рамках которой вы общаетесь с моделью;
  2. token - полученный токен к вашему аккаунту на Яндексе;
  3. prompt - основной промпт;
  4. temperature - уровень творчества модели от 0 до 1 где 0 это максимально сухо, а 1 - это максимум творчества;
  5. system_prompt - системный промпт, где можно указывать стилистику ответа и другие пожелания не загружая основной промпт;
  6. max_tokens - ограничение расхода токенов (если кто-то захочет ограничить модель в использовании токенов);
  7. model - выбор своей модели: если вы используете дообученную модель, укажите "ds://<идентификатор_дообученной_модели>".

Параметры folder и token относятся к аккаунту Яндекса, в котором вы работаете. Промпт и температура - обязательные параметры запроса к модели. Остальные параметры - необязательные. 

Анонсы всех видео, статей и полезностей - в нашем Telegram-канале🔥
Присоединяйтесь, обсуждайте и автоматизируйте!

Работа с API Yandex GPT Lite на Python

Чтобы вам было проще, мы добавили пакет pip для python под названием yandexgptlite. Вы можете воспользоваться им, это бесплатно:

Шаг 1: Устанавливаем пакет pip: 

pip install yandexgptlite

Шаг 2: Импортируем класс из пакета: 

from yandexgptlite import YandexGPTLite

Шаг 3: Подключаемся к Yandex GPT, создавая экземпляр класса (требуется указать ID папки Yandex Cloud и полученный ранее токен):

account = YandexGPTLite('b1g2k730lqhu8pc02a', 'y0_AgAAAAMf8GzATuwQAAAD15w-py1O8Ucn-RN6bl9W8hwdkX7vuE' )

Шаг 4: Вызываем функцию обращения к GPT для нашего аккаунта (температура от 0 до 1, где единица - максимум творчества):

text = account.create_completion('скажи мне что-нибудь хорошее', '0.6', system_prompt = 'отвечай на английском')
print(text) #Sounds good!

Как вы увидели, необязательные параметры create_completions можно указывать, прописывая их названия + значения. 

Теперь вы с минимальными усилиями можете подключаться к YandexGPT Lite и писать программы с использованием этой модели на Python.

API Yandex GPT на Power Query

Коннектор для Excel и Power BI к Yandex GPT вы можете найти на Boosty, он доступен по подписке ПРО. 

Скачайте файл с кодом и перейдите на вкладку "Данные" вашего Excel-файла. Далее нажмите "получить данные" и создайте пустой запрос:

Когда запрос создан, нажмите на "Расширенный редактор" и вместо кода пустого запроса вставьте предоставленный код функции:

Переименуйте Запрос1 в yandexgptlite - это будет ваша функция, которую вы будете вызывать для получения ответов:

Можно вызывать эту функцию массово - в рамках таблицы или списка, а результаты выгружать на лист Excel. Ту же самую функцию можно использовать и в рамках Power BI. 

Напоминаю, что дообученные модели тоже можно использовать, так что модель, которая вместо вас будет отвечать на вопросы по работе прямо в Excel - уже не фантастика 🙀

Script для Yandex GPT в Google Sheets

Коннектор для Google Sheets вы также можете найти на Boosty, он доступен по подписке ПРО. 

Откройте Google Sheets, перейдите в Расширения и выберите "App Script":

В открывшееся окно вставляем код функции. Для простоты вызова я вынес folder и token в переменные, поэтому их нужно заполнить вручную (замазанные значения на скрине ниже). После чего жмём на иконку сохранения:

Теперь вы можете вызывать функцию из Google таблицы 🍺 Напомню, что параметры при вызове функции разделяются точкой с запятой, а если хотите пропустить какой-то из необязательных параметров - можно ставить значение undefined. Третий параметр необязательный, но протестирую с ним:

Схема работы и примеры функций 

Расскажу ключевые моменты на случай если вы захотите самостоятельно реализовать подключение. 

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

def generate_iamtoken(token):
    token_url = "https://iam.api.cloud.yandex.net/iam/v1/tokens"
    token_data = {"yandexPassportOauthToken": token}
    token_response = requests.post(token_url, 
    data=json.dumps(token_data))
    iamToken = token_response.json()['iamToken']
    return iamToken

Для основных запросов есть 2 ссылки: первая - для синхронных, а вторая - для асинхронных обращений:

https://llm.api.cloud.yandex.net/foundationModels/v1/completion
https://llm.api.cloud.yandex.net/foundationModels/v1/completionAsync

Общий лимит токенов на 1 запрос в моделях Яндекса - 8000 токенов. Чтобы точно не ограничить модель в творчестве - ставлю больше. 

В заголовках передаём полученный iamToken и ID каталога Yandex Cloud, а в теле запроса - все остальные параметры:   

def create_completion(prompt, temperature, iamtoken, folder):
    headers={"Authorization" : "Bearer " + iamtoken, 
    "x-folder-id" : folder }
    body = {"modelUri": f"gpt://{folder}/yandexgpt-lite/latest",  
    "completionOptions":{"stream": False,    
    "temperature": str(temperature), "maxTokens": "100000"},
    "messages": [{"role": "user", "text": prompt}]}
    jsondata = json.dumps(body, ensure_ascii=False).encode("utf8")
    web = requests.post("https://llm.api.cloud.yandex.net/" + 
    "foundationModels/v1/completion", headers = headers,data = jsondata)
    result = web.json()
    return result

Если заменить модель с "gpt://{folder}/yandexgpt-lite/latest" на "ds://<идентификатор_дообученной_модели>", то можно обращаться к своей модели, дополненной знаниями через Yandex Cloud.

Если вы отправляли запрос асинхронно, то скорее всего вам будет возвращён ID операции, а не результат. Для получения результата требуется отдельная функция с обращением по ID операции:

def get_operation(operation_id, iamtoken):
    headers={"Authorization" : "Bearer " + iamtoken}
    web = requests.get("https://llm.api.cloud.yandex.net/operations/" + 
    operation_id, headers = headers)
    result = web.json()
    return result

Выше я привожу примеры простых функций без доп. параметров. Если вам интересна реализация нашего пакета yandexgptlite с доп. параметрами, рекомендуем изучить его репозиторий на Github.

Заключение

Сейчас LLM - одна из самых интересных и быстроразвивающихся сфер. Конечно, нам всем хочется подключаться к ChatGPT как к самой продвинутой системе. Но необходимость VPN или прокси для пользователей из России, а также сложный процесс регистрации и оплаты продуктов OpenAI создают массу трудностей. 

Думаю, что российские LLM будут также быстро развиваться и не отстанут от ChatGPT. Но в них проще регистрироваться, легче платить и можно без опасений строить на них свои продукты в России. Поэтому так важно осваивать их на раннем этапе пока этого не сделали ваши конкуренты. Подписывайтесь на Boosty и осваивайте новые инструменты вместе с нами!

Комментарии