Использовать классификаторы по промту на базе YandexGPT
Сервис Yandex AI Studio предоставляет классификаторы по промту на базе 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. Примечание Если вы используйте ОС Windows - 
Установите Python версии 3.10 - 
Установите библиотеку Python venv - 
Создайте и войдите в новое виртуальное окружение Python: python3 -m venv new-env source new-env/bin/activate
- 
С помощью менеджера пакетов pip 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