Ein Werkzeug ist ein Handbuch für ein Modell
Ein Werkzeug für einen Agenten zu entwerfen heißt, Namen, Beschreibung, Parameter und Fehler so zu schreiben, dass ein Modell es richtig nutzt. Diese Wörter sind das einzige Handbuch des Modells.
Ein Werkzeug namens machen mit fünf losen Optionen wird erraten. Ein Werkzeug namens datei_lesen mit einem Pfad wird gut genutzt.
Am Ende dieser Lektion
Notiz
Ich kann ein Werkzeug schreiben, das ein Modell richtig nutzt, mit klarem Namen, genannter Grenze und hilfreichem Fehler.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Werkzeug | eine Funktion, die der Agent vom Harness ausführen lassen darf |
| Beschreibung | die Wörter, die dem Modell sagen, wann ein Werkzeug zu nutzen ist |
| Schmales Werkzeug | ein Werkzeug mit genau einer Aufgabe |
| Parameter | eine benannte Eingabe eines Werkzeugs |
| Mehrdeutigkeit | zwei Werkzeuge, die für eine Aufgabe passend wirken |
| Werkzeugfehler | der Text, den ein Werkzeug bei einem Fehlschlag zurückgibt |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Schmale Werkzeuge schlagen breite
Ein schmales Werkzeug hat eine Aufgabe und wenige Parameter. Ein breites Werkzeug wie alles_ausfuehren(optionen) zwingt das Modell, eine Mini-Sprache zu erfinden, und es irrt oft.
Geben Sie jeder Aufgabe ihr Werkzeug: datei_lesen, datei_schreiben, dateien_auflisten. Bleiben Sie bei vier Parametern oder weniger. Ein Werkzeug, das mehr braucht, sind meist zwei Werkzeuge.
Namen und Beschreibungen sagen, wann nicht
Ein Name ist ein Verb und ein Substantiv: text_suchen, nicht helfer. Eine Beschreibung sagt, was das Werkzeug tut, und auch, wann man es nicht nutzt.
Dieser zweite Satz trennt zwei Werkzeuge, die sich ähneln. Ohne ihn wählt das Modell zufällig zwischen datei_lesen und text_suchen, und Sie merken es erst im Protokoll des Laufs.
Mängel, auf die man prüft
| Mangel | So sieht er aus | Behebung |
|---|---|---|
| Vager Name | `machen`, `helfer` | Ein Verb und ein Substantiv |
| Kurze Beschreibung | `Macht Dinge` | Sagen, was es liest oder ändert |
| Keine Grenze | Kein «nicht verwenden» | Hinzufügen, wofür es nicht gedacht ist |
| Zu viele Parameter | Fünf oder mehr | In Werkzeuge aufteilen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Fehler für das Modell schreiben
Ein Werkzeugfehler ist die nächste Eingabe, die das Modell liest. Schreiben Sie ihn also für das Modell: was schiefging, dann was als Nächstes zu tun ist.
Fehler: keine Datei unter src/app.pyy. Rufen Sie dateien_auflisten auf und versuchen Sie es erneut. sagt dem Modell, wie es sich erholt. Ein nacktes ENOENT tut das nicht. Sagen Sie bei einer Verweigerung, dass es nicht erneut versuchen soll, sonst versucht es endlos.
Ein häufiger Fehler
Warnung
Viele schreiben die Wörter eines Werkzeugs für sich selbst und halten sie kurz. Das Modell hat nichts anderes. Schreiben Sie die Beschreibung so, als wäre sie für eine Kollegin, die den Code nie gesehen hat.
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.
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.
Werkzeugprüfer schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'const VAGE = [\"machen\", \"ausfuehren\", \"behandeln\", \"werkzeug\", \"helfer\", \"verarbeiten\", \"util\"];' 'const werkzeuge = [' ' { name: \"datei_lesen\", beschreibung: \"Liest den Text einer Datei anhand ihres Pfads. Nicht verwenden für Ordner.\", parameter: [\"pfad\"] },' ' { name: \"text_suchen\", beschreibung: \"Findet Zeilen mit einem Wort in allen Dateien des Projekts\", parameter: [\"wort\"] },' ' { name: \"machen\", beschreibung: \"Macht Dinge\", parameter: [\"a\", \"b\", \"c\", \"d\", \"e\"] },' '];' > werkzeuge2.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.
Werkzeugprüfer schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function maengel(w) {' ' const gefunden = [];' ' if (VAGE.includes(w.name)) gefunden.push(\"vager-name\");' ' if (w.beschreibung.split(\" \").length < 8) gefunden.push(\"kurze-beschreibung\");' ' if (w.beschreibung.toLowerCase().includes(\"nicht verwenden\") === false) gefunden.push(\"ohne-grenze\");' ' if (w.parameter.length > 4) gefunden.push(\"zu-viele-parameter\");' ' return gefunden;' '}' >> werkzeuge2.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.
Werkzeugprüfer schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function fehlertext(f) {' ' if (f.code === \"nicht_gefunden\") return \"Fehler: keine Datei unter \" + f.pfad + \". Rufen Sie dateien_auflisten auf und versuchen Sie es erneut.\";' ' if (f.code === \"zu_gross\") return \"Fehler: \" + f.pfad + \" hat \" + f.groesse + \" Zeilen und das Limit ist \" + f.limit + \". Fragen Sie einen Zeilenbereich an.\";' ' return \"Fehler: \" + f.code + \". Nicht erneut versuchen.\";' '}' >> werkzeuge2.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.
Werkzeugprüfer schreiben, Teil 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' for (const w of werkzeuge) console.log(w.name + \": \" + (maengel(w).join(\", \") || \"keine Mängel\"));' ' console.log(fehlertext({ code: \"nicht_gefunden\", pfad: \"src/app.pyy\" }));' ' console.log(fehlertext({ code: \"zu_gross\", pfad: \"daten.csv\", groesse: 9000, limit: 500 }));' ' const liste = werkzeuge.slice(0, 2).map(function (w) { return w.name + \": \" + w.beschreibung; }).join(\" | \");' ' const aufgabe = \"Zeigen Sie mir die ersten Zeilen von src/app.py. Antworten Sie nur mit einem Werkzeugnamen.\";' ' const antwort = await fragen([{ role: \"user\", content: \"Werkzeuge: \" + liste + \" | \" + aufgabe }], \"datei_lesen\", 10);' ' console.log(\"Das Modell wählte: \" + antwort.text);' '}' 'main();' >> werkzeuge2.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 Werkzeugprüfer ausführen
docker exec -w /home/node/project agent node werkzeuge2.jsHier 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 Modellaufruf zeigt
Das Modell des Labors wird als reiner Text angesprochen, ohne Funktion für Werkzeugaufrufe. Der Run fügt deshalb die Werkzeugbeschreibungen in den Prompt ein und fragt nach einem Werkzeugnamen. Das genügt, um zu zeigen, dass die Wörter das Handbuch sind.
Die Prüfungen und die beiden Fehler brauchen kein Modell.
Eine mögliche Ausgabe
| Zeile | Was sie zeigt |
|---|---|
| datei_lesen: keine Mängel | Ein schmales Werkzeug mit Grenze |
| text_suchen: ohne-grenze | Es sagt nie, wann man es nicht nutzt |
| machen: vager-name, kurze-beschreibung, ohne-grenze, zu-viele-parameter | Vier Mängel in einem Werkzeug |
| Fehler: keine Datei unter src/app.pyy. Rufen Sie dateien_auflisten auf und versuchen Sie es erneut. | Ein Fehler mit nächstem Schritt |
| Das Modell wählte: ... | Wohl datei_lesen. Die Wörter ändern sich bei jedem Lauf |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.