---
title: Решения
description: Вызов POST /v1/systemone — состояние и вопросы на входе, ответы вероятностями на выходе, и то, во что этот вызов обходится.
keywords: решения, system one, systemone, noul, choice, score, вероятности, usage
group: gateway
---

## Быстро {#quick keywords="curl, python, node, state, questions"}

Модель решений не пишет текст. Она читает состояние — `state` — и отвечает на ваши вопросы вероятностями: да или нет, какой вариант из нескольких, какое место на шкале. Одна операция принимает состояние и словарь вопросов и отвечает словарём ответов под теми же ключами. Формат запроса — System One, тот же, что у OpenRouter: клиент, уже написанный под него, меняет только базовый адрес.

:::code-group
```bash title=curl
curl https://api.kumorouter.com/v1/systemone \
  -H "Authorization: Bearer $KUMO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "<model>",
    "state": "Клиент третий раз за неделю пишет, что заказ не пришёл, и просит вернуть деньги.",
    "questions": {
      "refund": {
        "type": "noul",
        "instructions": "Клиент просит вернуть деньги?"
      },
      "topic": {
        "type": "choice",
        "instructions": "О чём обращение?",
        "criteria": {
          "delivery": "доставка и сроки",
          "payment": "оплата и возвраты",
          "other": "что-то другое"
        }
      },
      "urgency": {
        "type": "score",
        "instructions": "Насколько срочно нужно ответить?",
        "criteria": ["можно подождать", "в течение дня", "немедленно"]
      }
    }
  }'
```
```python title=Python
import os

import requests

response = requests.post(
    "https://api.kumorouter.com/v1/systemone",
    headers={"Authorization": f"Bearer {os.environ['KUMO_API_KEY']}"},
    json={
        "model": "<model>",
        "state": "Клиент третий раз за неделю пишет, что заказ не пришёл, и просит вернуть деньги.",
        "questions": {
            "refund": {"type": "noul", "instructions": "Клиент просит вернуть деньги?"},
        },
    },
    timeout=60,
)
answers = response.json()["answers"]
print(answers["refund"]["noul"])
```
```javascript title=Node
const response = await fetch("https://api.kumorouter.com/v1/systemone", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.KUMO_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "<model>",
    state: "Клиент третий раз за неделю пишет, что заказ не пришёл, и просит вернуть деньги.",
    questions: {
      refund: { type: "noul", instructions: "Клиент просит вернуть деньги?" },
    },
  }),
});

const { answers } = await response.json();
console.log(answers.refund.noul);
```
:::

## Члены запроса {#request keywords="model, state, questions"}

| Член | Что это |
| --- | --- |
| `model` | Обязателен. Модель каталога с протоколом решений, в том имени, которым её называет клиент. |
| `state` | Обязателен. То, о чём модель судит: строка, JSON-объект или JSON-массив. |
| `questions` | Обязателен. Непустой объект: ключ — ваше имя вопроса, значение — сам вопрос. Ключ нужен вашему коду, чтобы найти ответ. |

`state` может быть строкой — письмом, репликой, описанием, — JSON-объектом с именованными полями, если состояние удобнее разложить по частям, или JSON-массивом: списком сообщений или списком частей содержимого вроде `[{"type":"text","text":"…"}]`, среди которых некоторые модели читают и изображения. Состояние доходит до модели ровно таким, каким вы его отправили. Читает ли изображения конкретная модель, зависит от модели; это говорят её страница и каталог.

Стриминга у этой поверхности нет: ответ приходит целиком.

## Типы вопросов {#questions keywords="noul, choice, score, instructions, criteria"}

Каждый вопрос несёт `type` и `instructions` — суждение, которое вы просите вынести; вопрос без `instructions` вышестоящий сервис отклоняет. Вопросы одного запроса решаются независимо друг от друга.

| Тип | Что спрашивает |
| --- | --- |
| `noul` | Да или нет: верно ли утверждение. |
| `choice` | Какой вариант из нескольких. |
| `score` | Какое место на упорядоченной шкале. |

### noul

`criteria` необязателен: объект с описаниями `true` и `false`, если «да» и «нет» стоит уточнить. Ответ несёт `noul` — вероятность «да», от 0 до 1.

### choice

`criteria` обязателен: объект «метка → описание», с одной меткой или больше; описание метки может быть `null`. Ответ несёт `choice` — выбранную метку, `probabilities` — вероятность каждой метки, и `confidence` — насколько уверен выбор.

### score

`criteria` обязателен: список уровней, от низшего к высшему. Ответ несёт `score` — позицию, взвешенную по вероятностям, от 0 до числа уровней минус один; `legend` — номер каждого уровня и его текст; `probabilities` — вероятность каждого уровня; и `confidence`.

## Ответ {#response keywords="answers, id, usage, input_tokens"}

| Член ответа | Что это |
| --- | --- |
| `id` | Идентификатор вызова. |
| `model` | Модель, которая ответила. |
| `answers` | Ответ на каждый вопрос, под тем же ключом, что и вопрос; `type` повторяет тип вопроса. |
| `usage` | `input_tokens` — входные токены вызова; `output_tokens` всегда `0`. |

```json title=Ответ
{
  "id": "dec-<request id>",
  "model": "<model>",
  "answers": {
    "refund": { "type": "noul", "noul": 0.97 },
    "topic": {
      "type": "choice",
      "choice": "payment",
      "confidence": 0.81,
      "probabilities": { "delivery": 0.17, "payment": 0.82, "other": 0.01 }
    },
    "urgency": {
      "type": "score",
      "score": 1.62,
      "confidence": 0.58,
      "legend": { "0": "можно подождать", "1": "в течение дня", "2": "немедленно" },
      "probabilities": { "0": 0.04, "1": 0.3, "2": 0.66 }
    }
  },
  "usage": { "input_tokens": 412, "output_tokens": 0 }
}
```

## Во что обходится вызов {#billing keywords="цена, входные токены, usage"}

Считается вызов только по входным токенам: у моделей решений есть цена за вход и нет цены за выход, поэтому `output_tokens` в ответе всегда ноль, и в учёте по нему стоит ноль. Сколько стоит миллион входных токенов конкретной модели, говорит прайс-лист.

## Какие модели отвечают {#models keywords="каталог, протокол, модальность"}

Отвечает только модель, у которой в опубликованном каталоге есть протокол решений; в каталоге её модальность — «Решения». Модель другого протокола на этой поверхности отвергается, как и модель решений на поверхностях чата.

> [Каталог моделей →](/ru/models) [Прайс-лист →](https://kumorouter.com/ru/pricing)

## Что дальше {#next keywords="ошибки, лимиты, справочник"}

:::cards
- [Ошибки](/ru/errors) — конверт отказа и коды ответа этой операции.
- [Лимиты](/ru/limits) — потолки запросов и токенов.
- [Справочник API](/ru/api-reference) — операция член за членом, прямо из описания API.
:::
