> ## Documentation Index
> Fetch the complete documentation index at: https://polza.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Jev: решения вместо текста

> Модель, которая не пишет ответы, а принимает решения — да или нет, выбор из вариантов, оценка по шкале — и возвращает вероятности

Jev (TypeSafe) — модель другого класса, чем чат-модели. Она **не генерирует текст**. Вы даёте ей текст и задаёте вопросы с заранее известными вариантами ответа, а она возвращает готовые значения: вероятность «да», выбранный вариант, оценку по шкале. Парсить ничего не нужно — ответ сразу ложится в `if`, сортировку или порог в вашем коде.

<CardGroup cols={2}>
  <Card title="Быстро" icon="bolt">
    Ответ приходит примерно за секунду, сколько бы вопросов вы ни задали: они обрабатываются параллельно
  </Card>

  <Card title="Дёшево" icon="coins">
    Тарифицируются только входные токены. Классифицировать обращение стоит доли копейки
  </Card>

  <Card title="Предсказуемо" icon="shield-check">
    Ответ всегда из ваших вариантов — модель не придумает значение, которого вы не предлагали
  </Card>

  <Card title="Честно про сомнения" icon="gauge">
    Вместе с ответом приходят вероятности: видно, когда модель уверена, а когда решение лучше отдать человеку
  </Card>
</CardGroup>

## Когда брать Jev, а когда чат-модель

| Задача                                                                                              | Что подойдёт                                             |
| --------------------------------------------------------------------------------------------------- | -------------------------------------------------------- |
| Определить тему, отдел, намерение, язык, тип документа                                              | **Jev**                                                  |
| Проверить, есть ли в тексте признак: срочность, жалоба, персональные данные, попытка взлома промпта | **Jev**                                                  |
| Оценить по шкале: критичность бага, раздражение клиента, релевантность документа запросу            | **Jev**                                                  |
| Выбрать, какой модели или обработчику отдать запрос                                                 | **Jev**                                                  |
| Написать ответ клиенту, пересказать, перевести, сгенерировать код                                   | Чат-модель ([Chat Completions](/docs/gaidy/chat-completions)) |
| Посчитать, сравнить даты, решить многошаговую задачу                                                | Обычный код или модель с рассуждениями                   |

Хорошее правило: Jev отвечает на вопросы, на которые знающий человек ответил бы **за пару секунд, взглянув на текст**. Если нужен анализ из нескольких шагов — разбейте его на простые вопросы и соберите результат в коде.

## Три типа вопросов

| Тип      | Вопрос                   | Что возвращает                                                                                   |
| -------- | ------------------------ | ------------------------------------------------------------------------------------------------ |
| `noul`   | Да или нет?              | `noul` — вероятность «да» от 0 до 1                                                              |
| `choice` | Какой вариант из списка? | `choice` — победивший вариант, `probabilities` — вероятность каждого, `confidence` — уверенность |
| `score`  | Где на шкале?            | `score` — положение на вашей шкале, `probabilities` по уровням, `confidence`                     |

В одном запросе типы можно смешивать. Подробно — в гайде [«Как задавать вопросы»](/docs/gaidy/jev-questions).

## Первый запрос

