Использовать классификаторы по промту на базе YandexGPT
Сервис Yandex Foundation Models предоставляет классификаторы по промту на базе YandexGPT двух видов: Zero-shot и Few-shot. Чтобы направить запрос к классификатору по промту, используйте метод fewShotClassify Text Classification API или Yandex Cloud ML 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
.
Отправьте запрос к классификатору
В данный код входят два независимые друг от друга примера, иллюстрирующие различные варианты использования интерфейса SDK:
-
Создайте файл
classify.py
и добавьте в него следующий код:#!/usr/bin/env python3 # pylint: disable=duplicate-code from __future__ import annotations from yandex_cloud_ml_sdk import YCloudML request_text = 'переведи на английский "какая погода в лондоне?"' def main(): sdk = YCloudML( folder_id="<идентификатор_каталога>", auth="<API-ключ>", ) # Sample 1: Zero-shot classification model = sdk.models.text_classifiers("yandexgpt").configure( task_description="определи тип интента", labels=["перевод", "будильник", "погода"], ) result = model.run(request_text) print("Zero-shot classification:") for prediction in result: print(prediction) # Sample 2: Few-shot classification model = model.configure( task_description="определи тип интента", labels=["перевод", "будильник", "погода"], samples=[ {"text": "поставь будильник", "label": "будильник"}, {"text": "погода на завтра", "label": "погода"}, {"text": 'переведи фразу "поставь будильник"', "label": "перевод"}, ], ) result = model.run(request_text) print("Few-shot classification:") for prediction in result: print(prediction) if __name__ == "__main__": main()
Где:
-
request_text
— текстовое содержимое сообщения.В качестве входных данных для запроса Yandex Cloud ML SDK может принимать строку, словарь, объект класса
TextMessage
или массив, содержащий любое сочетание указанных типов данных. Подробнее см. в разделе Использование Yandex Cloud ML SDK.
-
<идентификатор_каталога>
— идентификатор каталога, в котором создан сервисный аккаунт. -
<API-ключ>
— API-ключ сервисного аккаунта, полученный ранее и необходимый для аутентификации в API.В примерах используется аутентификация с помощью API-ключа. Yandex Cloud ML SDK также поддерживает аутентификацию с помощью IAM-токена и OAuth-токена. Подробнее см. в разделе Аутентификация в Yandex Cloud ML SDK.
Подробнее о том, как обращаться к моделям классификаторов, см. в разделе Обращение к моделям.
-
-
Выполните созданный файл:
python3 classify.py
В ответе сервис вернет результаты классификации для обоих примеров с определенными значениями вероятности (
confidence
) отнесения текста запроса к каждому из классов:TextClassificationLabel(label='перевод', confidence=0.9999947046656092) TextClassificationLabel(label='будильник', confidence=6.01089130732152e-09) TextClassificationLabel(label='погода', confidence=4.289328794822987e-06) Few-shot classification: TextClassificationLabel(label='перевод', confidence=0.9999989886405171) TextClassificationLabel(label='будильник', confidence=4.4148929001561725e-09) TextClassificationLabel(label='погода', confidence=6.945601458737463e-09)
Пример ниже разработан для выполнения в операционных системах MacOS и Linux. Чтобы выполнить его в системе Windows, ознакомьтесь с особенностями работы с Bash в Microsoft Windows.
-
Создайте файл с телом запроса (например,
body.json
):Классификатор Zero-shot
{ "modelUri": "cls://<идентификатор_каталога>/yandexgpt/latest", "text": "5:0", "task_description": "Определи категорию статьи по ее заголовку", "labels": [ "культура", "технологии", "спорт" ] }
Где:
-
modelUri
— идентификатор модели, которая будет использоваться для классификации сообщения. Параметр содержит идентификатор каталога Yandex Cloud. -
text
— текстовое содержимое сообщения. -
taskDescription
— текстовое описание задания для классификатора. -
labels
— массив классов.Задавайте осмысленные названия для классов
labels
: это обязательное условие получения корректных результатов классификации. Например: вместо классовхм
ифз
используйте классыхимия
ифизика
.
Классификатор Few-shot
{ "modelUri": "cls://<идентификатор_каталога>/yandexgpt/latest", "text": "переведи на английский \"какая погода в лондоне?\"", "task_description": "определи тип интента", "labels": [ "перевод", "будильник", "погода" ], "samples": [ { "text": "поставь будильник", "label": "будильник" }, { "text": "погода на завтра", "label": "погода" }, { "text": "переведи фразу \"поставь будильник\"", "label": "перевод" } ] }
Где:
-
modelUri
— идентификатор модели, которая будет использоваться для классификации сообщения. Параметр содержит идентификатор каталога Yandex Cloud. -
text
— текстовое содержимое сообщения. -
taskDescription
— текстовое описание задания для классификатора. -
labels
— массив классов.Задавайте осмысленные названия для классов
labels
: это обязательное условие получения корректных результатов классификации. Например: вместо классовхм
ифз
используйте классыхимия
ифизика
. -
samples
— массив с примерами запросов для классов, заданных в полеlabels
. Примеры запросов передаются в виде объектов, каждый из которых содержит один образец текстового запроса и класс, к которому такой запрос следует относить.
-
-
Отправьте запрос к классификатору, выполнив команду:
export IAM_TOKEN=<IAM-токен> curl \ --request POST \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --data "@<путь_к_файлу_с_телом_запроса>" \ "https://llm.api.cloud.yandex.net/foundationModels/v1/fewShotTextClassification"
Примечание
Эндпоинт
https://llm.api.cloud.yandex.net/foundationModels/v1/fewShotTextClassification
работает только с классификаторами по промту. Для дообученных классификаторов используйтеhttps://llm.api.cloud.yandex.net:443/foundationModels/v1/textClassification
.В ответе сервис вернет результаты классификации с определенными значениями вероятности (
confidence
) отнесения текста запроса к каждому из классов:Классификатор Zero-shot
{ "predictions": [ { "label": "культура", "confidence": 2.2111835562554916e-7 }, { "label": "технологии", "confidence": 0.0003487042267806828 }, { "label": "спорт", "confidence": 0.9996510744094849 } ], "modelVersion": "07.03.2024" }
Классификатор Few-shot
{ "predictions": [ { "label": "перевод", "confidence": 0.9357050657272339 }, { "label": "будильник", "confidence": 0.00061939493753016 }, { "label": "погода", "confidence": 0.06367553025484085 } ], "modelVersion": "07.03.2024" }
Сумма значений полей вероятности (confidence
) для всех классов всегда равна 1
.
См. также
- Классификаторы на базе YandexGPT
- Примеры работы с ML SDK на GitHub