Использовать дообученные классификаторы на базе YandexGPT

Чтобы выполнить запрос к любому типу дообученных классификаторов, используйте метод classify Text Classification API или Yandex AI Studio SDK.

Чтобы воспользоваться примером, вам понадобится сервисный аккаунт с ролью ai.languageModels.user и API-ключ с областью действия yc.ai.foundationModels.execute. API-ключ, который вы можете создать в AI Studio, имеет такие разрешения. Пример того, как настроить рабочее окружение, можно найти в разделе Начало работы.

Отправьте запрос к классификатору

import os
        import requests
        
        YANDEX_API_KEY = os.environ["YANDEX_API_KEY"]
        YANDEX_FOLDER_ID = os.environ["YANDEX_FOLDER_ID"]
        YANDEX_TUNING_SUFFIX = os.environ["YANDEX_TUNING_SUFFIX"]
        
        headers = {
            "Authorization": f"Api-Key {YANDEX_API_KEY}",
            "Content-Type": "application/json",
        }
        
        body = {
            "modelUri": f"cls://{YANDEX_FOLDER_ID}/yandexgpt-lite/rc@{YANDEX_TUNING_SUFFIX}",
            "text": "<текст_запроса>",
        }
        
        response = requests.post(
            "https://ai.api.cloud.yandex.net:443/foundationModels/v1/textClassification",
            headers=headers,
            json=body,
        )
        print(response.json())
        

Где:

  • YANDEX_API_KEYAPI-ключ для работы в AI Studio.
  • YANDEX_FOLDER_IDидентификатор каталога сервисного аккаунта.
  • YANDEX_TUNING_SUFFIX — суффикс дообучения модели.
  • modelUriидентификатор модели, которая будет использоваться для классификации сообщения.
  • text — текстовое содержимое сообщения. Суммарное количество токенов на один запрос не должно превышать 8000.

Имена классов, по которым модель будет распределять запросы, должны быть заданы в процессе дообучения модели, поэтому не передаются в запросе.

Пример ответа:

{
          "predictions": [
            {
              "label": "<название_класса_1>",
              "confidence": 0.00010150671005249023
            },
            {
              "label": "<название_класса_2>",
              "confidence": 0.000008225440979003906
            },
            {
              "label": "<название_класса_n>",
              "confidence": 0.93212890625
            }
          ],
          "modelVersion": "<версия_модели>"
        }
        
const YANDEX_API_KEY = process.env.YANDEX_API_KEY;
        const YANDEX_FOLDER_ID = process.env.YANDEX_FOLDER_ID;
        const YANDEX_TUNING_SUFFIX = process.env.YANDEX_TUNING_SUFFIX;
        
        const headers = {
          Authorization: `Api-Key ${YANDEX_API_KEY}`,
          "Content-Type": "application/json",
        };
        
        const body = {
          modelUri: `cls://${YANDEX_FOLDER_ID}/yandexgpt-lite/rc@${YANDEX_TUNING_SUFFIX}`,
          text: "<текст_запроса>",
        };
        
        const response = await fetch(
          "https://ai.api.cloud.yandex.net:443/foundationModels/v1/textClassification",
          { method: "POST", headers, body: JSON.stringify(body) }
        );
        console.log(await response.json());
        

Где:

  • YANDEX_API_KEYAPI-ключ для работы в AI Studio.
  • YANDEX_FOLDER_IDидентификатор каталога сервисного аккаунта.
  • YANDEX_TUNING_SUFFIX — суффикс дообучения модели.
  • modelUriидентификатор модели, которая будет использоваться для классификации сообщения.
  • text — текстовое содержимое сообщения. Суммарное количество токенов на один запрос не должно превышать 8000.

Имена классов, по которым модель будет распределять запросы, должны быть заданы в процессе дообучения модели, поэтому не передаются в запросе.

Пример ответа:

{
          "predictions": [
            {
              "label": "<название_класса_1>",
              "confidence": 0.00010150671005249023
            },
            {
              "label": "<название_класса_2>",
              "confidence": 0.000008225440979003906
            },
            {
              "label": "<название_класса_n>",
              "confidence": 0.93212890625
            }
          ],
          "modelVersion": "<версия_модели>"
        }
        
package main
        
        import (
            "bytes"
            "encoding/json"
            "fmt"
            "io"
            "log"
            "net/http"
            "os"
        )
        
        var (
            YANDEX_API_KEY       = os.Getenv("YANDEX_API_KEY")
            YANDEX_FOLDER_ID     = os.Getenv("YANDEX_FOLDER_ID")
            YANDEX_TUNING_SUFFIX = os.Getenv("YANDEX_TUNING_SUFFIX")
        )
        
        func main() {
            modelUri := fmt.Sprintf("cls://%s/yandexgpt-lite/rc@%s", YANDEX_FOLDER_ID, YANDEX_TUNING_SUFFIX)
        
            body := map[string]string{
                "modelUri": modelUri,
                "text":     "<текст_запроса>",
            }
        
            data, _ := json.Marshal(body)
            req, _ := http.NewRequest("POST",
                "https://ai.api.cloud.yandex.net:443/foundationModels/v1/textClassification",
                bytes.NewReader(data))
            req.Header.Set("Authorization", "Api-Key "+YANDEX_API_KEY)
            req.Header.Set("Content-Type", "application/json")
        
            resp, err := http.DefaultClient.Do(req)
            if err != nil {
                log.Fatalf("Ошибка запроса: %v", err)
            }
            defer resp.Body.Close()
        
            result, _ := io.ReadAll(resp.Body)
            fmt.Println(string(result))
        }
        

