Čo znamenajú jednotlivé polia
V požiadavke určíte otázky a formát odpovedí. Odpoveď obsahuje výsledok pre každú otázku. Tu sú vysvetlené polia JSON z príkladu.
Polia požiadavky
model- ID modelu. Príklad výslovne používa verziu Jev 1.13.
state- Text alebo štruktúrované údaje na vyhodnotenie, napríklad správa zákazníka.
questions- Objekt s pomenovanými otázkami. Rovnaké názvy sa objavia v poli answers.
<question_id>- Názov, napríklad action alebo urgency; odpoveď používa rovnaký názov.
type- Formát odpovede: choice vyberie možnosť, score hodnotí na usporiadanej stupnici a noul posudzuje otázku áno/nie.
instructions- Konkrétny úsudok, ktorý má model vykonať.
criteria- Povolené možnosti Choice, usporiadané úrovne Score alebo význam false a true pre Noul.
Polia odpovede
answers- Jeden výsledok pre každú otázku, vždy pod rovnakým názvom.
choice- Kľúč vybranej možnosti s najvyššou pravdepodobnosťou.
probabilities- Pravdepodobnosť každej možnosti; súčet hodnôt je 1.
confidence- Samostatná miera istoty vypočítaná z rozdelenia pravdepodobností; nejde o pravdepodobnosť vybranej možnosti.
score- Pozícia na usporiadanej stupnici vážená pravdepodobnosťami; môže ležať medzi dvoma úrovňami.
legend- Priradenie číselných pozícií Score k opisom úrovní, ktoré ste zadali.
noul- Číslo od 0 (nie) do 1 (áno) pre otázku áno/nie.
Jeden spoločný kontext, tri nezávislé otázky: Choice, Score a Probability. Každé spustenie spotrebuje jeden denný pokus. Aj správne štruktúrovaná odpoveď môže byť chybná. Testujte na reprezentatívnych prípadoch a nastavte vhodné prahy pre svoj pracovný postup.
LangChain · PythonZapojte Jev do riadiacej vrstvy agenta LangChain
Riadiaca vrstva koordinuje volania modelu a nástrojov. V bode rozhodovania Jev prečíta správu, plánované volanie nástroja alebo stav agenta a vráti typovanú odpoveď. Ďalší krok určí váš kód; otvorené úlohy naďalej rieši konverzačný model.
ModelRouterMiddlewarebefore_agent → wrap_model_callPred spustením klasifikujte poslednú správu používateľa, vyberte model a používajte ho počas celého behu. Výber, pravdepodobnosti a miera istoty zostávajú dostupné v stave agenta.
AutoModeMiddlewarewrap_tool_callVybrané volanie nástroja skontrolujte pred vykonaním. Ak Jev vyhodnotí riziko alebo nedostatočné oprávnenie, middleware volanie zablokuje a vráti chybový ToolMessage. Nepýta si schválenie človekom.
TypeSafeClassifierChoice · Score · NoulVo vlastnom middleware môžete pridať ďalšie kontrolné body: odovzdajte správy alebo stav agenta do TypeSafeClassifier a pomocou Choice, Score alebo Noul vetvite kód či pošlite neisté prípady na kontrolu.
LangChain · Python · ModelRouterMiddleware
# pip install "langchain-typesafe[experimental]" langchain-openai
# Set TYPESAFE_API_KEY and OPENAI_API_KEY on your server.
from langchain.agents import create_agent
from langchain_typesafe.experimental.middleware import (
ModelChoice, ModelRouterMiddleware,
)
router = ModelRouterMiddleware(
choices={
"fast": ModelChoice(
model="openai:gpt-5.6-terra",
criteria="Simple lookups and extraction.",
),
"powerful": ModelChoice(
model="openai:gpt-6-astra",
criteria="Complex reasoning and high-stakes decisions.",
),
},
instructions="Choose the least costly model that can do the task safely.",
)
agent = create_agent("openai:gpt-5.6-terra", middleware=[router])
result = agent.invoke({"messages": [{"role": "user", "content": "Summarize this log."}]})
print(result["model_route"].choice)
TypeScript na strane servera
TypeScript · fetch// Run on your server. Keep the API key out of browser code.
const apiKey = process.env.OPENROUTER_API_KEY;
if (!apiKey) throw new Error("Set OPENROUTER_API_KEY");
const response = await fetch("https://openrouter.ai/api/alpha/decisions", {
method: "POST",
headers: {
Authorization: "Bearer " + apiKey,
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "typesafe/jev-1.13",
state: {input: "A customer reports a duplicate charge."},
questions: {
team: {
type: "choice",
instructions: "Which team should handle this?",
criteria: {
billing: "Payments and refunds",
technical: "Bugs and integrations"
}
},
urgency: {
type: "score",
instructions: "How urgent is the issue?",
criteria: ["Can wait", "Needs attention today", "Immediate action"]
},
escalate: {
type: "noul",
instructions: "Should a human review this first?",
criteria: {false: "No review needed", true: "Review before acting"}
}
}
})
});
if (!response.ok) throw new Error("Decision request failed");
const {answers} = await response.json();
console.log(answers.team.choice, answers.urgency.score, answers.escalate.noul);