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

Schutzschalter und gute Ausweichlösungen

Nach dieser Lektion: Ich kann eine Funktion nützlich halten, während ihr Modell ausfällt.

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

Wie ein Schutzschalter funktioniert

Ein Schutzschalter (englisch Circuit Breaker) ist eine kleine Regel, die keine Aufrufe mehr an einen Dienst schickt, der immer wieder ausfällt. Solange er offen ist, nutzt die Funktion eine Ausweichlösung, statt auf einen Aufruf zu warten, der scheitern wird.

Das Modul über Kosten, Tracing und Zuverlässigkeit listet die Ausweichlösungen auf. Diese Lektion geht weiter: wann man aufhört anzurufen, wann man es wieder versucht und einen Notschalter, den eine Person drücken kann.

Am Ende dieser Lektion

Notiz

Ich kann eine Funktion nützlich halten, während ihr Modell ausfällt.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Schutzschaltereine Regel, die Aufrufe an einen ausfallenden Dienst stoppt
Geschlossender Normalzustand: Aufrufe gehen durch
Offender Stopp-Zustand: kein Aufruf, eine Ausweichlösung antwortet
Halboffenein Probeaufruf, ob der Dienst wieder da ist
AbkühlungSchritte, die man vor einer Probe wartet4
Notschalterein Schalter, der eine Funktion sofort abstellt

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

Drei Zustände

Ein Schutzschalter ist geschlossen, wenn alles gut läuft. Aufrufe gehen durch. Er zählt Fehler hintereinander. Erreicht die Zahl die Schwelle, hier 3, öffnet er.

Solange er offen ist, macht er keinen Aufruf. Nach der Abkühlung, hier 4 Schritte, wird er halboffen und lässt einen Aufruf durch. Ein Erfolg schließt ihn. Ein Fehler öffnet ihn wieder.

Durchgerechnetes Beispiel: Schritte 3 bis 9

SchrittAufruf würdeZustand vorgefundenBedientWarum
3scheiternGeschlossenGescheitertErster Fehler hintereinander, Zahl 1
4scheiternGeschlossenGescheitertZahl 2
5scheiternGeschlossenGescheitertZahl erreicht 3, also öffnet er
6klappenOffenÜbersprungenKein Aufruf. 1 Schritt seit dem Öffnen
7klappenOffenÜbersprungen2 Schritte seit dem Öffnen
8klappenOffenÜbersprungen3 Schritte seit dem Öffnen
9klappenHalboffenModell4 Schritte, die Probe klappt, also schließt er

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

Ein häufiger Fehler

Warnung

Viele denken, ein Schutzschalter solle beim ersten Fehler öffnen. Ein einzelner Fehler ist oft nur ein Ausrutscher. Zählen Sie Fehler hintereinander und lassen Sie einen Erfolg die Zahl zurücksetzen, sonst schaltet ein einziger schlechter Aufruf einen gesunden Dienst ab.

Was die Ausweichlösung sagt

Eine Ausweichlösung soll ehrlich und nützlich sein. Am besten ist eine gespeicherte Antwort auf dieselbe Frage. Gibt es keine, sagen Sie klar, dass der Assistent ausgelastet ist und wann man es wieder versuchen kann.

Zeigen Sie nie eine erfundene Antwort, als hätte das Modell sie gegeben.

Ein Notschalter ist die Entscheidung einer Person

Ein Schutzschalter reagiert auf Fehler. Einen Notschalter drückt eine Person, wenn das Modell zwar arbeitet, aber nicht genutzt werden soll. Es könnte falsche Antworten geben oder zu viel kosten.

Solange er an ist, wird jeder Aufruf übersprungen. Er berührt den Schutzschalter nicht, der behält seine eigene Zahl und seinen Zustand.

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 Schalter-Skript schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'function schritt(s, ausgang, i, schwelle, abkuehlung, notschalter) {' '  if (notschalter) return [s.zustand, \"übersprungen\"];' '  if (s.zustand === \"offen\" && i - s.geoeffnetBei >= abkuehlung) s.zustand = \"halboffen\";' '  const vorgefunden = s.zustand;' '  if (vorgefunden === \"offen\") return [vorgefunden, \"übersprungen\"];' '  if (ausgang === 1) { s.zustand = \"geschlossen\"; s.fehler = 0; return [vorgefunden, \"modell\"]; }' '  s.fehler = s.fehler + 1;' '  if (vorgefunden === \"halboffen\" || s.fehler >= schwelle) { s.zustand = \"offen\"; s.geoeffnetBei = i; s.fehler = 0; }' '  return [vorgefunden, \"gescheitert\"];' '}' > schalter.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 Schalter-Skript schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const ausgaenge = [1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1];' 'function fahren(aus) {' '  const s = { zustand: \"geschlossen\", fehler: 0, geoeffnetBei: 0 };' '  return ausgaenge.map(function (o, k) {' '    const r = schritt(s, o, k + 1, 3, 4, aus.includes(k + 1));' '    return r[0] + \":\" + r[1];' '  });' '}' >> schalter.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 Schalter-Skript schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const spur = fahren([]);' '  console.log(spur.slice(0, 10).join(\" \"));' '  console.log(spur.slice(10).join(\" \"));' '  const gemacht = spur.filter(function (t) { return t.endsWith(\"übersprungen\") === false; }).length;' '  console.log(\"Aufrufe gemacht \" + gemacht + \" von \" + spur.length);' '  console.log(\"Notschalter 9 und 10: \" + fahren([9, 10]).slice(8, 11).join(\" \"));' '  const f = \"Was sollte eine Funktion sagen, wenn ihr Modell nicht erreichbar ist? Antworten Sie in einem kurzen Satz.\";' '  const probe = \"Sagen Sie offen, dass der Assistent gerade ausgelastet ist, und bieten Sie eine gespeicherte Antwort oder einen anderen Weg an.\";' '  const antwort = await fragen([{ role: \"user\", content: f }], probe, 60);' '  console.log(\"Das Modell sagte: \" + antwort.text);' '}' 'main();' >> schalter.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.

Den Schutzschalter ausführen

Befehl
docker exec -w /home/node/project agent node schalter.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
geschlossen:modell geschlossen:modell geschlossen:gescheitert ...Schritte 1 bis 10, der vorgefundene Zustand und wie bedient wurde
offen:übersprungen offen:übersprungen offen:übersprungen halboffen:modellDer Schalter öffnet, wartet, und eine Probe klappt
Aufrufe gemacht 14 von 20Sechs Aufrufe wurden gespart
Notschalter 9 und 10: offen:übersprungen offen:übersprungen halboffen:modellDer Schalter übersprang zwei Schritte, und die Abkühlung lief weiter
Das Modell sagte: ...Ein Satz aus dem Labor. Eine Aufgezeichnete Probe, wenn kein Modell antwortet

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.