TypeSafe Jev — poradnik krok po kroku. Praktyczny poradnik TypeSafe Jev, modelu AI System One do typowanych decyzji programowych.
01
Sformułuj zadanie
Zdecyduj, czy Jev pasuje
Jev nie jest modelem czatu. Zamienia istniejący stan w zamkniętą decyzję dotyczącą wyboru, wyniku lub decyzji Noul i zwraca rozkład prawdopodobieństwa.
Dobre dopasowanie
Użyj Jeva do decyzji ograniczonych
Skieruj jedno żądanie do jednej nazwanej kolejki.
Umieść zapis na uporządkowanej skali ryzyka lub jakości.
Oceń, czy jeden jasno określony warunek jest prawdziwy.
Niezbyt dobre dopasowanie
Zamiast tego użyj modelu generatywnego
Pisz, streszczaj, tłumacz lub przepisz tekst otwarty.
Prowadź naturalną, wieloobrotową rozmowę.
Utwórz odpowiedź, jeśli nie można wcześniej nazwać prawidłowych wyników.
Oficjalny model mentalny
STATE
Jeden stan do oceny
Przekaż ciąg, obiekt lub tablicę zawierającą tekst i powiązane fakty potrzebne do oceny. W przypadku większości rzeczywistych żądań używaj pól nazwanych obiektów.
QUESTIONS
Jedna szybka ocena na pytanie
Każde pytanie powinno dotyczyć jednej konkretnej rzeczy, którą osoba posiadająca wiedzę może szybko ocenić na podstawie dostarczonego stanu.
PARALLEL
Niezależne pytania równolegle
Pytania w jednym żądaniu mają ten sam stan, są uruchamiane niezależnie i nie powodują wycieku jednej odpowiedzi do drugiej.
CODE
Utwórz odpowiedzi w kodzie
Waga, próg, rozgałęzienie i łączenie wpisanych odpowiedzi w zwykłym kodzie zamiast ukrywania logiki przepływu pracy w jednym monicie.
Test rozkładu: Jeśli ocena uwzględnia kilka niezależnych czynników lub wymaga rozszerzonego uzasadnienia, podziel ją na atomowe pytania i połącz odpowiedzi w kodzie.
Po tym rozdziale:Zadania związane z generowaniem treści można oddzielić od zadań związanych z podejmowaniem decyzji ustrukturyzowanych.
Użyj opcji Choice dla wzajemnie wykluczających się etykiet, Score dla uporządkowanych poziomów i Noul dla jednej oceny prawdy lub fałszu.
Wpisz
Ty dostarczasz
Otrzymujesz
Użyj kiedy
choice
Opcje nazwane → opisy
Wybrany klucz + prawdopodobieństwa dla opcji (+ pewność)
Wzajemnie wykluczające się etykiety/trasy
score
Uporządkowane poziomy (2–10), niski → wysoki
Wynik poziomu ważony prawdopodobieństwem + prawdopodobieństwa szczebli
Dotkliwość, jakość, rubryki ryzyka
noul
Propozycja tak/nie (+ kryteria opcjonalne)
Prawdopodobieństwo prawdy
Sprawdzanie pojedynczych faktów
choiceDo 255 opcji
Zwycięzca plus pełna dystrybucja
Używaj w przypadku nieuporządkowanych, ustalonych alternatyw. Dodaj inny / żaden, jeśli lista może nie obejmować każdego stanu. Wybrana wartość jest opcją o najwyższym prawdopodobieństwie.
Prawdopodobieństwo, że stwierdzenie jest prawdziwe
Użyj, aby uzyskać czystą ocenę tak/nie. Blisko 0,5 oznacza niepewność, a nie średnią wartość właściwości. Noul nie ma oddzielnego pola zaufania.
{
"type": "noul",
"noul": 0.95
}
Wynik nie jest dokładnością. Wynik 1,5 w rubryce 0–2 to poziom oczekiwany, a nie „75% poprawny”. Nie traktuj pewności wyniku lub wyboru jako obietnicy dokładności.
Po tym rozdziale:Możesz wybrać odpowiedni kształt odpowiedzi dla routingu, moderacji i punktacji ryzyka.
Zachowaj stabilność nazw opcji, zdefiniuj wzajemnie wykluczające się granice, dołącz ścieżkę resztkową i przydziel każdemu pytaniu jedną decyzję.
Pisanie mocnych kryteriów
Opcje rozłączne. Jeśli oba klucze wyboru mogą być prawdziwe, operatorzy będą walczyć z modelem.
Opisz krawędzie. Powiedz, co obejmuje zamiar zakupu (zapasy, wysyłka do) w porównaniu z pytaniem o cenę.
Zachowaj resztę na końcu. Używaj innych/ludzi jako włazów ratunkowych, a nie leniwych łapaczy.
Kolejność Wynik rosnąco. Tablice kryteriów są najniższe → najwyższe.
Jedna decyzja na każde pytanie. Podziel „trasę” od „pilności” na osobne klucze.
Anatomia pytania
question_id
Klucz wyszukiwania odpowiedzi dla Twojego kodu. Nie jest ono wysyłane do modelu, więc instrukcja musi nadal zawierać pełne pytanie.
type
wybór, wynik lub noul. Wybierz kształt, na który Twój kod będzie mógł bezpośrednio oddziaływać.
instructions
Pełny, konkretny wyrok. Może to być ciąg znaków, obiekt lub tablica i może odwoływać się do nazwanych ścieżek stanu.
criteria
Opcje wyboru, uporządkowane poziomy wyników lub opcjonalne wyjaśnienie prawdy/fałszu dla Noula.
Przykład · jedna decyzja, rozłączne granice
route: {
type: 'choice',
instructions: 'Route this ticket to one queue.',
criteria: {
tech: 'Bugs, outages, API failures, or integrations',
sales: 'Pricing, plans, demos, or new-purchase intent',
billing: 'Charges, invoices, receipts, or subscriptions',
human: 'Ambiguous, sensitive, legal, or multi-issue'
}
}
Stan struktury i dokładne pola odniesienia
Przechowuj dowody w nazwanych polach stanu i kieruj do nich instrukcje za pomocą ścieżek z kropkami i indeksami. Zmniejsza to niejasność co do tego, który tekst, zapis lub polityka powinny kontrolować odpowiedź.
const state = {
ticket: {
message: 'I was charged twice. Please refund the duplicate.',
orderId: 'A-104'
},
order: { charges: [49, 49] },
refundPolicy: 'Duplicate charges are eligible for a refund.'
};
const questions = {
refund_requested: {
type: 'noul',
instructions: 'Does `ticket.message` request a refund?'
},
policy_supports_refund: {
type: 'noul',
instructions: 'Does `refundPolicy` support the request given `order.charges`?'
}
};
Domyślnie wsadowo: Zadawaj wszystkie pytania, które używają tego samego stanu w jednym żądaniu – nawet pytania spekulatywne. Złóż drugie żądanie tylko wtedy, gdy jego stan lub opcje naprawdę zależą od wcześniejszej odpowiedzi.
Po tym rozdziale:Możesz napisać stabilną, testowalną definicję pytania, którą może wykorzystać kod.
Wywołaj oficjalny punkt końcowy System One lub zestaw SDK ze swojego serwera, sprawdź wpisaną odpowiedź i obsłuż błędy sprawdzania poprawności, ograniczenia szybkości i przeciążenia. Brama pozostaje opcjonalną ścieżką dostępu.
Zacznij od oficjalnego punktu końcowego HTTP
Zachowaj TYPESAFE_API_KEY na serwerze. Wyślij stan, model i mapę nazwanych pytań do POST /v1/systemone.
curl -X POST https://api.typesafe.ai/v1/systemone \
-H "Authorization: Bearer $TYPESAFE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"state": "Stripe has failed for 3 days. I am losing sales.",
"model": "jev-latest",
"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"
}
},
"is_urgent": {
"type": "noul",
"instructions": "Does this message convey urgency?"
}
}
}'
Użyj oficjalnego zestawu SDK do wpisanych odpowiedzi i ponownych prób
Zestaw SDK języka Python odczytuje TYPESAFE_API_KEY ze środowiska, domyślnie wybiera jev-latest, udostępnia wpisane klasy pytań/odpowiedzi i stosuje domyślne zasady ponawiania.
pip install typesafe-sdk
from typesafe_sdk import Choice, Noul, TypeSafeClient
with TypeSafeClient() as client:
response = client.system_one(
state={"message": "Stripe has failed for 3 days.", "impact": "Losing sales"},
questions={
"department": Choice(
instructions="Which team should handle this?",
criteria={
"billing": "Payment or subscription issues",
"technical": "Bugs or integration problems",
"sales": "Pricing or account questions",
},
),
"is_urgent": Noul(
instructions="Does `message` and `impact` convey urgency?"
),
},
)
department = response.answers["department"]
print(department.choice, department.confidence)
print(response.answers["is_urgent"].noul)
Przeczytaj każdą odpowiedź pod identyfikatorem pytania
Brakujący lub nieprawidłowy klucz API. Sprawdź token okaziciela.
422
Nieprawidłowy kształt żądania. Sprawdź odpowiedź dla pola naruszającego.
429
Przekroczono limit stawki. Cofnij się przed ponowną próbą.
529
Usługa chwilowo przeciążona. Cofnij się przed ponowną próbą.
W przypadku 429 i 529 użyj wykładniczego wycofywania zamiast natychmiastowej ponownej próby. Oficjalne zestawy SDK robią to automatycznie zgodnie z domyślnymi zasadami ponawiania prób.
Alternatywa: bramka Vercel AI
Ta witryna dokumentuje również Gateway jako warstwę dostępu do oceny zestawu AI SDK. Jest to alternatywna ścieżka integracji, nie będąca częścią Jev czy TypeSafe.
import { experimental_evaluate as evaluate } from 'ai';
import { gateway } from '@ai-sdk/gateway';
const result = await evaluate({
model: gateway('typesafe-ai/jev'),
state,
questions,
});
Po tym rozdziale:Możesz przechowywać dane uwierzytelniające po stronie serwera i otrzymywać wpisane odpowiedzi z prawdopodobieństwem.
Nie zamieniaj najwyższego prawdopodobieństwa bezpośrednio w ostateczną akcję. Ustaw zakresy sugestii, potwierdzeń i weryfikacji przez człowieka w oparciu o ryzyko biznesowe.
PROBABILITY
Dowody dla każdej opcji lub poziomu
Wybór i Wynik zwracają pełną dystrybucję. Użyj go, gdy liczą się opcje drugiego miejsca, niejednoznaczność lub niestandardowe miary niepewności.
CONFIDENCE
Podsumowanie kształtu dystrybucji
Zaufanie kompresuje stopień koncentracji lub płaski rozkład do wartości 0–1. Nie jest to to samo, co prawdopodobieństwo wybranej opcji.
Noul: Noul już zwraca P(true), więc nie ma osobnej pewności. Wartości bliskie 0,5 są niepewne; próg zarówno dla strony „tak”, jak i „nie” w zależności od ryzyka.
TypeSafe zapewnia pewność dystrybucji opcji. Praktyczna polityka to:
01
Wysoka pewność
Automatycznie zasugeruj wybór (tag, trasę lub werdykt) w swoim interfejsie użytkownika.
02
Średnia pewność
Pokaż sugestię, ale przed kontynuowaniem poproś operatora o jej potwierdzenie.
03
Niska pewność siebie
Wyślij do ludzkiej kolejki bez domyślnej akcji.
Skalibruj wartości graniczne dla oznaczonych etykietami przykładów ze swojego strumienia lub skrzynki odbiorczej. Progi zależą od przypadku użycia. Nigdy nie przelewaj sugestii na pieniądze ani nie zwracaj skutków ubocznych.
Ustal próg działania, a nie modelu globalnego
action = response.answers["action"]
if action.confidence < 0.5:
route_to_human(state) # uncertain: do not guess
elif action.choice == "check_balance":
show_balance(account_id) # reversible, low stakes
elif action.choice == "approve_transfer":
if action.confidence > 0.9:
confirm_then_execute(account_id)
else:
ask_user_to_confirm(account_id) # higher stakes, higher bar
Kalibracja przed automatyzacją
Zbierz reprezentatywne, oznaczone przykłady z rzeczywistego przepływu pracy.
Rejestruj odpowiedzi, rozkłady, pewność, opóźnienie i decyzję człowieka.
Wybierz progi osobno dla działań odwracalnych, kosztownych i nieodwracalnych.
Monitoruj dryft i ponownie oceniaj po zmianie stanu, instrukcji, kryteriów lub aliasu modelu.
Wskazówki stanowe
Przekaż ciąg, obiekt lub tablicę jako stan. Preferuj uporządkowane zapisy (tekst komentarza + metadane) zamiast wyrzucać cały dziennik czatu, gdy liczy się tylko jedna wiadomość.
Po tym rozdziale:Można zaprojektować rezerwę o niskim poziomie zaufania i skalibrować progi za pomocą oznaczonych danych.
Zbuduj jeden kompletny przepływ pracy ze stanem strukturalnym, pytaniami równoległymi, zasadami należącymi do kodu, dowodami kontroli, ponownymi próbami i rezerwowym działaniem człowieka.
Zbuduj jeden kompletny przepływ pracy dotyczący wsparcia i selekcji
Wyślij jeden ustrukturyzowany stan zgłoszenia i zadaj trzy niezależne pytania równolegle. Zachowaj zasady wyznaczania tras i bezpieczeństwa w kodzie.
STATE→CHOICESCORENOUL→POLICY
const questions = {
department: {
type: 'choice',
instructions: 'Which team should handle `ticket.message`?',
criteria: {
returns: 'Exchanges, wrong or damaged items',
shipping: 'Delivery status, delays, or lost packages',
billing: 'Charges, invoices, or payment problems',
other: 'None of the above'
}
},
frustration: {
type: 'score',
instructions: 'How frustrated is the customer?',
criteria: ['Calm', 'Concerned but civil', 'Very angry']
},
refund_requested: {
type: 'noul',
instructions: 'Does `ticket.message` request money back?'
}
};
Zamień wpisane odpowiedzi w możliwą do skontrolowania decyzję
Przechowuj poświadczenia i wywołania modeli po stronie serwera.
Przed wywołaniem interfejsu API sprawdź rozmiar stanu, wymagane pola i definicje pytań.
Przechowuj wersję modelu, wersję pytania, prawdopodobieństwa, pewność i ostateczne działanie.
Podaj wyraźną ścieżkę innej/ludzkiej i nigdy nie wymyślaj domyślnej ścieżki niepewności.
Spróbuj ponownie 429 i 529 z ograniczonym wykładniczym wycofaniem; nie próbuj ponownie popełnić błędów sprawdzania poprawności.
Przed włączeniem automatyzacji przetestuj oznaczone przypadki Edge i ponownie skalibruj progi.
Case index
Six Jev patterns to explore next
These are research paths, not claims that this site built the projects. Each card opens the corresponding category in the open-source radar so you can inspect real implementations and source evidence.
Po ukończeniu kursu podstawowego skorzystaj z oficjalnych źródeł, publicznych wersji demonstracyjnych i katalogów społeczności, jeśli zajdzie taka potrzeba.
Oficjalne referencje i startery 7
Use-case map
Czego się uczysz: See where System One / Jev decisions fit before you pick a pattern.