Коротка відповідь: jev-1.13 не генерує текст. Ви надсилаєте частину тексту разом із набором названих запитань на https://aihubmix.com/v1/systemone, і отримуєте надруковані відповіді, прив'язані до назв ваших запитань — категорія, оцінка або ймовірність. Нічого парсити. Нижче наведено робочий запит, повний формат відповіді та одна дизайнерська помилка, яка тихо позначиться на вашій точності.
Для чого потрібен Jev
Використовуйте його, коли вам потрібен судження, а не абзац: маршрутизація запиту на підтримку, оцінка серйозності, позначення терміновості, обмеження контенту. Сторінка моделі чітко зазначає — "Без генерації тексту, нічого парсити."
Використовуйте звичайну модель чату, коли вам потрібні пояснення, резюме або будь-який вільний вихід. Jev не може їх виробляти.
Перед початком
- [ ] Встановлений Python 3 (стандартної бібліотеки достатньо)
- [ ] Обліковий запис AiHubMix та API-ключ
- [ ] Ключ експортовано як
AIHUBMIX_API_KEY, ніколи не закодований у джерелі
Вам не потрібен SDK OpenAI, 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": "Привіт, я намагався підключити свій обліковий запис Stripe протягом 3 днів "
"і це постійно не вдається. Я втрачаю продажі. Будь ласка, допоможіть терміново.",
"questions": {
"department": {
"type": "choice",
"instructions": "Яка команда повинна займатися цим",
"criteria": {
"billing": "Проблеми з оплатою або підпискою",
"technical": "Помилки або проблеми з інтеграцією",
"sales": "Питання щодо ціни або облікового запису",
},
},
"frustration": {
"type": "score",
"instructions": "Наскільки розчарованим виглядає клієнт",
"criteria": [
"Спокійний, просто викладає факти",
"Розчарований, але ввічливий",
"Дуже сердитий, сильна лексика",
],
},
"is_urgent": {
"type": "noul",
"instructions": "Повідомлення передає терміновість або чутливість до часу",
},
},
}
Крок 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, тому один доступник охоплює всі три:
data = ask(payload)
for name, ans in data["answers"].items():
kind = ans["type"]
print(name, kind, ans[kind], ans.get("confidence"))
print("використання:", data.get("usage"))
Перевірений вихід:
department choice billing 0.51
frustration score 1 1
is_urgent noul 1 None
використання: {'input_tokens': 424, 'output_tokens': 73}
Крок 6 — Зрозумійте повний обсяг
Цикл друку приховує корисні поля. Сирий JSON для відповіді score:
{
"type": "score",
"score": 1,
"legend": {"0": "Спокійний, просто викладає факти", "1": "Розчарований, але ввічливий", "2": "Дуже сердитий, сильна лексика"},
"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, яка постійно не вдається, дійсно відповідає обом. Модель повідомляла про неоднозначність, яка була закладена в схему.
Два правила перед виробництвом:
- Пишіть
choiceкритерії, які є взаємно виключними. Якщо людина вагатиметься між двома мітками, модель також буде. - Встановіть поріг впевненості та маршрутизуйте результати з низькою впевненістю до черги людей замість того, щоб приймати їх як рішення. Модель, яка визнає невизначеність, є більш цінною, ніж та, що її приховує.
Перевірочний список перед запуском
- [ ] Ключ завантажено з середовища або з файлу
600, який ігнорує ваш VCS - [ ]
choiceкритерії перевірені на перекриття - [ ] Визначено поріг впевненості, з резервним шляхом нижче нього
- [ ]
noulвідповіді обробляються окремо — вони не несутьconfidence - [ ] Невикористані запитання видалені (3 запитання коштують 424 вхідних токенів; 2 коштують 355)
- [ ] Невірні відповіді реєструються з сирим тілом
Часті запитання
Чи можу я використовувати SDK OpenAI? Ні. /v1/systemone не є маршрутом, сумісним з OpenAI.
Чи може jev повернути речення або резюме? Ні. Він відповідає лише на надруковані запитання, які ви визначаєте.
Скільки запитань на запит? Перевірені тести використовували два та три. Кожне запитання додає вхідні та вихідні токени, тому включайте лише те, на що будете діяти.
Чи є псевдонім версії? Сторінка моделі містить псевдонім jev-latest поряд з jev-1.13. Закріпіть явну версію, якщо важлива відтворюваність.
Скільки це коштує? Сторінка моделі публікує $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на реальний запис з вашої черги - Порівняйте результат з тим, як ви класифікуєте цей запис сьогодні
Якщо цей посібник був корисним, підпишіться на майбутні публікації про моделі структурованого виходу та класифікаційні конвеєри.