Где:

  • YANDEX_API_KEYAPI-ключ для работы в AI Studio.
  • YANDEX_FOLDER_IDидентификатор каталога сервисного аккаунта.
  • YANDEX_TUNING_SUFFIX — суффикс дообучения модели.
  • modelUriидентификатор модели, которая будет использоваться для классификации сообщения.
  • text — текстовое содержимое сообщения. Суммарное количество токенов на один запрос не должно превышать 8000.

Имена классов, по которым модель будет распределять запросы, должны быть заданы в процессе дообучения модели, поэтому не передаются в запросе.

Пример ответа:

{
          "predictions": [
            {
              "label": "<название_класса_1>",
              "confidence": 0.00010150671005249023
            },
            {
              "label": "<название_класса_2>",
              "confidence": 0.000008225440979003906
            },
            {
              "label": "<название_класса_n>",
              "confidence": 0.93212890625
            }
          ],
          "modelVersion": "<версия_модели>"
        }
        

Пример ниже разработан для выполнения в операционных системах MacOS и Linux. Чтобы выполнить его в системе Windows, ознакомьтесь с особенностями работы с Bash в Microsoft Windows.

curl \
          --request POST \
          --header "Authorization: Api-Key <API-ключ>" \
          --header "Content-Type: application/json" \
          --data '{
            "modelUri": "cls://<URI_базовой_модели>/<версия>@<суффикс_дообучения>",
            "text": "<текст_запроса>"
          }' \
          "https://ai.api.cloud.yandex.net:443/foundationModels/v1/textClassification"
        

Где:

  • <API-ключ>API-ключ для работы в AI Studio.
  • modelUriидентификатор модели, которая будет использоваться для классификации сообщения.
  • text — текстовое содержимое сообщения. Суммарное количество токенов на один запрос не должно превышать 8000.

Имена классов, по которым модель будет распределять запросы, должны быть заданы в процессе дообучения модели, поэтому не передаются в запросе.

Примечание

Эндпоинт https://ai.api.cloud.yandex.net:443/foundationModels/v1/textClassification работает только с дообученными классификаторами. Для классификаторов по промпту используйте https://ai.api.cloud.yandex.net/foundationModels/v1/fewShotTextClassification.

Пример ответа:

{
          "predictions": [
            {
              "label": "<название_класса_1>",
              "confidence": 0.00010150671005249023
            },
            {
              "label": "<название_класса_2>",
              "confidence": 0.000008225440979003906
            },
            ...
            {
              "label": "<название_класса_n>",
              "confidence": 0.93212890625
            }
          ],
          "modelVersion": "<версия_модели>"
        }
        
#!/usr/bin/env python3
        
        from __future__ import annotations
        import os
        from yandex_ai_studio_sdk import AIStudio
        
        YANDEX_API_KEY = os.environ["YANDEX_API_KEY"]
        YANDEX_FOLDER_ID = os.environ["YANDEX_FOLDER_ID"]
        YANDEX_TUNING_SUFFIX = os.environ["YANDEX_TUNING_SUFFIX"]
        
        MODEL_URI = f"cls://{YANDEX_FOLDER_ID}/yandexgpt-lite/rc@{YANDEX_TUNING_SUFFIX}"
        request_text = "Vieta's formulas"
        
        
        def main():
            sdk = AIStudio(
                folder_id=YANDEX_FOLDER_ID,
                auth=YANDEX_API_KEY,
            )
        
            model = sdk.models.text_classifiers(MODEL_URI)
        
            # The result will contain predictions within predefined classes
            # and the most weighty prediction will be "mathematics": 0.92
            result = model.run(request_text)
        
            for prediction in result:
                print(prediction)
        
        
        if __name__ == "__main__":
            main()
        

Где:

  • request_text — текстовое содержимое сообщения. Суммарное количество токенов на один запрос не должно превышать 8000.

    В качестве входных данных для запроса Yandex AI Studio SDK может принимать строку, словарь, объект класса TextMessage или массив, содержащий любое сочетание указанных типов данных. Подробнее см. в разделе Использование Yandex AI Studio SDK.

Имена классов, по которым модель будет распределять запросы, должны быть заданы в процессе дообучения модели, поэтому не передаются в запросе.

Пример ответа:

TextClassificationLabel(label='еда', confidence=2.2830462853562494e-07)
        TextClassificationLabel(label='одежда', confidence=0.15913614630699158)
        TextClassificationLabel(label='спорт', confidence=0.07084071636199951)
        TextClassificationLabel(label='электроника', confidence=0.7700229287147522)
        

См. также