ÕPPETUND 07 / 16 · 24 MIN · KESKTASE

AI-rakenduste ehitamine

AI API alused

Saada mudelipäring serverist, kontrolli sisendit ja väljundit ning käsitle ajalimiite, kulupiire ja vigu.

AiKoodi tehisintellekti ja koodi abstraktne illustratsioon
AI-rakendus vajab kasutajaliidest, serverikihti ja läbimõeldud piire.
Õpieesmärk

Oskad ehitada teenusepakkujast sõltumatu serveripoolse päringuvoo ilma võtit või toorest veateavet avaldamata.

Üks päring on terve elutsükkel

Päring algab enne mudelikõnet ja lõpeb pärast vastuse kuvamist. Igas etapis võib tekkida erinev viga, mida rakendus peab teadlikult käsitlema.

  1. Autendi kasutaja või piira anonüümset kasutust.
  2. Valideeri ja kärbi sisend.
  3. Koosta mudelile minimaalne kontekst.
  4. Sea ajapiir ja saada päring.
  5. Kontrolli vastuse kuju ning lubatud sisu.
  6. Salvesta ohutu mõõdik ja tagasta kasutajasõbralik tulemus.

Serveripoolne üldmuster

Teenuse URL ja vastuse struktuur sõltuvad valitud teenusest. Hoia need adapteris, et ülejäänud rakendus ei sõltuks ühest API kujust.

const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 15_000);

try {
  const response = await fetch(process.env.AI_API_URL!, {
    method: "POST",
    headers: {
      Authorization: "Bearer " + process.env.AI_API_KEY,
      "Content-Type": "application/json"
    },
    body: JSON.stringify({ input: validatedInput }),
    signal: controller.signal
  });
  if (!response.ok) throw new Error("AI_UPSTREAM_ERROR");
  return validateModelResponse(await response.json());
} finally {
  clearTimeout(timeout);
}

Erista vead ja korduskatsed

Vigast kasutaja sisendit ei parandata sama päringut korrates. Ajutist võrguviga võib korrata piiratud arvu kordi kasvava viitega. Tegevust põhjustav päring vajab idempotentsusvõtit, et kordus ei looks topelttulemust.

Piira kasutust mitmes kihis

Lisa sisendi ja väljundi pikkuspiir, kasutaja või IP kiiruspiir, paralleelsete päringute piir ning eelarvehoiatus. Kasutajale kuva üldine viga; detailne tehniline põhjus läheb turvalisse logisse.

type PublicAiError =
  | "INVALID_INPUT"
  | "TOO_MANY_REQUESTS"
  | "SERVICE_TIMEOUT"
  | "SERVICE_UNAVAILABLE";

// Ära tagasta brauserile teenuse võtit, toorest vastust ega sisemist stack trace’i.
PANE TÄHELE

Praktilised märkused

  • Mudelinimi ja hinnad võivad muutuda; hoia valik konfiguratsioonis ning mõõda tegelikku kasutust.
  • Struktuurne väljund peab läbima rakenduse skeemikontrolli ka siis, kui API lubab vastuse vormi määrata.
VÄLDI

Levinud vead

  • Salajase API võtme lisamine kliendikoodi või avalikku lähtekoodi.
  • Kõigi vigade pimesi kordamine ning seetõttu kulu või topelttegevuse kasvatamine.
TEE NII

Hea tava

  • Kasuta eraldi adapterit, ajapiiri ja selget avalikku veakoodi.
  • Logi päringu tunnus, kestus ja maht ilma saladuste või kogu tundliku sisuta.
PROOVI ISE

Praktiline harjutus

Kirjuta oma API voole sisendiskeem, neli veakoodi ja ajapiir. Lisa testid tühjale sisendile, aegumisele, vigasele mudelivastusele ja edukale päringule.

ARUTA JA KÜSI

Mis jäi lahtiseks?

Jaga harjutuse tulemust või küsi teema kohta avalikus AI-vestluses. Ära postita saladusi ega isikuandmeid.