tenkiOne
Beslutnings-API

Dokumentasjon_

Alt du trenger for å bruke Ramsey fra egen kode. API-et er kompatibelt med Jev, så klienter skrevet for /v1/systemone virker ved å bytte adresse og nøkkel.

Kom i gang   Forespørsel   Svar   Feil   Gode råd

Kom i gang_

1. Lag en konto og bekreft e-posten. Du får $25 i credits.
2. Lag en API-nøkkel under Konto. Den vises bare én gang, så lagre den som en hemmelighet.
3. Send nøkkelen i Authorization: Bearer tk_… på hvert kall.

curl

curl https://one.tenki.no/v1/systemone \
  -H "Authorization: Bearer tk_..." \
  -H "Content-Type: application/json" \
  -d @request.json

Python

import requests

r = requests.post(
    "https://one.tenki.no/v1/systemone",
    headers={"Authorization": "Bearer tk_..."},
    json={
        "model": "ramsey-1",
        "state": "Kunden vil endre leveringsadresse på ordre 123.",
        "questions": {
            "intent": {"type": "choice", "instructions": "Hva vil kunden?",
                        "criteria": {"endre_adresse": "", "kansellere": "", "faktura": ""}},
            "urgent": {"type": "noul", "instructions": "Haster det?"},
        },
    },
    timeout=30,
)
r.raise_for_status()
a = r.json()["answers"]
if a["intent"]["probabilities"][a["intent"]["choice"]] >= 0.9:
    route_to(a["intent"]["choice"])      # sikker nok: avgjør automatisk
else:
    send_to_human()                      # usikker: send videre

JavaScript

const r = await fetch("https://one.tenki.no/v1/systemone", {
  method: "POST",
  headers: { "Authorization": "Bearer tk_...", "Content-Type": "application/json" },
  body: JSON.stringify({
    model: "ramsey-1",
    state: { ticket: 4711, text: "Appen krasjer når jeg logger inn" },
    questions: {
      team: { type: "choice", instructions: "Hvem tar saken?",
               criteria: { support: "", utvikling: "", salg: "" } },
      severity: { type: "score", instructions: "Hvor alvorlig?",
                   criteria: ["Lav", "Middels", "Høy", "Kritisk"] }
    }
  })
});
const { answers } = await r.json();

Forespørsel_

POST https://one.tenki.no/v1/systemone med Content-Type: application/json.

FeltTypeBeskrivelse
statestring, objekt eller listeDet modellen skal vurdere: en e-post, en samtale, et JSON-objekt. Objekter sendes som formatert JSON.
questionsobjektNavngitte spørsmål, opptil 32. Navnet er nøkkelen du får svaret under.
modelstringValgfritt. ramsey-1.

Spørsmål

Typeinstructionscriteria
noulJa/nei-spørsmåletValgfritt: {"true": "når ja", "false": "når nei"}
choiceHva det skal velges mellom{"navn": "beskrivelse"}, 2–26 alternativer. Beskrivelsen kan være tom.
scoreHva som måles["laveste nivå", …, "høyeste nivå"], 2–10 nivåer i stigende rekkefølge

Gode beskrivelser i criteria gir bedre svar enn korte navn. Skriv dem som du ville forklart det for en ny kollega.

Svar_

{
  "model": "ramsey-1",
  "answers": {
    "team": {
      "type": "choice",
      "choice": "faktura",
      "probabilities": {
        "faktura": 0.986,
        "teknisk": 0.011,
        "salg": 0.003
      },
      "confidence": 0.9
    },
    "urgent": {
      "type": "noul",
      "noul": 0.93
    },
    "anger": {
      "type": "score",
      "score": 1.62,
      "median": 2,
      "interval": [
        1,
        2
      ],
      "probabilities": {
        "0": 0.04,
        "1": 0.3,
        "2": 0.66
      }
    }
  },
  "usage": {
    "input_tokens": 354,
    "output_tokens": 0
  }
}
FeltBeskrivelse
answers.<navn>.noulSannsynligheten for ja, 0–1.
answers.<navn>.choiceAlternativet med høyest sannsynlighet.
answers.<navn>.probabilitiesSannsynlighet for hvert alternativ. Summerer til 1.
answers.<navn>.confidenceHvor samlet fordelingen er: 0 = jevnt fordelt, 1 = alt på ett alternativ. Ikke det samme som sannsynligheten for å ha rett.
answers.<navn>.scoreForventet nivå (0 = laveste).
answers.<navn>.median, intervalMest sannsynlige nivå og et 80 %-intervall. Ikke i Jev.
usage.input_tokensTokens som belastes. Output er gratis.

Feil og grenser_

Feil har alltid formen {"error": {"code": "…", "message": "…"}}.

StatuscodeBetyr
400invalid_jsonKroppen er ikke gyldig UTF-8-JSON.
401unauthorizedMangler eller feil API-nøkkel.
402out_of_creditsKontoen er tom for credits.
413too_largeForespørselen er større enn 256 KB.
422invalid_requestMangler state eller questions, eller et spørsmål er ugyldig.
422too_many_questionsMer enn 32 spørsmål i én forespørsel.
429rate_limited / daily_limitFor mange kall. Vent så mange sekunder som Retry-After sier.
529overloadedAlle maskiner er opptatt. Prøv igjen om noen sekunder.
503no_backendIngen maskin svarer akkurat nå.

Grenser per nøkkel: 300 kall i minuttet og 200 000 i døgnet. Ved 429 og 529: vent og prøv igjen, gjerne med økende pause (1 s, 2 s, 4 s …).

Gode råd_

Bruk sannsynligheten, ikke bare svaret. La Ramsey avgjøre automatisk når sannsynligheten er høy, for eksempel over 0,9, og send resten til en større modell eller et menneske. Velg terskelen ut fra hvor dyrt en feil er hos deg, og sjekk den mot noen hundre ekte eksempler.

Spør flere ting i samme kall. Flere spørsmål om samme tilstand i én forespørsel er raskere enn mange enkeltkall.

Hold tilstanden til det som trengs. Ramsey leser opptil rundt 6000 tokens, men korte tilstander gir raskere svar.

Ramsey er sterk på klassifisering, ruting, triage, sjekk av svar mot krav og avgjørelser med klare regler. Den er svakere på regning, datoer og lange resonnementer i mange steg. Der bør usikre svar sendes videre.

Jev-kompatibilitet_

Forespørsels- og svarformatet følger Jevs /v1/systemone. Har du kode for Jev, bytt adressen til https://one.tenki.no og nøkkelen til en Tenki One-nøkkel. Feltene median og interval på score-svar er tillegg som Jev-klienter bare ignorerer.