Коротка відповідь: jev-1.13 не генерує текст. Ви надсилаєте POST-запит із фрагментом тексту та набором іменованих запитань на https://aihubmix.com/v1/systemone, і отримуєте назад типізовані відповіді, ключами яких є назви ваших запитань: категорія, оцінка або ймовірність. Нічого розбирати не потрібно. Нижче наведено робочий запит, повний формат відповіді та одну помилку в проєктуванні, яка непомітно знижуватиме точність.
Для чого призначений Jev
Використовуйте його, коли потрібне судження, а не абзац: маршрутизація звернень у підтримку, оцінка серйозності, позначення терміновості, фільтрація контенту. На сторінці моделі це сказано прямо: «Без генерації тексту, нічого розбирати».
Натомість використовуйте звичайну чат-модель, якщо потрібні пояснення, резюме або будь-який вільний вивід. jev не може їх створювати.
Перш ніж почати
- [ ] Встановлено Python 3 (стандартної бібліотеки достатньо)
- [ ] Обліковий запис AiHubMix і API-ключ
- [ ] Ключ експортовано як
AIHUBMIX_API_KEY, ніколи не вписуйте його в код
Вам не потрібні OpenAI SDK, LangChain чи пакет requests.
Крок 1 — Знайте ендпоінт
POST https://aihubmix.com/v1/systemone
Authorization: Bearer YOUR_KEY
Content-Type: application/json
Це маршрут, специфічний для моделі, а не /v1/chat/completions. Клієнти, сумісні з OpenAI, не можуть його викликати. Використовуйте звичайний HTTP.
Крок 2 — Оберіть типи запитань
Є три типи, і їх можна вільно поєднувати в одному запиті:
| Тип | Для чого використовується | Що ви передаєте |
|---|---|---|
choice | Вибір однієї категорії | criteria як словник: мітка → визначення |
score | Оцінка за впорядкованою шкалою | criteria як список, від найнижчого |
noul | Судження так/ні | нічого, крім instructions |
Крок 3 — Сформуйте запит
state — це текст, який потрібно оцінити. questions — ключі, які ви вигадуєте самі; відповідь використовує ті самі назви.
payload = {
"model": "jev-1.13",
"state": "Hi, I have been trying to connect my Stripe account for 3 days "
"and it keeps failing. I am losing sales. Please help ASAP.",
"questions": {
"department": {
"type": "choice",
"instructions": "Which team should handle this",
"criteria": {
"billing": "Payment or subscription issues",
"technical": "Bugs or integration problems",
"sales": "Pricing or account questions",
},
},
"frustration": {
"type": "score",
"instructions": "How frustrated the customer appears",
"criteria": [
"Calm, just stating facts",
"Frustrated but civil",
"Very angry, strong language",
],
},
"is_urgent": {
"type": "noul",
"instructions": "The message conveys urgency or time-sensitivity",
},
},
}
Крок 4 — Надішліть запит стандартною бібліотекою
import json, os, urllib.error, urllib.request
def ask(payload):
req = urllib.request.Request(
"https://aihubmix.com/v1/systemone",
data=json.dumps(payload).encode(),
headers={"Authorization": "Bearer " + os.environ["AIHUBMIX_API_KEY"],
"Content-Type": "application/json"},
method="POST",
)
try:
with urllib.request.urlopen(req, timeout=60) as r:
return json.loads(r.read())
except urllib.error.HTTPError as e:
raise SystemExit(f"HTTP {e.code}: {e.read().decode(errors='replace')[:500]}")
Розміщуйте побудову запиту всередині функції. Якщо формувати й надсилати запит на рівні модуля, імпорт файлу знову запустить виклик і витратить токени.
Крок 5 — Прочитайте відповіді
Кожна відповідь зберігає значення під ключем, що відповідає її type, тож один accessor працює для всіх трьох типів:
data = ask(payload)
for name, ans in data["answers"].items():
kind = ans["type"]
print(name, kind, ans[kind], ans.get("confidence"))
print("usage:", data.get("usage"))
Перевірений результат:
department choice billing 0.51
frustration score 1 1
is_urgent noul 1 None
usage: {'input_tokens': 424, 'output_tokens': 73}
Крок 6 — Розберіть повну структуру відповіді
Цикл виводу приховує корисні поля. Ось сирий JSON для відповіді типу score:
{
"type": "score",
"score": 1,
"legend": {"0": "Calm, just stating facts", "1": "Frustrated but civil", "2": "Very angry, strong language"},
"probabilities": {"0": 0, "1": 1, "2": 0},
"confidence": 1
}
legendзіставляє індекс із вашими власними формулюваннями — ціле число самодостатнє, тож у коді не потрібна таблиця пошуку.probabilitiesдає повний розподіл, що корисно для виявлення майже нічиєї.noulне має поляconfidence. Його сигналом є ймовірність.
На верхньому рівні також повертаються usage, id, provider (TypeSafe) та версія бекенду typesafe/jev-1.13-20260917.
Помилка, яка знижує точність
У запиті вище department повернув billing з упевненістю 0.51. Повторний ідентичний запит повернув ту саму мітку з 0.38 — відповідь була стабільною, а заявлена впевненість — ні.
Причина в критеріях, а не в моделі. billing означає «Проблеми з оплатою або підпискою», а technical — «Помилки або проблеми з інтеграцією». Інтеграція Stripe, яка постійно відмовляє (integration), справді відповідає обом. Модель відобразила неоднозначність, закладену в схему.
Два правила перед продакшеном:
- Формулюйте критерії типу
choiceтак, щоб вони взаємно виключали одне одного. Якщо людина вагалася б між двома мітками, вагатиметься і модель. - Встановіть поріг упевненості та направляйте результати з низькою впевненістю в чергу для людини, а не приймайте їх як остаточні рішення. Модель, яка визнає невпевненість, цінніша за ту, що її приховує.
Чеклист перед запуском
- [ ] Ключ завантажено зі змінних середовища або з файлу з правами
600, який ігнорує ваша VCS - [ ] Критерії
choiceперевірено на перетини - [ ] Визначено поріг упевненості з резервним шляхом нижче нього
- [ ] Відповіді
noulобробляються окремо — у них немаєconfidence - [ ] Невикористані запитання видалено (3 запитання коштують 424 вхідні токени; 2 — 355)
- [ ] Відповіді з кодом, відмінним від 2xx, записуються в журнал разом із сирим тілом
Часті запитання
Чи можна використовувати OpenAI SDK? Ні. /v1/systemone не є маршрутом, сумісним з OpenAI.
Чи може jev повернути речення або резюме? Ні. Він відповідає лише на типізовані запитання, які ви визначили.
Скільки запитань можна надіслати в одному запиті? Перевірені тести використовували два та три запитання. Кожне запитання додає вхідні та вихідні токени, тож включайте лише ті, за якими будете діяти.
Чи є псевдонім версії? На сторінці моделі поряд із jev-1.13 вказано псевдонім jev-latest. Закріпіть явну версію, якщо важлива відтворюваність.
Скільки це коштує? На сторінці моделі опубліковано $0.0462 / M за вхідні токени та $0 / M за вихідні токени. Це дані постачальника — перед плануванням бюджету уточніть поточні ціни.
Яке у неї контекстне вікно? Сторінка моделі суперечлива: 64K у заголовку та 32K у таблиці постачальників. Перевірте на власному найдовшому вхідному тексті, перш ніж покладатися на будь-яке з цих значень.
Межі цього посібника
Усе вище перевірено трьома живими викликами на одному вхідному тексті. Посібник не охоплює затримку, пакетну обробку, пропускну здатність або поведінку на вхідних даних, відмінних від прикладу. Дрейф упевненості — відтворене спостереження, а не виміряна частота помилок; відтворіть його на власних даних, перш ніж встановлювати поріг.
Почніть роботу з AiHubMix
jev-1.13 доступна через AiHubMix, а сторінка моделі містить усе, на що посилався цей посібник: ендпоінт /v1/systemone, три типи запитань із форматами criteria, повні поля відповіді та опубліковану ціну $0.0462 / M за вхідні токени та $0 / M за вихідні токени. Псевдонім jev-latest вказує на найновіший випуск, тож залишається актуальним у міру виходу нових версій.
Почніть тут: https://aihubmix.com/model/jev-latest
Наступні кроки:
- Створіть обліковий запис AiHubMix і згенеруйте API-ключ
- Скопіюйте запит із Кроку 3 та функцію
ask()з Кроку 4 - Замініть
stateреальним записом зі своєї черги - Порівняйте результат із тим, як ви класифікуєте цей запис сьогодні
Якщо цей посібник був корисним, підпишіться, щоб отримувати майбутні публікації про моделі зі структурованим виводом і конвеєри класифікації.



