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

Token-Kosten und Budgets für LLMs

Nach dieser Lektion: Ich kann verhindern, dass eine Funktion zu viel ausgibt, mit einem Limit je Nutzer, einem Tageslimit und einer klaren Meldung.

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

Verhindern, dass eine Funktion zu viel ausgibt

Ein Budget für eine Funktion mit Modell macht aus Token Geld und lehnt einen Aufruf ab, der ein Limit überschreiten würde. Das ist wichtig, weil die Kosten mit der Nutzung wachsen. Eine sehr aktive Person oder eine Schleife kann ein Monatsbudget an einem Nachmittag verbrauchen.

Ein Modell wird pro Token berechnet, und niemand sieht die Rechnung vor Monatsende. Ein Limit im eigenen Code ist die einzige Bremse, die sofort wirkt.

Am Ende dieser Lektion

Notiz

Ich kann verhindern, dass eine Funktion zu viel ausgibt, mit einem Limit je Nutzer, einem Tageslimit und einer klaren Meldung.

Schlüsselwörter

BegriffWas er bedeutet
Tokendie Einheit, die ein Modell liest und schreibt und nach der abgerechnet wird
Preislistedie Kosten für eine Million Token, Eingabe und Ausgabe
Limit je Nutzerdas Meiste, was ein Konto an einem Tag ausgeben darf
Tageslimitdas Meiste, was die ganze Funktion an einem Tag ausgeben darf
Kassenbuchdie laufende Aufzeichnung des Ausgegebenen
Ablehnungeinen Aufruf mit einem Grund abweisen

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

Token in Geld umrechnen

Ein Modell hat zwei Preise: einen für Eingabe-Token, einen für Ausgabe-Token, meist je Million. Ein Aufruf kostet die Eingabe-Token mal den ersten Preis plus die Ausgabe-Token mal den zweiten.

Nutzen Sie für Geld nie Fließkommazahlen. Rechnen Sie in einer kleinen ganzen Einheit. Hier heißt Euro je Million Token, dass jedes Token so viele Mikro-Euro kostet, die Rechnungen bleiben also ganzzahlig. Die Preise dieser Lektion sind erfunden.

Durchgerechnetes Beispiel: zwei Aufrufe

ModellEingabeAusgabeRechnungKosten
klein, Preise 1 und 4900300900 x 1 + 300 x 42100 Mikro-Euro
gross, Preise 10 und 40200100200 x 10 + 100 x 406000 Mikro-Euro

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

Ein Limit prüfen, bevor abgerechnet wird

Führen Sie ein Kassenbuch: die Summe jeder Person und die Summe des Tages. Prüfen Sie einen Aufruf, bevor er abgerechnet wird. Lehnen Sie ihn ab, wenn er die Person über ihr Limit bringt oder den Tag über seines. Eine Summe genau am Limit ist erlaubt.

Prüfen Sie das Nutzerlimit zuerst, denn seine Meldung hilft mehr. Ein abgelehnter Aufruf wird nicht abgerechnet. Und die Ablehnung nennt den Grund, in Worten, nach denen sich handeln lässt.

Ein häufiger Fehler

Warnung

Viele glauben, ein Limit sei nur gegen Missbrauch da, und setzen es erst nach dem Start. Kosten steigen auch durch einen Fehler, etwa eine Wiederholungsschleife oder einen langen Prompt an alle. Setzen Sie beide Limits, bevor die erste Person kommt.

