Использовать классификаторы по промпту на базе YandexGPT
Сервис Yandex AI Studio предоставляет классификаторы по промпту на базе YandexGPT двух видов: Zero-shot и Few-shot. Чтобы направить запрос к классификатору по промпту, используйте метод fewShotClassify Text Classification API или Yandex Cloud ML SDK.
Перед началом работы
Чтобы воспользоваться примерами:
- Создайте сервисный аккаунт и назначьте ему роль
ai.languageModels.user. -
Получите и сохраните API-ключ сервисного аккаунта, указав для него область действия
yc.ai.foundationModels.execute.В примерах используется аутентификация с помощью API-ключа. Yandex Cloud ML SDK также поддерживает аутентификацию с помощью IAM-токена и OAuth-токена. Подробнее см. в разделе Аутентификация в Yandex Cloud ML SDK.
Примечание
Если вы используете ОС Windows
, рекомендуем предварительно установить оболочку WSL и выполнять дальнейшие действия в этой оболочке. -
Установите Python версии 3.10
или выше. -
Установите библиотеку Python venv
для создания изолированных виртуальных окружений в Python. -
Создайте и войдите в новое виртуальное окружение Python:
python3 -m venv new-env source new-env/bin/activate -
С помощью менеджера пакетов pip
установите библиотеку ML SDK:pip install yandex-cloud-ml-sdk
-
Получите данные для аутентификации в API, как описано в разделе Аутентификация в API Yandex AI Studio.
-
Чтобы воспользоваться примерами, установите 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