Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Cache und Kosten einer KI-Funktion

Nach dieser Lektion: Ich kann vorhersagen, was eine Funktion kostet und wie viel ein Cache spart.

Lektion, 65 Min.7 BefehleLab für KI-Coding-Agenten: mit opencode Code erklären und reparieren lassen und die Arbeit prüfen

So prognostizieren Sie die Kosten einer Funktion

Die Kosten einer KI-Funktion sind die Zahl der bezahlten Aufrufe mal der Preis eines Aufrufs. Ein Cache senkt die erste Zahl, denn eine wiederholte Frage wird aus dem Speicher beantwortet.

Das Modul über Kosten, Tracing und Zuverlässigkeit zeigt, wie man einen Cache-Schlüssel baut und wann er abläuft. Diese Lektion geht weiter: Sie zählt Treffer in einem Strom von Anfragen und prognostiziert einen Monat aus einer Woche.

Am Ende dieser Lektion

Notiz

Ich kann vorhersagen, was eine Funktion kostet und wie viel ein Cache spart.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Cacheein Speicher für Antworten, die Sie schon bezahlt haben
Treffereine Anfrage, die aus dem Cache kommt
Fehlgriffeine Anfrage, die der Cache nicht kennt, Sie zahlen also
Trefferquoteder Prozentsatz der Anfragen, die Treffer sind50
Ablaufwie lange eine gespeicherte Antwort gilt
Prognoseeine Rechnung, die aus der Vergangenheit die Zukunft schätzt

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Was ein Aufruf kostet

Ein Aufruf kostet seine Eingabe-Token mal den Eingabepreis, plus seine Ausgabe-Token mal den Ausgabepreis. Die Ausgabe ist meistens teurer.

Damit alle Rechnungen ganze Zahlen bleiben, zählen Sie in Einheiten. Eine Einheit ist ein Millionstel Euro. Die Preise hier sind erfunden.

Durchgerechnetes Beispiel: ein Aufruf

TeilTokenPreis je TokenEinheiten
Eingabe1203360
Ausgabe80151200
Ein Aufruf2001560

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein häufiger Fehler

Warnung

Viele denken, ein Cache spare bei jeder Funktion gleich viel. Das stimmt nicht: Er spart nur so viel, wie Fragen sich wiederholen. Fragt bei einer Funktion niemand zweimal dasselbe, spart er fast nichts.

Verkehr durch einen Cache abspielen

Um eine Trefferquote zu messen, spielen Sie echte oder erzeugte Anfragen ab. Nummerieren Sie sie ab 0. Eine Anfrage ist ein Treffer, wenn dieselbe Frage vor weniger als ttl Anfragen gespeichert wurde. Die Zahl ttl sagt also, wie viele Anfragen lang eine gespeicherte Antwort gilt.

Ein Treffer erneuert die gespeicherte Antwort nicht. Sie läuft nach ihrer eigenen Uhr ab, also bekommt auch eine beliebte Frage eine frische Antwort, wenn ihre Zeit um ist.

Durchgerechnetes Beispiel: ttl von 3

AnfragenummerFrageGespeichert beiErgebnis
0anirgendsFehlgriff, bei 0 speichern
1a0Treffer, 1 ist unter 3
2bnirgendsFehlgriff, bei 2 speichern
3a0Fehlgriff, 3 ist nicht unter 3, bei 3 speichern
4a3Treffer

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Einen Monat aus einer Woche prognostizieren

Addieren Sie die Anfragen einer Woche. Ein Monat hat etwa 30 Tage, die Monatsanfragen sind also die Woche mal 30, geteilt durch 7.

Bezahlen müssen Sie nur die Fehlgriffe. Multiplizieren Sie mit 100 minus Trefferquote, teilen Sie durch 100 und multiplizieren Sie dann mit den Kosten eines Aufrufs.

Durchgerechnetes Beispiel: eine Woche mit 835 Anfragen

