Krótka odpowiedź: jev-1.13 nie generuje tekstu. Wysyłasz fragment tekstu oraz zestaw nazwanych pytań do https://aihubmix.com/v1/systemone, a otrzymujesz odpowiedzi przypisane do nazw twoich pytań — kategorię, wynik lub prawdopodobieństwo. Nic do przetwarzania. Poniżej znajduje się działające zapytanie, pełny format odpowiedzi oraz jeden błąd projektowy, który cicho wpłynie na twoją dokładność.
Do czego służy Jev
Użyj go, gdy potrzebujesz osądu, a nie akapitu: kierowanie zgłoszeniem wsparcia, ocenianie powagi, flagowanie pilności, kontrolowanie treści. Strona modelu jasno to stwierdza — "Brak generacji tekstu, nic do przetwarzania."
Użyj normalnego modelu czatu, gdy potrzebujesz wyjaśnień, podsumowań lub jakiegokolwiek wyjścia w formie wolnej. Jev nie może ich produkować.
Zanim zaczniesz
- [ ] Zainstalowany Python 3 (standardowa biblioteka wystarczy)
- [ ] Konto AiHubMix i klucz API
- [ ] Klucz wyeksportowany jako
AIHUBMIX_API_KEY, nigdy zakodowany na stałe w źródle
Nie potrzebujesz SDK OpenAI, LangChain ani pakietu requests.
Krok 1 — Poznaj punkt końcowy
POST https://aihubmix.com/v1/systemone
Authorization: Bearer YOUR_KEY
Content-Type: application/json
To jest trasa specyficzna dla modelu, nie /v1/chat/completions. Klienci zgodni z OpenAI nie mogą jej wywołać. Użyj zwykłego HTTP.
Krok 2 — Wybierz typy pytań
Istnieją trzy typy, które możesz swobodnie łączyć w jednym zapytaniu:
| Typ | Użyj go do | Ty dostarczasz |
|---|---|---|
choice | Wybór jednej kategorii | criteria jako słownik: etykieta → definicja |
score | Ocena na uporządkowanej skali | criteria jako lista, najniższa na początku |
noul | Osąd tak/nie | nic poza instructions |
Krok 3 — Zbuduj zapytanie
state to tekst do oceny. questions to klucze, które wymyślasz; odpowiedź używa tych samych nazw.
payload = {
"model": "jev-1.13",
"state": "Cześć, próbuję połączyć moje konto Stripe od 3 dni "
"i ciągle się nie udaje. Tracę sprzedaż. Proszę o pomoc ASAP.",
"questions": {
"department": {
"type": "choice",
"instructions": "Który zespół powinien się tym zająć",
"criteria": {
"billing": "Problemy z płatnościami lub subskrypcjami",
"technical": "Błędy lub problemy z integracją",
"sales": "Pytania dotyczące cen lub konta",
},
},
"frustration": {
"type": "score",
"instructions": "Jak bardzo klient wydaje się sfrustrowany",
"criteria": [
"Spokojny, po prostu przedstawia fakty",
"Sfrustrowany, ale grzeczny",
"Bardzo zły, mocny język",
],
},
"is_urgent": {
"type": "noul",
"instructions": "Wiadomość przekazuje pilność lub wrażliwość czasową",
},
},
}
Krok 4 — Wyślij to za pomocą standardowej biblioteki
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]}")
Trzymaj konstrukcję zapytania wewnątrz funkcji. Jeśli zbudujesz i wyślesz na poziomie modułu, importowanie pliku ponownie wywoła zapytanie i wyda tokeny.
Krok 5 — Przeczytaj odpowiedzi
Każda odpowiedź przechowuje swoją wartość pod kluczem odpowiadającym jej type, więc jeden dostępnik obejmuje wszystkie trzy:
data = ask(payload)
for name, ans in data["answers"].items():
kind = ans["type"]
print(name, kind, ans[kind], ans.get("confidence"))
print("zużycie:", data.get("usage"))
Zweryfikowane wyjście:
department choice billing 0.51
frustration score 1 1
is_urgent noul 1 None
zużycie: {'input_tokens': 424, 'output_tokens': 73}
Krok 6 — Zrozum pełną odpowiedź
Pętla drukująca ukrywa przydatne pola. Surowy JSON dla odpowiedzi score:
{
"type": "score",
"score": 1,
"legend": {"0": "Spokojny, po prostu przedstawia fakty", "1": "Sfrustrowany, ale grzeczny", "2": "Bardzo zły, mocny język"},
"probabilities": {"0": 0, "1": 1, "2": 0},
"confidence": 1
}
legendmapuje indeks z powrotem do twojego własnego sformułowania — liczba całkowita jest samoprzypisująca, więc nie potrzebujesz tabeli wyszukiwania w swoim kodzie.probabilitiesdaje pełną dystrybucję, przydatną do wykrywania bliskiego remisu.noulnie ma polaconfidence. Jego prawdopodobieństwo to sygnał.
Najwyższy poziom zwraca również usage, id, provider (TypeSafe), oraz rozwiązaną wersję backendu typesafe/jev-1.13-20260917.
Błąd, który kosztuje cię dokładność
W powyższym zapytaniu department zwrócił billing z pewnością 0.51. Powtórzenie identycznego zapytania zwróciło tę samą etykietę przy 0.38 — odpowiedź była stabilna, ale podana pewność nie.
Przyczyną jest kryterium, a nie model. billing to "Problemy z płatnościami lub subskrypcjami", a technical to "Błędy lub problemy z integracją." Integracja Stripe, która ciągle się nie udaje, rzeczywiście pasuje do obu. Model zgłaszał niejednoznaczność, która była zapisana w schemacie.
Dwie zasady przed produkcją:
- Napisz
choicekryteria, które są wzajemnie wykluczające. Jeśli człowiek wahałby się między dwiema etykietami, model również się waha. - Ustal próg pewności i kieruj wyniki o niskiej pewności do kolejki ludzkiej zamiast akceptować je jako decyzje. Model, który przyznaje się do niepewności, jest bardziej wartościowy niż ten, który ją ukrywa.
Lista kontrolna przed uruchomieniem
- [ ] Klucz załadowany z środowiska lub z pliku w trybie
600, który ignoruje twój VCS - [ ]
choicekryteria sprawdzone pod kątem nakładania się - [ ] Ustalony próg pewności, z alternatywną ścieżką poniżej niego
- [ ]
noulodpowiedzi obsługiwane osobno — nie mająconfidence - [ ] Nie używane pytania usunięte (3 pytania kosztują 424 tokeny wejściowe; 2 kosztują 355)
- [ ] Odpowiedzi nie będące 2xx rejestrowane z surowym ciałem
FAQ
Czy mogę użyć SDK OpenAI? Nie. /v1/systemone to nie jest trasa zgodna z OpenAI.
Czy jev może zwrócić zdanie lub podsumowanie? Nie. Odpowiada tylko na zadane pytania, które definiujesz.
Ile pytań na zapytanie? Zweryfikowane testy używały dwóch i trzech. Każde pytanie dodaje tokeny wejściowe i wyjściowe, więc uwzględnij tylko to, na co będziesz działać.
Czy istnieje alias wersji? Strona modelu wymienia alias jev-latest obok jev-1.13. Zablokuj konkretną wersję, jeśli reprodukowalność ma znaczenie.
Ile to kosztuje? Strona modelu publikuje $0.0462 / M tokenów wejściowych i $0 / M tokenów wyjściowych. To są dane dostawcy — potwierdź aktualne ceny przed budżetowaniem.
Jaki jest kontekst okna? Strona modelu jest niespójna: 64K w nagłówku, 32K w tabeli dostawcy. Zweryfikuj na podstawie swojego najdłuższego wejścia, zanim polegasz na którymkolwiek z nich.
Zakres tego przewodnika
Wszystko powyżej zostało zweryfikowane przy trzech rzeczywistych wywołaniach na jednym wejściu. Nie obejmuje opóźnienia, grupowania, przepustowości ani zachowania na wejściach różniących się od przykładu. Dryf pewności to powtórzone obserwacje, a nie zmierzona stopa błędów — powtórz to na własnych danych przed ustaleniem progu.
Rozpocznij pracę z AiHubMix
jev-1.13 jest dostępny przez AiHubMix, a strona modelu zawiera wszystko, do czego odnosił się ten przewodnik: punkt końcowy /v1/systemone, trzy typy pytań z ich formatami criteria, pełne pola odpowiedzi oraz opublikowane ceny $0.0462 / M tokenów wejściowych z $0 / M tokenów wyjściowych. Alias jev-latest odnosi się do najnowszej wersji, więc pozostaje aktualny w miarę zmiany wersji.
Rozpocznij tutaj: https://aihubmix.com/model/jev-latest
Następne kroki:
- Utwórz konto AiHubMix i wygeneruj klucz API
- Skopiuj zapytanie z Kroku 3 oraz funkcję
ask()z Kroku 4 - Zastąp
staterzeczywistym rekordem z własnej kolejki - Porównaj wynik z tym, jak klasyfikujesz ten rekord dzisiaj
Jeśli ten przewodnik był przydatny, subskrybuj, aby otrzymywać przyszłe posty na temat modeli wyjścia strukturalnego i pipeline'ów klasyfikacyjnych.



