Ein Team scheitert anders als ein Agent
Ein Multi-Agenten-Ausfall ist eine Art, wie ein Agententeam entgleist, die kein einzelner Agent kennt. Das ist wichtig, denn der Fehler liegt im Gespräch zwischen ihnen, und jeder Agent wirkt für sich in Ordnung.
Man findet ihn, indem man den Verlauf liest, die Liste der gesendeten Nachrichten.
Am Ende dieser Lektion
Notiz
Ich kann den Fehler in einem Verlauf finden und seine Art benennen.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Verlauf | die Nachrichten, die Agenten gesendet haben, der Reihe nach |
| Schleife | dieselbe Nachricht, die immer wieder gesendet wird |
| Verklemmung | zwei Agenten, die jeweils auf den anderen warten |
| Kostenlawine | ein Token-Verbrauch, der über das Budget wächst |
| Weitergereicht | eine Vermutung, die später als Tatsache wiederholt wird |
| Schutz | eine Regel im Code, die einen Fehler früh stoppt |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Vier Arten, wie ein Team entgleist
Eine Schleife wiederholt eine Nachricht. Eine Verklemmung lässt zwei Agenten jeweils darauf warten, dass der andere beginnt. Eine Kostenlawine wächst, weil jede Runde den ganzen bisherigen Verlauf liest.
Die vierte ist leiser. Ein Arbeiter vermutet, der nächste Agent wiederholt die Vermutung, und beim dritten steht sie als Tatsache.
Ausgearbeitetes Beispiel: das Zeichen und der Schutz
| Fehler | Zeichen im Verlauf | Schutz |
|---|---|---|
| Schleife | Derselbe Absender, Empfänger und Text dreimal | Bei der dritten Wiederholung stoppen |
| Verklemmung | Zwei Nachrichten, die beide warte auf sagen, vertauscht | Ein Zeitlimit und eine Rangfolge |
| Weitergereicht | Eine Vermutung, dann dieselben Worte als Tatsache | Den Status mit der Aussage mitführen |
| Kostenlawine | Token je Runde, die immer weiter steigen | Ein Budget für den ganzen Lauf |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Prüfen Sie zuerst das deutlichste Zeichen
Ein echter Verlauf kann mehr als ein Zeichen zeigen. Legen Sie eine Reihenfolge fest und halten Sie sie ein. Verklemmung und Schleife stoppen beide die Arbeit, benennen Sie sie also vor den Kosten.
Das Modul über den Bau von Agenten behandelt den Schleifenschutz. Diese Lektion übt, alle vier zu erkennen, damit Sie wissen, welchen Schutz Sie ergänzen.
Ein häufiger Fehler
Warnung
Viele ergänzen einen Wiederholungsversuch, wenn ein Team stockt. Er verlängert eine Schleife und verkürzt keine Verklemmung. Benennen Sie zuerst den Fehler, dann wählen Sie den passenden Schutz.
Die Modellhilfe 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 Modellhilfe 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.
Den Fehlerfinder schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'function n(von, an, text, token, status) {' ' return { von: von, an: an, text: text, token: token, status: status };' '}' 'const V = {};' 'V.schleife = [n(\"Autor\", \"Prüfer\", \"prüfe den Entwurf\", 300, \"keiner\"), n(\"Prüfer\", \"Autor\", \"füge eine Quelle hinzu\", 200, \"keiner\"),' ' n(\"Autor\", \"Prüfer\", \"prüfe den Entwurf\", 300, \"keiner\"), n(\"Prüfer\", \"Autor\", \"füge eine Quelle hinzu\", 200, \"keiner\"),' ' n(\"Autor\", \"Prüfer\", \"prüfe den Entwurf\", 300, \"keiner\")];' 'V.verklemmung = [n(\"Planer\", \"Gutachter\", \"warte auf das Gutachten, bevor ich plane\", 150, \"keiner\"),' ' n(\"Gutachter\", \"Planer\", \"warte auf den Plan, bevor ich begutachte\", 150, \"keiner\")];' > ausfall.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 Fehlerfinder schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'V.weitergereicht = [n(\"Leser\", \"Planer\", \"die Samstagsbesuche stiegen um 40 Prozent\", 200, \"vermutung\"),' ' n(\"Planer\", \"Autor\", \"die Samstagsbesuche stiegen um 40 Prozent\", 200, \"tatsache\")];' 'V.lawine = [n(\"a\", \"b\", \"Runde eins\", 1000, \"keiner\"), n(\"b\", \"a\", \"Runde zwei\", 2000, \"keiner\"), n(\"a\", \"b\", \"Runde drei\", 4000, \"keiner\"),' ' n(\"b\", \"a\", \"Runde vier\", 8000, \"keiner\"), n(\"a\", \"b\", \"Runde fünf\", 16000, \"keiner\")];' 'V.in_ordnung = [n(\"Planer\", \"Leser\", \"suche die Nachfrage am Sonntag\", 200, \"keiner\"), n(\"Leser\", \"Planer\", \"212 von 400\", 150, \"tatsache\")];' >> ausfall.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 Fehlerfinder schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function zwei(ns, probe) {' ' return ns.some(function (x, i) { return ns.some(function (y, j) { return i < j && probe(x, y); }); });' '}' 'function verklemmung(ns) {' ' return zwei(ns, function (x, y) {' ' return x.text.startsWith(\"warte auf\") && y.text.startsWith(\"warte auf\") && x.von === y.an && x.an === y.von;' ' });' '}' 'function schleife(ns) {' ' return ns.some(function (x) {' ' return ns.filter(function (y) { return y.von === x.von && y.an === x.an && y.text === x.text; }).length >= 3;' ' });' '}' >> ausfall.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 Fehlerfinder schreiben, Teil 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function weitergereicht(ns) {' ' return zwei(ns, function (x, y) { return x.status === \"vermutung\" && y.status === \"tatsache\" && x.text === y.text; });' '}' 'function gesamt(ns) { return ns.reduce(function (a, x) { return a + x.token; }, 0); }' 'function finden(ns, budget) {' ' if (verklemmung(ns)) return \"verklemmung\";' ' if (schleife(ns)) return \"schleife\";' ' if (weitergereicht(ns)) return \"vermutung-weitergereicht\";' ' return gesamt(ns) > budget ? \"kostenlawine\" : \"keine\";' '}' >> ausfall.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 Fehlerfinder schreiben, Teil 5
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' for (const name of Object.keys(V)) {' ' console.log(name + \": \" + V[name].length + \" Nachrichten, \" + gesamt(V[name]) + \" Token, gefunden \" + finden(V[name], 20000));' ' }' ' const q = [{ role: \"user\", content: \"Nennen Sie in einem Satz eine einfache Regel, die verhindert, dass zwei Agenten endlos dieselbe Nachricht schicken.\" }];' ' const r = await fragen(q, \"Jede Nachricht zählen und bei der dritten Wiederholung stoppen.\", 40);' ' console.log(\"Modell: \" + r.text.trim());' '}' 'main();' >> ausfall.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 Fehlerfinder starten
docker exec -w /home/node/project agent node ausfall.jsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das sind aufgezeichnete Verläufe
Ein echter Lauf würde das Guthaben des Labors für ein einziges kaputtes Team verbrauchen. Die fünf Verläufe sind daher aufgezeichnete Daten, kurz und erfunden. Der Finder ist echter Code.
Der eine Live-Aufruf bittet um eine Regel. Ihre Worte sind bei jedem Lauf anders.
Eine mögliche Ausgabe
| Zeile | Was sie zeigt |
|---|---|
| schleife: 5 Nachrichten, 1300 Token, gefunden schleife | Eine Nachricht dreimal |
| verklemmung: 2 Nachrichten, 300 Token, gefunden verklemmung | Jeder wartet auf den anderen |
| weitergereicht: 2 Nachrichten, 400 Token, gefunden vermutung-weitergereicht | Eine Vermutung wurde zur Tatsache |
| lawine: 5 Nachrichten, 31000 Token, gefunden kostenlawine | Über dem Budget von 20000 |
| in_ordnung: 2 Nachrichten, 350 Token, gefunden keine | Kein Zeichen eines Fehlers |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.