Mitä kentät tarkoittavat
Pyynnössä määritellään kysymykset ja vastausmuodot. Vastauksessa on tulos jokaiseen kysymykseen. Tässä selitetään esimerkin JSON-kentät.
Pyynnön kentät
model- Mallin tunniste. Esimerkissä käytetään nimenomaan Jev 1.13 -versiota.
state- Arvioitava teksti tai jäsennelty data, esimerkiksi tukiviesti.
questions- Nimettyjen kysymysten joukko. Samat nimet näkyvät answers-kentässä.
<question_id>- Nimi, kuten action tai urgency; vastaus käyttää samaa nimeä.
type- Vastausmuoto: choice valitsee vaihtoehdon, score arvioi järjestetyllä asteikolla ja noul käsittelee kyllä/ei-kysymyksen.
instructions- Tarkka arvio, jonka haluat mallin tekevän.
criteria- Choice-vaihtoehdot, järjestetyt Score-tasot tai Noul-kysymyksen false- ja true-arvojen merkitys.
Vastauksen kentät
answers- Yksi tulos kysymystä kohti samalla nimellä.
choice- Valitun vaihtoehdon tunniste, jolla on suurin todennäköisyys.
probabilities- Kunkin vaihtoehdon todennäköisyys; arvot ovat yhteensä 1.
confidence- Todennäköisyysjakaumasta laskettu erillinen varmuusarvio; se ei ole valitun vaihtoehdon todennäköisyys.
score- Todennäköisyyksillä painotettu sijainti järjestetyllä asteikolla; se voi olla kahden tason välissä.
legend- Numeeristen Score-sijaintien vastaavuus määrittämiesi tasojen kuvauksiin.
noul- Kyllä/ei-kysymyksen tulos asteikolla 0 (ei) – 1 (kyllä).
Sama tilanne, kolme toisistaan riippumatonta kysymystä: Choice, Score ja Probability. Jokainen suoritus käyttää yhden päivän kokeilukerroista. Oikeanmuotoinenkin vastaus voi olla väärä. Testaa edustavia tapauksia ja aseta työnkulkuusi sopivat reitityskynnykset.
LangChain · PythonJev osaksi LangChain-agentin ohjauskerrosta
Ohjauskerros hallitsee mallikutsuja ja työkaluja. Päätöskohdassa Jev lukee viestin, suunnitellun työkalukutsun tai agentin tilan ja palauttaa tyypitetyn vastauksen. Koodisi päättää seuraavan vaiheen; avoimet tehtävät jäävät keskustelumallille.
ModelRouterMiddlewarebefore_agent → wrap_model_callLuokittele uusin käyttäjäviesti ennen ajoa, valitse malli ja käytä sitä koko ajon ajan. Valinta, todennäköisyydet ja luottamusarvo säilyvät agentin tilassa.
AutoModeMiddlewarewrap_tool_callTarkista valittu työkalukutsu ennen sen suorittamista. Jos Jev havaitsee riskin tai puuttuvan valtuutuksen, väliohjelmisto estää kutsun ja palauttaa virheestä kertovan ToolMessagen. Se ei pyydä ihmiseltä hyväksyntää.
TypeSafeClassifierChoice · Score · NoulVoit lisätä omia tarkistuspisteitä mukautetulla väliohjelmistolla: välitä agentin viestit tai tila TypeSafeClassifierille ja ohjaa koodia Choice-, Score- tai Noul-vastauksen perusteella tai siirrä epävarmat tapaukset arvioitaviksi.
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)
Palvelinpuolen TypeScript
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);