Отправить асинхронный запрос
Запросы к моделям YandexGPT API можно отправлять в асинхронном режиме. В ответ на асинхронный запрос модель вернет объект Operation, содержащий идентификатор операции, по которому можно отследить ее выполнение и получить результат после того, как генерация завершится. Этот режим подходит, если ваши задачи не требуют срочного ответа, поскольку асинхронные запросы выполняются дольше, чем синхронные.
Перед началом работы
Чтобы воспользоваться примерами запросов с использованием SDK:
-
Создайте сервисный аккаунт и назначьте ему роль
ai.languageModels.user
. -
Получите и сохраните API-ключ сервисного аккаунта.
В примерах используется аутентификация с помощью API-ключа. Yandex Cloud ML SDK также поддерживает аутентификацию с помощью IAM-токена и OAuth-токена. Подробнее см. в разделе Аутентификация в Yandex Cloud ML SDK.
-
С помощью менеджера пакетов pip
установите библиотеку ML SDK:pip install yandex-cloud-ml-sdk
Получите данные для аутентификации в API, как описано в разделе Аутентификация в API Yandex Foundation Models.
Чтобы воспользоваться примерами, установите cURL
Отправьте запрос к модели
При использовании Yandex Cloud ML SDK ваш код может дождаться завершения выполнения операции и получения ответа. Для этого можно использовать либо функцию sleep
модуля time
, либо метод wait
. В приведенном примере последовательно используются оба эти способа.
-
Создайте файл
generate-deferred.py
и добавьте в него следующий код:#!/usr/bin/env python3 from __future__ import annotations import time from yandex_cloud_ml_sdk import YCloudML messages_1 = [ { "role": "system", "text": "Найди ошибки в тексте и исправь их", }, { "role": "user", "text": """Ламинат подойдет для укладке на кухне или в детской комнате – он не боиться влаги и механических повреждений благодаря защитному слою из облицованных меламиновых пленок толщиной 0,2 мм и обработанным воском замкам.""", }, ] messages_2 = [ {"role": "system", "text": "Найди ошибки в тексте и исправь их"}, {"role": "user", "text": "Ашипки саме сибя ни исрпвят."}, ] def main(): sdk = YCloudML( folder_id="<идентификатор_каталога>", auth="<API-ключ>", ) model = sdk.models.completions("yandexgpt") # Variant 1: wait for the operation to complete using 5-second sleep periods print("Variant 1:") operation = model.configure(temperature=0.5).run_deferred(messages_1) status = operation.get_status() while status.is_running: time.sleep(5) status = operation.get_status() result = operation.get_result() print(result) # Variant 2: wait for the operation to complete using the wait method print("Variant 2:") operation = model.run_deferred(messages_2) result = operation.wait() print(result) if __name__ == "__main__": main()
Где:
Примечание
В качестве входных данных для запроса Yandex Cloud ML SDK может принимать строку, словарь, объект класса
TextMessage
или массив, содержащий любое сочетание указанных типов данных. Подробнее см. в разделе Использование Yandex Cloud ML SDK.-
messages_1
иmessages_2
— массивы сообщений, которые задают контекст для модели и используются для разных способов получения результата выполнения асинхронного запроса:-
role
— роль отправителя сообщения:user
— предназначена для отправки пользовательских сообщений к модели.system
— позволяет задать контекст запроса и определить поведение модели.assistant
— используется для ответов, которые генерирует модель. При работе в режиме чата ответы модели, помеченные рольюassistant
, включаются в состав сообщения для сохранения контекста беседы. Не передавайте сообщения пользователя с этой ролью.
-
-
text
— текстовое содержимое сообщения.
-
<идентификатор_каталога>
— идентификатор каталога, в котором создан сервисный аккаунт. -
<API-ключ>
— API-ключ сервисного аккаунта, полученный ранее и необходимый для аутентификации в API.В примерах используется аутентификация с помощью API-ключа. Yandex Cloud ML SDK также поддерживает аутентификацию с помощью IAM-токена и OAuth-токена. Подробнее см. в разделе Аутентификация в Yandex Cloud ML SDK.
-
-
Выполните созданный файл:
python3 generate-deferred.py
Результат выполнения:
Variant 1: GPTModelResult(alternatives=(Alternative(role='assistant', text='Ламинат подойдёт для укладки на кухне или в детской комнате – он не боится влаги и механических повреждений благодаря защитному слою из облицованных меламиновых плёнок толщиной 0,2 мм и обработанным воском замкам.', status=<AlternativeStatus.FINAL: 3>),), usage=Usage(input_text_tokens=74, completion_tokens=46, total_tokens=120), model_version='23.10.2024') Variant 2: GPTModelResult(alternatives=(Alternative(role='assistant', text='Ошибки сами себя не исправят.\n\nАшипки → ошибки.', status=<AlternativeStatus.FINAL: 3>),), usage=Usage(input_text_tokens=32, completion_tokens=16, total_tokens=48), model_version='23.10.2024')
Код дожидается получения результата сначала для первого способа, затем — для второго.
Чтобы воспользоваться примерами, установите cURL
Пример ниже разработан для выполнения в операционных системах MacOS и Linux. Чтобы выполнить его в системе Windows, ознакомьтесь с особенностями работы с Bash в Microsoft Windows.
-
Создайте файл с телом запроса (например,
body.json
):{ "modelUri": "gpt://<идентификатор_каталога>/yandexgpt-lite", "completionOptions": { "stream": false, "temperature": 0.1, "maxTokens": "2000" }, "messages": [ { "role": "system", "text": "Переведи текст" }, { "role": "user", "text": "To be, or not to be: that is the question." } ] }
-
modelUri
— идентификатор модели, которая будет использоваться для генерации ответа. Параметр содержит идентификатор каталога Yandex Cloud или идентификатор дообученной модели. -
completionOptions
— параметры конфигурации запроса:stream
— включает потоковую передачу частично сгенерированного текста. Принимает значенияtrue
илиfalse
.temperature
— чем выше значение этого параметра, тем более креативными и случайными будут ответы модели. Принимает значения от0
(включительно) до1
(включительно). Значение по умолчанию:0.3
.maxTokens
— устанавливает ограничение на выход модели в токенах. Максимальное число токенов генерации зависит от модели. Подробнее см. в разделе Квоты и лимиты в Yandex Foundation Models.
-
messages
— массив сообщений, которые задают контекст для модели:-
role
— роль отправителя сообщения:user
— предназначена для отправки пользовательских сообщений к модели.system
— позволяет задать контекст запроса и определить поведение модели.assistant
— используется для ответов, которые генерирует модель. При работе в режиме чата ответы модели, помеченные рольюassistant
, включаются в состав сообщения для сохранения контекста беседы. Не передавайте сообщения пользователя с этой ролью.
-
text
— текстовое содержимое сообщения.
-
-
-
Отправьте запрос к модели, выполнив команду:
export FOLDER_ID=<идентификатор_каталога> export IAM_TOKEN=<IAM-токен> curl \ --request POST \ --header "Content-Type: application/json" \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --header "x-folder-id: ${FOLDER_ID}" \ --data "@<путь_до_файла_json>" \ "https://llm.api.cloud.yandex.net/foundationModels/v1/completionAsync"
Где:
FOLDER_ID
— идентификатор каталога, на который у вашего аккаунта есть рольai.languageModels.user
или выше.IAM_TOKEN
— IAM-токен, полученный перед началом работы.
В ответе сервис вернет объект Operation:
{ "id": "d7qi6shlbvo5********", "description": "Async GPT Completion", "createdAt": "2023-11-30T18:31:32Z", "createdBy": "aje2stn6id9k********", "modifiedAt": "2023-11-30T18:31:33Z", "done": false, "metadata": null }
Сохраните идентификатор (
id
) операции, полученный в ответе. -
Отправьте запрос на получение результата операции:
curl \ --request GET \ --header "Authorization: Bearer ${IAM_TOKEN}" \ https://operation.api.cloud.yandex.net/operations/<ID_операции>
Пример результата:
{ "done": true, "response": { "@type": "type.googleapis.com/yandex.cloud.ai.foundation_models.v1.CompletionResponse", "alternatives": [ { "message": { "role": "assistant", "text": "Быть или не быть: вот в чём вопрос." }, "status": "ALTERNATIVE_STATUS_FINAL" } ], "usage": { "inputTextTokens": "31", "completionTokens": "10", "totalTokens": "41" }, "modelVersion": "18.01.2024" }, "id": "d7qo21o5fj1u********", "description": "Async GPT Completion", "createdAt": "2024-05-12T18:46:54Z", "createdBy": "ajes08feato8********", "modifiedAt": "2024-05-12T18:46:55Z" }
См. также
- Обзор возможностей генерации текста
- Примеры работы с ML SDK на GitHub