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

Orchestrator- und Arbeiter-Agenten

Nach dieser Lektion: Ich kann eine Aufgabe in Aufträge zerlegen, die für sich allein stehen, und jedes Ergebnis prüfen, bevor ich sie verbinde.

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

Ein Arbeiter kennt nur seinen Auftrag

Das Orchestrator-Arbeiter-Muster ist ein Programm, in dem ein Agent eine Aufgabe in Aufträge zerlegt, jeden einem Arbeiter gibt und die Ergebnisse verbindet. Das ist wichtig, denn ein Arbeiter weiß nichts außer seinem Auftrag.

Ein vager Auftrag ergibt eine selbstsichere Antwort auf die falsche Frage. Ein Auftrag, der für sich allein steht, ergibt eine Antwort, die man prüfen kann.

Am Ende dieser Lektion

Notiz

Ich kann eine Aufgabe in Aufträge zerlegen, die für sich allein stehen, und jedes Ergebnis prüfen, bevor ich sie verbinde.

Schlüsselwörter

BegriffWas er bedeutet
Auftragalles, was ein Arbeiter bekommt: Frage, Material und Form der Antwort
Ergebnisformdie Felder, die ein Arbeiter zurückschicken muss
Materialder Text, den ein Arbeiter für seine Antwort nutzen darf
Validierungdie Prüfung eines Ergebnisses, bevor es genutzt wird
Verbindendie angenommenen Ergebnisse zusammenfügen
Unbekannte Quelleeine Quelle, die ein Arbeiter nennt, aber nie bekam

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

Was in einen Auftrag gehört

Ein Arbeiter sieht weder die Aufgabe noch die anderen Aufträge noch das Gespräch. Was nicht im Auftrag steht, existiert nicht.

Ein Auftrag enthält also die Frage, das erlaubte Material, die Form der Antwort und eine Größengrenze. Das Material ist der Text selbst, nicht das Versprechen, dass der Arbeiter ihn nachschlägt.

Ausgearbeitetes Beispiel: ein Auftrag

FeldBeispielWarum es da ist
frageWas würde ein Sonntag an Personalzeit kosten?Eine Frage, nicht die ganze Aufgabe
materialDas Personalkostenblatt als TextDer Arbeiter darf nichts anderes nutzen
quellens2Damit die Antwort sagt, woher sie kommt
antwortEin Objekt mit antwort und quellenDamit der Orchestrator sie prüfen kann

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

Ein Ergebnis prüfen, bevor man es verbindet

Ein Ergebnis sind Daten aus einem Teil des Systems, den Sie nicht kontrollieren. Prüfen Sie zuerst die Form: Gibt es eine Antwort, gibt es eine Liste von Quellen? Prüfen Sie dann, ob jede Quelle eine ist, die der Auftrag gegeben hat.

Verbinden Sie nur, was besteht. Das Modul über den Bau von Agenten gibt eine Nachricht zwischen Agenten weiter. Hier entscheiden wir, ob wir glauben, was zurückkommt.

Ein häufiger Fehler

Warnung

Viele verbinden alle Ergebnisse und räumen danach auf. Ein schlechtes Ergebnis wiegt dann in der Endantwort so viel wie ein gutes. Lehnen Sie an der Tür ab und behalten Sie den Grund.

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.

Den Orchestrator schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'const QUELLEN = {' '  s1: \"Umfrage: 212 von 400 Besuchern wünschten sich Sonntagsöffnung.\",' '  s2: \"Personal: sechs Stunden zu 18 Euro pro Stunde sind 108 Euro an jedem Sonntag.\",' '  s3: \"Besuche: Samstag gab es letzten Monat 310 Besuche, an einem Werktag 120.\",' '};' '// Ein Auftrag trägt alles, was sein Arbeiter nutzen darf: die Frage und den Text.' 'function auftrag(id, frage, ids) {' '  const material = ids.map(function (i) { return QUELLEN[i]; });' '  return { id: id, frage: frage, quellen: ids, material: material, antwort: \"ein Objekt mit antwort und quellen\" };' '}' > team.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 Orchestrator schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Arbeiter mit Skript. Jeder sieht nur seinen Auftrag.' 'const ARBEITER = {' '  b1: function (a) { return { antwort: \"212 von 400 Besuchern wollen es\", quellen: [\"s1\"] }; },' '  b2: function (a) { return { antwort: \"108 Euro an jedem Sonntag\", quellen: [\"s2\"] }; },' '  b3: function (a) { return { antwort: \"Am Wochenende ist viel los\", quellen: [\"s9\"] }; },' '};' 'function probleme(a, e) {' '  const aus = [];' '  const voll = typeof e.antwort === \"string\" && e.antwort.trim().length > 0;' '  if (voll === false) aus.push(\"Antwort fehlt\");' '  if (Array.isArray(e.quellen) === false || e.quellen.length === 0) aus.push(\"Quellen fehlen\");' '  else e.quellen.forEach(function (q) { if (a.quellen.includes(q) === false) aus.push(\"unbekannte Quelle \" + q); });' '  return aus;' '}' >> team.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 Orchestrator schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const eigene = \"Wie voll ist die Bibliothek an einem Wochenendtag?\";' '  const q = [{ role: \"user\", content: \"Schreiben Sie eine kurze Forschungsfrage dazu, wie voll eine Bibliothek am Wochenende ist.\" }];' '  const text = (await fragen(q, eigene, 30)).text.trim();' '  const auftraege = [' '    auftrag(\"b1\", \"Wie viele Besucher wünschen sich Sonntagsöffnung?\", [\"s1\"]),' '    auftrag(\"b2\", \"Was würde ein Sonntag an Personalzeit kosten?\", [\"s2\"]),' '    auftrag(\"b3\", text.endsWith(\"?\") ? text : eigene, [\"s3\"]),' '  ];' '  for (const a of auftraege) {' '    const e = ARBEITER[a.id](a);' '    const p = probleme(a, e);' '    console.log(a.id + \" [\" + a.material.length + \" Quelle] \" + a.frage);' '    console.log(\"   \" + (p.length ? \"ABGELEHNT: \" + p.join(\", \") : \"angenommen: \" + e.antwort));' '  }' '}' 'main();' >> team.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 Orchestrator starten

Befehl
docker exec -w /home/node/project agent node team.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 Arbeiter sind geskriptet

Das Labor hat nur ein Modell, ein echtes Team wäre also ein Modell in allen Rollen. Die drei Arbeiter hier sind einfache Funktionen mit aufgezeichneten Antworten. Der eine Live-Aufruf formuliert eine Forschungsfrage.

Ein echtes System schickt jeden Auftrag an ein Modell, und die Prüfung bleibt dieselbe.

Eine mögliche Ausgabe

ZeileWas sie zeigt
b1 [1 Quelle] Wie viele Besucher wünschen sich Sonntagsöffnung?Ein Auftrag mit seinem Material
angenommen: 212 von 400 Besuchern wollen esForm und Quellen bestehen
angenommen: 108 Euro an jedem SonntagAuch der zweite Arbeiter besteht
ABGELEHNT: unbekannte Quelle s9Der dritte nennt eine Quelle, die er nie bekam

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.