<Steps>
  <Step title="Получите API-ключ">
    Ключ Polza.AI создаётся в [личном кабинете](https://polza.ai/dashboard/api-keys). Отдельный аккаунт TypeSafe не нужен.
  </Step>

  <Step title="Отправьте текст и вопросы">
    В `state` — текст, который нужно оценить. В `questions` — ваши вопросы: имя вопроса придумываете сами, под ним же придёт ответ.

    <CodeGroup>
      ```bash cURL theme={null}
      curl -X POST "https://polza.ai/api/v1/systemone" \
        -H "Authorization: Bearer $POLZA_AI_API_KEY" \
        -H "Content-Type: application/json" \
        -d '{
          "model": "typesafe/jev",
          "state": "Здравствуйте! Третий день не могу подключить оплату на сайте — платежи клиентов не проходят, мы теряем заказы. Помогите, пожалуйста, срочно.",
          "questions": {
            "is_urgent": {
              "type": "noul",
              "instructions": "Клиент сообщает о срочной проблеме?"
            },
            "department": {
              "type": "choice",
              "instructions": "Какая команда должна заняться обращением?",
              "criteria": {
                "billing": "Платежи, счета, возвраты, подписки",
                "technical": "Ошибки, сбои, интеграции, настройка",
                "sales": "Тарифы, покупка, вопросы до оплаты"
              }
            },
            "frustration": {
              "type": "score",
              "instructions": "Насколько раздражён клиент?",
              "criteria": [
                "Спокоен, просто описывает ситуацию",
                "Раздражён, но вежлив",
                "Очень зол, резкие выражения"
              ]
            }
          }
        }'
      ```

      ```typescript TypeScript theme={null}
      // npm install @typesafe-ai/sdk
      import { TypeSafeClient, choice, noul, score } from '@typesafe-ai/sdk';

      const client = new TypeSafeClient({
        baseURL: 'https://polza.ai/api',
        apiKey: '<POLZA_AI_API_KEY>',
        defaultModel: 'typesafe/jev',
      });

      const response = await client.systemOne({
        state:
          'Здравствуйте! Третий день не могу подключить оплату на сайте — платежи клиентов не проходят, мы теряем заказы. Помогите, пожалуйста, срочно.',
        questions: {
          is_urgent: noul('Клиент сообщает о срочной проблеме?'),
          department: choice('Какая команда должна заняться обращением?', {
            billing: 'Платежи, счета, возвраты, подписки',
            technical: 'Ошибки, сбои, интеграции, настройка',
            sales: 'Тарифы, покупка, вопросы до оплаты',
          }),
          frustration: score('Насколько раздражён клиент?', [
            'Спокоен, просто описывает ситуацию',
            'Раздражён, но вежлив',
            'Очень зол, резкие выражения',
          ]),
        },
      });

      console.log(response.answers.is_urgent.noul); // 0.98
      console.log(response.answers.department.choice); // "billing"
      console.log(response.answers.frustration.score); // 0.9
      ```

      ```python Python theme={null}
      # pip install typesafe-sdk
      from typesafe_sdk import Choice, Noul, Score, TypeSafeClient

      client = TypeSafeClient(
          base_url="https://polza.ai/api",
          api_key="<POLZA_AI_API_KEY>",
          model="typesafe/jev",
      )

      response = client.system_one(
          state="Здравствуйте! Третий день не могу подключить оплату на сайте — платежи клиентов не проходят, мы теряем заказы. Помогите, пожалуйста, срочно.",
          questions={
              "is_urgent": Noul(instructions="Клиент сообщает о срочной проблеме?"),
              "department": Choice(
                  instructions="Какая команда должна заняться обращением?",
                  criteria={
                      "billing": "Платежи, счета, возвраты, подписки",
                      "technical": "Ошибки, сбои, интеграции, настройка",
                      "sales": "Тарифы, покупка, вопросы до оплаты",
                  },
              ),
              "frustration": Score(
                  instructions="Насколько раздражён клиент?",
                  criteria=[
                      "Спокоен, просто описывает ситуацию",
                      "Раздражён, но вежлив",
                      "Очень зол, резкие выражения",
                  ],
              ),
          },
      )

      print(response.answers["is_urgent"].noul)      # 0.98
      print(response.answers["department"].choice)   # "billing"
      print(response.answers["frustration"].score)   # 0.9
      ```
    </CodeGroup>

    <Note>
      API совместим с официальными SDK TypeSafe: достаточно указать наш адрес (`https://polza.ai/api`, без `/v1`) и ключ Polza.AI. Вопросы и критерии можно писать по-русски.
    </Note>
  </Step>

  <Step title="Прочитайте ответ">
    ```json theme={null}
    {
      "model": "jev-1.13.0",
      "answers": {
        "is_urgent": { "type": "noul", "noul": 0.98 },
        "department": {
          "type": "choice",
          "choice": "billing",
          "confidence": 0.62,
          "probabilities": { "billing": 0.74, "technical": 0.26, "sales": 0.0 }
        },
        "frustration": {
          "type": "score",
          "score": 0.9,
          "confidence": 0.84,
          "legend": {
            "0": "Спокоен, просто описывает ситуацию",
            "1": "Раздражён, но вежлив",
            "2": "Очень зол, резкие выражения"
          },
          "probabilities": { "0": 0.1, "1": 0.9, "2": 0.0 }
        }
      },
      "usage": { "input_tokens": 633, "output_tokens": 73, "cost_rub": 0.0133 }
    }
    ```

    * **`is_urgent` = 0,98** — почти наверняка срочно. В коде это `if (noul > 0.8)`.
    * **`department` = `billing`**, но `technical` получил 0,26: в обращении есть и оплата, и «не могу подключить». Поэтому `confidence` всего 0,62 — модель честно показывает, что вариантов два. Такое обращение разумно отдать в биллинг с копией техподдержке.
    * **`frustration` = 0,9** — между «спокоен» (0) и «раздражён, но вежлив» (1), ближе ко второму.
  </Step>
</Steps>

## Уверенность: когда действовать автоматически

Вероятности — главное отличие Jev от чат-модели, которая отвечает одинаково уверенным тоном и когда знает, и когда гадает. `confidence` у `choice` и `score` показывает, насколько ответ однозначен: вся вероятность на одном варианте — близко к 1, размазана по нескольким — близко к 0. У `noul` отдельного `confidence` нет: сама вероятность и есть сигнал, значение около 0,5 означает «не знаю».

Удобно делить на три зоны и ставить порог по цене ошибки:

| Уверенность | Что делать                                                            |
| ----------- | --------------------------------------------------------------------- |
| Высокая     | Действовать автоматически                                             |
| Средняя     | Действовать осторожно: попросить подтверждение, пометить для проверки |
| Низкая      | Не действовать: передать человеку или более сильной модели            |

```python theme={null}
intent = response.answers["intent"]

if intent.confidence < 0.5:
    route_to_human(message)            # модель сомневается — не угадываем
elif intent.choice == "check_balance":
    show_balance(account_id)           # ошибка дешёвая — хватит умеренной уверенности
elif intent.choice == "approve_transfer":
    if intent.confidence > 0.9:
        confirm_then_execute(account_id)
    else:
        ask_user_to_confirm(account_id)  # ошибка дорогая — переспрашиваем
```

<Note>
  Конкретные пороги зависят от ваших данных. Начните с осторожных значений, прогоните на своих примерах с известными ответами и подстройте.
</Note>

## Сколько это стоит

* Тарифицируются **только входные токены**: ваш `state` и вопросы. Выходные токены бесплатны. Актуальная цена — на [странице модели](https://polza.ai/models/typesafe/jev).
* К каждому запросу провайдер добавляет около 280 служебных токенов. Поэтому **десять вопросов одним запросом заметно дешевле десяти запросов по одному вопросу**: текст и служебная часть оплачиваются один раз.
* Русский текст занимает больше токенов, чем английский той же длины.
* Стоимость каждого запроса приходит в `usage.cost_rub` и видна в истории запросов в личном кабинете. В Python SDK это поле недоступно (SDK его отбрасывает), в TypeScript SDK и при прямом HTTP-запросе — доступно.

## Что дальше

<CardGroup cols={3}>
  <Card title="Как задавать вопросы" icon="circle-question" href="/docs/gaidy/jev-questions">
    Три типа вопросов, структура `state`, как писать критерии
  </Card>

  <Card title="Рецепты" icon="book-open" href="/docs/gaidy/jev-recipes">
    Разбор обращений, маршрутизация, защита LLM, извлечение данных
  </Card>

  <Card title="Справочник API" icon="code" href="/docs/api-reference/systemone/create">
    Параметры запроса, формат ответа, ошибки
  </Card>
</CardGroup>