Die Modell-Hilfe 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 Modell-Hilfe 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 Budget schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' '' '// Eine erfundene Preisliste: Euro je Million Token. Token mal Preis = Mikro-Euro.' 'const PREIS = { klein: { eingabe: 1, ausgabe: 4 }, gross: { eingabe: 10, ausgabe: 40 } };' 'const NUTZER_LIMIT = 5000; // Mikro-Euro für eine Person an einem Tag' 'const TAGES_LIMIT = 8000; // Mikro-Euro für alle an einem Tag' 'const ausgegeben = { nutzer: new Map(), tag: 0 };' 'function kosten(modell, eingabe, ausgabe) {' '  return eingabe * PREIS[modell].eingabe + ausgabe * PREIS[modell].ausgabe;' '}' > budget3.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 Budget schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function pruefen(nutzer, preis) {' '  const bisher = ausgegeben.nutzer.get(nutzer) || 0;' '  if (bisher + preis > NUTZER_LIMIT) return \"nutzer\";' '  if (ausgegeben.tag + preis > TAGES_LIMIT) return \"tag\";' '  return \"ok\";' '}' 'function abrechnen(nutzer, preis) {' '  ausgegeben.nutzer.set(nutzer, (ausgegeben.nutzer.get(nutzer) || 0) + preis);' '  ausgegeben.tag = ausgegeben.tag + preis;' '}' >> budget3.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 Budget schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function meldung(grund, nutzer) {' '  if (grund === \"nutzer\") return \"Hallo \" + nutzer + \", damit würden Sie Ihr Kontingent für heute überschreiten. Es wird um Mitternacht erneuert.\";' '  return \"Der Assistent hat sein Tageslimit für alle erreicht. Bitte versuchen Sie es morgen wieder.\";' '}' 'async function probelauf() {' '  const aufgabe = \"Grüße in fünf Wörtern.\";' '  const r = await fragen([{ role: \"user\", content: aufgabe }], \"Hallo, wie kann ich helfen?\", 20);' '  const e = r.eingabe === null ? Math.ceil(aufgabe.length / 4) : r.eingabe;' '  const a = r.ausgabe === null ? Math.ceil(r.text.length / 4) : r.ausgabe;' '  const art = r.eingabe === null ? \"geschätzt\" : \"gezählt\";' '  console.log(\"Ihr Aufruf: \" + e + \" Eingabe, \" + a + \" Ausgabe (\" + art + \"), \" + kosten(\"klein\", e, a) + \" Mikro-Euro\");' '}' >> budget3.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 Budget schreiben, Teil 4

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const aufrufe = [' '  { nutzer: \"anna\", modell: \"klein\", eingabe: 900, ausgabe: 300 },' '  { nutzer: \"ben\", modell: \"klein\", eingabe: 1000, ausgabe: 500 },' '  { nutzer: \"anna\", modell: \"gross\", eingabe: 200, ausgabe: 100 },' '  { nutzer: \"clara\", modell: \"gross\", eingabe: 300, ausgabe: 50 },' '  { nutzer: \"clara\", modell: \"klein\", eingabe: 500, ausgabe: 100 },' '  { nutzer: \"david\", modell: \"gross\", eingabe: 200, ausgabe: 50 },' '];' >> budget3.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 Budget schreiben, Teil 5

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  await probelauf();' '  aufrufe.forEach(function (a, stelle) {' '    const preis = kosten(a.modell, a.eingabe, a.ausgabe);' '    const grund = pruefen(a.nutzer, preis);' '    const kopf = \"#\" + (stelle + 1) + \" \" + a.nutzer + \" \" + a.modell + \" \" + preis + \" Mikro-Euro: \";' '    if (grund === \"ok\") { abrechnen(a.nutzer, preis); console.log(kopf + \"ok\"); }' '    else console.log(kopf + meldung(grund, a.nutzer));' '  });' '  console.log(\"Heute ausgegeben: \" + ausgegeben.tag + \" Mikro-Euro = \" + (ausgegeben.tag / 1000000).toFixed(6) + \" Euro\");' '}' 'main();' >> budget3.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 Budget ausführen

Befehl
docker exec -w /home/node/project agent node budget3.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.

Eine mögliche Ausgabe

ZeileWas sie zeigt
Ihr Aufruf: 42 Eingabe, 17 Ausgabe (gezählt)...Ihr eigener Aufruf. Gezählt, wenn die Antwort Nutzungsdaten hat, sonst geschätzt. Er ändert sich bei jedem Lauf
#1 anna klein 2100 Mikro-Euro: okAbgerechnet
#3 anna gross 6000 Mikro-Euro: Hallo anna...Vom Nutzerlimit abgelehnt, mit Meldung
#4 clara gross 5000 Mikro-Euro: Der Assistent...Vom Tageslimit abgelehnt
Heute ausgegeben: 6000 Mikro-Euro = 0.006000 EuroNur die abgerechneten Aufrufe zählen

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.