SchrittRechnungErgebnis
Wochensumme120 + 135 + 150 + 160 + 170 + 60 + 40835
Monatsanfragen835 mal 30 geteilt durch 73578
Bezahlte Aufrufe bei 50 Prozent3578 mal 50 geteilt durch 1001789
Kosten in Einheiten1789 mal 15602790840

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Die Modellhilfe schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const basis = process.env.AI_URL || \"http://ai:4000\";' '// Die Token einer Antwort oder null, wenn sie keine nennt.' 'function zaehlen(daten, name) {' '  return daten.usage && typeof daten.usage[name] === \"number\" ? daten.usage[name] : null;' '}' > model.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Modellhilfe schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function fragen(nachrichten, probe, max) {' '  try {' '    const res = await fetch(basis + \"/v1/chat/completions\", {' '      method: \"POST\",' '      headers: { \"content-type\": \"application/json\", authorization: \"Bearer lab\" },' '      body: JSON.stringify({ model: \"lab\", messages: nachrichten, max_tokens: max || 100 }),' '      signal: AbortSignal.timeout(30000),' '    });' '    if (res.ok === false) throw new Error(\"Status \" + res.status);' '    const d = await res.json();' '    return { text: d.choices[0].message.content, eingabe: zaehlen(d, \"prompt_tokens\"), ausgabe: zaehlen(d, \"completion_tokens\"), aufgezeichnet: false };' '  } catch (fehler) {' '    console.log(\"Aufgezeichnete Probe: Kein Modell hat geantwortet (\" + fehler.message + \").\");' '    return { text: probe, eingabe: null, ausgabe: null, aufgezeichnet: true };' '  }' '}' 'module.exports = { fragen };' >> model.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Das Cache-Skript schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'function naechster(start) { return (start * 75 + 74) % 65537; }' 'const tabelle = [0, 0, 0, 1, 1, 2, 3, 4, 5, 6];' 'function verkehr(start, anzahl) {' '  const aus = [];' '  for (let i = 0; i < anzahl; i++) { start = naechster(start); aus.push(\"f\" + tabelle[start % 10]); }' '  return aus;' '}' > cache.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Das Cache-Skript schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function abspielen(anfragen, ttl) {' '  const gespeichert = {};' '  let treffer = 0;' '  anfragen.forEach(function (schluessel, i) {' '    if (schluessel in gespeichert && i - gespeichert[schluessel] < ttl) treffer = treffer + 1;' '    else gespeichert[schluessel] = i;' '  });' '  return treffer;' '}' 'const woche = [120, 135, 150, 160, 170, 60, 40];' 'const jeAufruf = 120 * 3 + 80 * 15;' >> cache.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Das Cache-Skript schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const anfragen = verkehr(7, 40);' '  console.log(\"erste 8: \" + anfragen.slice(0, 8).join(\" \"));' '  for (const ttl of [5, 10, 20]) {' '    const treffer = abspielen(anfragen, ttl);' '    const prozent = Math.floor(treffer * 100 / 40);' '    const monat = Math.floor(woche.reduce(function (a, b) { return a + b; }, 0) * 30 / 7);' '    const bezahlt = Math.floor(monat * (100 - prozent) / 100);' '    console.log(\"ttl \" + ttl + \": \" + treffer + \" Treffer, \" + prozent + \" Prozent, der Monat bezahlt \" + bezahlt + \" Aufrufe, \" + bezahlt * jeAufruf + \" Einheiten\");' '  }' >> cache.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Das Cache-Skript schreiben, Teil 4

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' '  const probe = \"Eine wiederholte Frage wird aus dem Speicher beantwortet, also wird kein neuer Aufruf bezahlt.\";' '  const antwort = await fragen([{ role: \"user\", content: \"Warum kann ein Cache eine Funktion günstiger machen? Antworten Sie in einem kurzen Satz.\" }], probe, 60);' '  console.log(\"Das Modell sagte: \" + antwort.text);' '  console.log(\"Ausgabe-Token: \" + (antwort.ausgabe === null ? \"nicht gemeldet\" : antwort.ausgabe));' '}' 'main();' >> cache.js"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Das Abspielen im Cache ausführen

Befehl
docker exec -w /home/node/project agent node cache.js

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Was der Run ausgibt

ZeileWas sie zeigt
erste 8: f6 f6 f0 f2 f0 f0 f5 f0Der erzeugte Verkehr, für alle gleich
ttl 5: 16 Treffer, 40 ProzentEin kurzer Ablauf gibt weniger Treffer
ttl 10: 20 Treffer, 50 ProzentDazwischen liegt die Trefferquote auch dazwischen
ttl 20: 27 Treffer, 67 ProzentEin längerer Ablauf gibt mehr Treffer und eine kleinere Rechnung
Das Modell sagte: ...Ein Satz aus dem Labor. Eine Aufgezeichnete Probe, wenn kein Modell antwortet
Ausgabe-Token: ...Die Zahl, die die Antwort meldet, oder nicht gemeldet

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Über dieses Lab und seinen Quellcode: Lab für KI-Coding-Agenten: mit opencode Code erklären und reparieren lassen und die Arbeit prüfen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.