Weiterarbeiten, wenn das Modell scheitert
Eine Ausweichlösung ist das, was eine Funktion tut, wenn ein Modellaufruf scheitert, damit die Person trotzdem etwas bekommt. Das ist wichtig, weil Aufrufe auf mehrere Arten scheitern und eine einzige Antwort darauf für die meisten falsch ist.
Eine Zeitüberschreitung verdient eine Wiederholung. Eine Ablehnung nicht. Ein aufgebrauchtes Tagesbudget braucht eine Cache-Antwort oder eine ehrliche Meldung. Wählen Sie je nach Fehler.
Am Ende dieser Lektion
Notiz
Ich kann eine Funktion am Laufen halten, wenn ein Modellaufruf scheitert, indem ich für jede Fehlerart eine Ausweichlösung wähle.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Ausweichlösung | was Sie stattdessen tun, wenn ein Aufruf scheitert |
| Wiederholung | dasselbe Modell nach einer Wartezeit erneut fragen |
| Zweites Modell | ein anderes Modell, das gefragt wird, wenn das erste scheitert |
| Einfache Antwort | eine feste, ehrliche Meldung ohne Modell |
| Abstufen | eine kleinere Antwort geben statt keiner |
| Fehlerart | der Grund, warum ein Aufruf scheiterte |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine Ausweichlösung ist eine Kette in Reihenfolge
Ordnen Sie die Optionen von der besten Antwort bis zur am stärksten abgestuften. Zuerst eine Wiederholung, nach einer Wartezeit. Dann ein zweites Modell. Dann eine Cache-Antwort, die alt sein kann. Zuletzt eine einfache Antwort: eine feste, wahre Meldung, die der Person sagt, was zu tun ist.
Jeder Schritt kostet Zeit und Geld. Eine Kette, die bei jedem Fehler alles versucht, verdoppelt Ihre Rechnung bei einem Ausfall.
Durchgerechnetes Beispiel: welche Ausweichlösung passt
| Fehler | Zuerst | Warum |
|---|---|---|
| Zeitüberschreitung, Ratenlimit | Einmal wiederholen | Geht oft von selbst vorbei |
| Serverfehler | Zweites Modell | Das erste ist ausgefallen |
| Falsches Format | Einmal wiederholen | Ein zweiter Versuch klappt oft |
| Ablehnung | Einfache Antwort | Nochmal fragen ändert nichts |
| Budget aufgebraucht | Cache-Antwort | Kein Aufruf ist erlaubt |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die Kette begrenzen und es sagen
Setzen Sie jedem Schritt ein Limit: eine Wiederholung, ein zweites Modell. Warten Sie zwischen den Versuchen und rechnen Sie die Wartezeit auf das Zeitlimit der Person an. Lassen Sie eine Ausweichlösung nie einen Fehler verbergen. Protokollieren Sie, welcher Schritt geantwortet hat.
Eine Cache-Antwort kann veraltet sein, sagen Sie es also, wenn es zählt. Eine einfache Antwort darf nie vortäuschen, vom Modell zu stammen.
Ein häufiger Fehler
Warnung
Viele glauben, Wiederholen sei immer die sicherste Ausweichlösung. Doch eine Ablehnung zu wiederholen kostet Geld, und bei einem Ausfall zu wiederholen erhöht die Last. Wiederholen Sie nur Fehler, die von selbst vorbeigehen können, und nur einmal.
Die Modell-Hilfe schreiben, Teil 1
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
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.
Die Ausweichkette schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' '' 'let jetzt = 0; // Millisekunden auf einer Uhr, die wir selbst weiterstellen' 'const speicher = new Map([[\"oeffnungszeiten\", \"Wir öffnen um neun Uhr und schließen um siebzehn Uhr.\"]]);' 'const EINFACH = \"Leider kann der Assistent gerade nicht antworten. Bitte versuchen Sie es später noch einmal.\";' '// Ein aufgezeichneter Fehler ersetzt einen echten. Nichts hier löst einen echten Fehler aus.' 'function scheitern(art) { throw new Error(art); }' > fallback5.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 Ausweichkette schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function zweitesModell() {' ' const nachrichten = [{ role: \"user\", content: \"Nenne die Öffnungszeiten, neun bis siebzehn Uhr, in einem Satz.\" }];' ' return (await fragen(nachrichten, \"Wir öffnen um neun Uhr und schließen um siebzehn Uhr.\", 40)).text;' '}' >> fallback5.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 Ausweichkette schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function antworten(frage, zweites) {' ' const schritte = [' ' [\"erstes Modell\", function () { scheitern(\"ratenlimit\"); }],' ' [\"Wiederholung\", function () { jetzt = jetzt + 200; scheitern(\"ratenlimit\"); }],' ' [\"zweites Modell\", zweites],' ' [\"Cache\", function () { return speicher.has(frage) ? speicher.get(frage) : scheitern(\"fehlt\"); }],' ' ];' >> fallback5.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 Ausweichkette schreiben, Teil 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' ' for (const [name, lauf] of schritte) {' ' try {' ' const text = await lauf();' ' console.log(frage + \": \" + name + \" hat nach \" + jetzt + \" ms geantwortet\");' ' return text;' ' } catch (fehler) {' ' console.log(frage + \": \" + name + \" ist gescheitert (\" + fehler.message + \")\");' ' }' ' }' ' console.log(frage + \": einfache Antwort\");' ' return EINFACH;' '}' >> fallback5.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 Ausweichkette schreiben, Teil 5
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' const ausfall = function () { scheitern(\"serverfehler\"); };' ' await antworten(\"oeffnungszeiten\", zweitesModell);' ' await antworten(\"oeffnungszeiten\", ausfall);' ' await antworten(\"erstattung\", ausfall);' '}' 'main();' >> fallback5.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 Kette ausführen
docker exec -w /home/node/project agent node fallback5.jsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Fehler sind aufgezeichnet
Nichts in diesem Run löst einen echten Fehler aus. Die Ratenlimits und der Serverfehler stehen als aufgezeichnete Daten im Skript, und die Uhr ist eine Zahl, die es weiterstellt. Nur das zweite Modell ist ein echter Aufruf.
Ein echtes System bekommt diese Fehler aus einem echten Netz und wartet zwischen den Versuchen wirklich.
Eine mögliche Ausgabe
| Zeile | Was sie zeigt |
|---|---|
| oeffnungszeiten: erstes Modell ist gescheitert (ratenlimit) | Ein aufgezeichneter Fehler |
| oeffnungszeiten: Wiederholung ist gescheitert (ratenlimit) | Die Wiederholung, nach 200 ms auf unserer Uhr |
| oeffnungszeiten: zweites Modell hat nach 200 ms geantwortet | Der einzige echte Aufruf |
| oeffnungszeiten: Cache hat nach 400 ms geantwortet | Das zweite Modell ist ausgefallen, also antwortet der Cache |
| erstattung: einfache Antwort | Nichts war im Cache, also die einfache Meldung |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.