Das Team zusammensetzen
Ein Forschungsteam aus Agenten besteht aus einem Orchestrator, einigen Arbeitern, einer Prüfung jedes Ergebnisses und einer Regel zum Stoppen. Das ist wichtig, denn jedes bisherige Teil kostet etwas, und ein Team ohne Grenze hat kein Ende.
Diese Lektion bindet das Modul in eine einzige Schleife mit einem Token-Budget.
Am Ende dieser Lektion
Notiz
Ich kann einen Orchestrator und Arbeiter mit Budget, Prüfung und Stoppregel laufen lassen.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Budget | die meisten Token, die ein ganzer Lauf ausgeben darf |
| Stoppregel | ein Test, der den Lauf beendet, bevor die Aufträge zu Ende sind |
| Angenommen | ein Ergebnis, das alle Prüfungen bestanden hat |
| Abgelehnt | ein Ergebnis, das ausgelassen wird, mit seinen Gründen |
| Ausgegeben | die bisher verbrauchten Token, von guten und schlechten Ergebnissen |
| Genug | die Zahl angenommener Ergebnisse, die den Lauf beendet |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine Schleife, drei Grenzen
Der Orchestrator nimmt die Aufträge der Reihe nach. Vor jedem stellt er zwei Fragen. Habe ich schon genug? Könnte dieser Auftrag mich über das Budget bringen?
Dann fragt er den Arbeiter und prüft das Ergebnis. Jede Antwort kostet, also zählt Ausgegeben die guten wie die schlechten.
Ausgearbeitetes Beispiel: ein Durchlauf der Schleife
| Schritt | Frage | Wenn ja |
|---|---|---|
| 1 | Sind genug Ergebnisse angenommen? | Stopp, Grund genug |
| 2 | Ausgegeben plus Limit dieses Auftrags über dem Budget? | Stopp, Grund Budget |
| 3 | Den Arbeiter fragen, seine Token zu Ausgegeben addieren | Immer, gut oder schlecht |
| 4 | Besteht das Ergebnis die Prüfung? | Annehmen, sonst mit Gründen ablehnen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Warum die Grenze vor dem Aufruf steht
Das Budget nach einem Aufruf zu prüfen, ist zu spät: Die Token sind weg. Die Schleife reserviert also den schlimmsten Fall. Sie nimmt das Limit des Auftrags selbst und stoppt, wenn es nicht passen würde.
Dieselbe Idee schützt Zeit und Rundenzahl. Ein Team hat immer eine Regel, die es beendet.
Ein häufiger Fehler
Warnung
Viele zählen nur die guten Ergebnisse gegen das Budget. Ein Arbeiter, der scheitert, liest und schreibt trotzdem Token. Zählen Sie alles, was der Lauf angefordert hat, sonst passt die Rechnung nicht zum Budget.
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.
Das Forschungsteam schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'const AUFTRAEGE = [' ' { id: \"b1\", frage: \"Wie viele Besucher wünschen sich Sonntagsöffnung?\", quellen: [\"s1\"], max: 900 },' ' { id: \"b2\", frage: \"Was würde ein Sonntag an Personalzeit kosten?\", quellen: [\"s2\"], max: 900 },' ' { id: \"b3\", frage: \"Wie voll ist es an einem Wochenendtag?\", quellen: [\"s3\"], max: 900 },' '];' '// Die Antworten dreier geskripteter Arbeiter, aufgezeichnet.' 'const AUFGEZEICHNET = {' ' b1: { antwort: \"212 von 400 Besuchern wollen es\", quellen: [\"s1\"], token: 700 },' ' b2: { antwort: \"108 Euro an jedem Sonntag\", quellen: [\"s2\"], token: 850 },' ' b3: { antwort: \"310 Besuche an einem Samstag\", quellen: [\"s3\"], token: 1200 },' '};' > 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.
Das Forschungsteam schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function probleme(a, e) {' ' const aus = [];' ' if (e.antwort.trim().length === 0) aus.push(\"Antwort fehlt\");' ' e.quellen.forEach(function (q) { if (a.quellen.includes(q) === false) aus.push(\"unbekannte Quelle \" + q); });' ' if (e.token > a.max) aus.push(\"über seinem Limit\");' ' 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.
Das Forschungsteam schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function team(budget, genug) {' ' const bilanz = { angenommen: [], abgelehnt: [], ausgegeben: 0, stopp: \"fertig\" };' ' for (const a of AUFTRAEGE) {' ' if (bilanz.angenommen.length >= genug) { bilanz.stopp = \"genug\"; break; }' ' if (bilanz.ausgegeben + a.max > budget) { bilanz.stopp = \"Budget\"; break; }' ' const e = AUFGEZEICHNET[a.id];' ' bilanz.ausgegeben += e.token;' ' const p = probleme(a, e);' ' if (p.length > 0) bilanz.abgelehnt.push(a.id + \" (\" + p.join(\", \") + \")\");' ' else bilanz.angenommen.push(e.antwort);' ' }' ' return bilanz;' '}' >> 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.
Das Forschungsteam schreiben, Teil 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' let erste = null;' ' for (const lauf of [[2500, 3], [1500, 3], [4000, 2]]) {' ' const b = team(lauf[0], lauf[1]);' ' erste = erste || b;' ' console.log(\"Budget \" + lauf[0] + \", genug \" + lauf[1] + \": angenommen \" + b.angenommen.length + \", abgelehnt \" + b.abgelehnt.length + \", ausgegeben \" + b.ausgegeben + \", Stopp \" + b.stopp);' ' if (b.abgelehnt.length > 0) console.log(\" abgelehnt: \" + b.abgelehnt.join(\"; \"));' ' }' ' const q = [{ role: \"user\", content: \"Schreiben Sie einen Satz aus diesen Befunden: \" + erste.angenommen.join(\"; \") }];' ' const r = await fragen(q, \"Besucher wünschen sich Sonntagsöffnung, und sie kostet 108 Euro pro Sonntag.\", 40);' ' console.log(\"Zusammenfassung: \" + r.text.trim());' '}' '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.
Das Forschungsteam starten
docker exec -w /home/node/project agent node team.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 Arbeiter sind aufgezeichnet
Die drei Arbeiter sind aufgezeichnete Antworten mit ihren Token-Zahlen, damit jede Studierende dieselben Summen sieht. Der eine Live-Aufruf formuliert eine Zusammenfassung des Angenommenen.
Im ersten Lauf liegt ausgegeben mit 2750 über dem Budget von 2500: Der dritte Arbeiter brach sein eigenes Limit. Das Budget wird nur vor einem Auftrag geprüft, nicht darauf, was ein Arbeiter dann wirklich verbraucht.
Ein echtes Team schickt jeden Auftrag an ein Modell, und die Schleife drumherum bleibt dieselbe.
Eine mögliche Ausgabe
| Zeile | Was sie zeigt |
|---|---|
| Budget 2500, genug 3: angenommen 2, abgelehnt 1, ausgegeben 2750, Stopp fertig | Die dritte Antwort brach ihr Limit von 900 Token (sie brauchte 1200), darum liegt ausgegeben über dem Budget |
| abgelehnt: b3 (über seinem Limit) | Der Grund bleibt erhalten |
| Budget 1500, genug 3: angenommen 1, abgelehnt 0, ausgegeben 700, Stopp Budget | Schon 700 ausgegeben, und der nächste Auftrag darf bis zu 900 brauchen: Das wäre über 1500 |
| Budget 4000, genug 2: angenommen 2, abgelehnt 0, ausgegeben 1550, Stopp genug | Zwei gute Ergebnisse genügten |
| Zusammenfassung: … | Ein Satz, der bei jedem Lauf anders ist |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.