Классификация текста — модель решений или языковая модель
Тема, тональность и срочность по вашим категориям без обучения. Замер пяти моделей на одном обращении, когда брать модель решений, когда языковую, и как не переплатить за размышления.
Что получите: каждое письмо, отзыв или заявка получает категорию по вашему списку — тему, тональность, срочность. Обучать модель и размечать данные не нужно, категории описываются словами.
Сколько времени: 15 минут.
Что понадобится: API-ключ Hubris.
Шаг 1. Выберите способ
Через Hubris классифицировать можно двумя способами, одним ключом. Мы прогнали одно и то же обращение клиента с тремя вопросами (срочность, отдел, тональность) через пять моделей 7 октября 2026 года:
| Модель | Способ | Время | Цена |
|---|---|---|---|
| Jev 1.13 | модель решений | 0,38 с | 1 коп. |
| DeepSeek V4 Flash | языковая, JSON по схеме | 2,9 с | 1 коп. |
| GPT-6 Luna | языковая, JSON по схеме | 3,0 с | 1 коп. |
| Qwen 3.8 Flash | языковая, JSON по схеме | 9,0 с | 3 коп. |
| Gemini 3.8 Flash | языковая, JSON по схеме | 13,5 с | 59 коп. |
Модель решений (Jev и другие) отвечает только вариантом из вашего списка и к каждому варианту даёт вероятность. Берите её, если текстов много и ответ нужен сразу, если сомнительные случаи нужно отдавать человеку по порогу уверенности и если категорий до нескольких десятков.
Языковая модель возвращает метку в JSON и при желании объяснение. Берите её, если нужна причина или выдержка из текста, если текст длинный (договор, переписка на десятки страниц) или если правила проще написать инструкцией, чем списком вариантов.
Шаг 2а. Модель решений
import requests
res = requests.post(
"https://api.hubris.pw/v1/decisions",
headers={"Authorization": "Bearer sk-gw-..."},
json={
"model": "typesafe/jev-1.13",
"state": text,
"questions": {
"topic": {"type": "choice", "instructions": "Тема обращения",
"criteria": {"payment": "Оплата и счета", "delivery": "Доставка",
"refund": "Возврат", "other": "Другое"}},
"sentiment": {"type": "score", "instructions": "Тональность",
"criteria": ["негативная", "нейтральная", "позитивная"]},
},
},
)
answers = res.json()["answers"]
print(answers["topic"]["choice"], answers["topic"]["confidence"])Добавляйте вариант «Другое»: модель всегда выбирает что-то из списка, и без запасного варианта чужой текст попадёт в ближайшую категорию.
Шаг 2б. Языковая модель
from openai import OpenAI
client = OpenAI(base_url="https://api.hubris.pw/v1", api_key="sk-gw-...")
res = client.chat.completions.create(
model="deepseek/deepseek-v4-flash",
reasoning_effort="none",
messages=[
{"role": "system", "content": "Определи тему обращения и тональность."},
{"role": "user", "content": text},
],
response_format={"type": "json_schema", "json_schema": {
"name": "ticket", "strict": True, "schema": {
"type": "object", "additionalProperties": False,
"required": ["topic", "sentiment"],
"properties": {
"topic": {"type": "string", "enum": ["payment", "delivery", "refund", "other"]},
"sentiment": {"type": "string", "enum": ["negative", "neutral", "positive"]},
}}}},
)
print(res.choices[0].message.content)enum в схеме не даёт модели придумать свою категорию. Подробно про схемы — в гайде по ответу JSON.
Шаг 3. Выключите размышления
Для выбора одной метки модели не нужно рассуждать, а размышления оплачиваются как выходные токены. В нашем замере Gemini 3.8 Flash потратила на размышления 1 192 токена и 59 копеек на одно обращение. С reasoning_effort: "none" на том же обращении:
| Модель | Без параметра | С "none" |
|---|---|---|
| Qwen 3.8 Flash | 9,0 с, 3 коп. | 1,0 с, 1 коп. |
| DeepSeek V4 Flash | 2,9 с, 1 коп. | 1,8 с, 1 коп. |
Не у всех моделей размышления выключаются: Gemini 3.8 Flash на "none" отвечает ошибкой, и "low" у неё в нашем замере стоил 3 копейки. Подробно — в гайде по размышлениям.
Шаг 4. Проверьте на своих текстах
- Возьмите 50–100 текстов, которые уже разобраны вручную.
- Прогоните их выбранным способом и сравните с ручной разметкой.
- Если ошибки похожи — уточните описания категорий. У модели решений посмотрите уверенность: тексты ниже порога можно отдавать человеку.
Что дальше
- Классификация текста нейросетью — тот же замер и примеры задач на одной странице.
- Маршрутизация обращений за копейку — классификация плюс правила, куда отправить обращение.
- POST /v1/decisions — все поля модели решений.
Обновлено: