Ein Stapel Nachrichten
Eine Pipeline von Text zu Datensätzen macht aus unordentlichen Nachrichten geprüfte Datensätze, die ein Programm speichern kann. Das ist wichtig, weil jeder bisherige Schritt klein ist und eine echte Aufgabe alle zusammen braucht.
Das Büro einer Schule erhält einen Stapel Materialwünsche als freien Text. Jemand will sie als Zeilen: den Artikel, die Menge und ob es eilt. Niemand will dreihundert davon tippen.
Am Ende dieser Lektion
Notiz
Ich kann eine kleine Pipeline von unordentlichem Text zu geprüften Datensätzen bauen.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Pipeline | Schritte, die ihr Ergebnis jeweils weiterreichen |
| Stapel | eine Gruppe von Texten, die zusammen bearbeitet werden |
| Ablehnen | einen Text mit einem Grund draußen lassen |
| Ablehnungsquote | der Anteil der Texte, die abgelehnt wurden |
| Speichern | die geprüften Datensätze irgendwohin schreiben |
| Personenbezogene Daten | Angaben, die eine Person erkennbar machen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Vier Schritte, einer nach dem anderen
Jede Nachricht durchläuft dieselben Schritte. Extrahieren: das Modell nach den Feldern fragen. Prüfen: den Datensatz mit dem Schema prüfen. Reparieren: bei einem Fehler einmal erneut fragen, mit dem Fehler. Speichern: den guten Datensatz schreiben.
Eine Nachricht, die weiter scheitert, wird abgelehnt. Sie wird weder gespeichert noch geht sie verloren: Sie behalten den Text und den Grund.
Ablehnungen zählen und den Grund nennen
Eine Ablehnung ist eine Information. Behalten Sie den Text und den Grund und berechnen Sie die Ablehnungsquote. Ist sie hoch, brauchen Aufforderung oder Schema Arbeit.
Seien Sie vorsichtig mit personenbezogenen Daten. Schicken Sie dem Modell nur den Text, den es braucht. Schreiben Sie in das Protokoll den Grund, nicht den Text einer Nachricht über eine Person.
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\";' '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 || 200 }),' ' signal: AbortSignal.timeout(30000),' ' });' ' if (res.ok === false) throw new Error(\"Status \" + res.status);' ' return (await res.json()).choices[0].message.content;' > 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' ' } catch (fehler) {' ' console.log(\"Aufgezeichnete Probe: Kein Modell hat geantwortet (\" + fehler.message + \").\");' ' const liste = [].concat(probe);' ' const runde = nachrichten.filter(function (m) { return m.role === \"assistant\"; }).length;' ' return liste[Math.min(runde, liste.length - 1)];' ' }' '}' '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.
Die Pipeline schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const fs = require(\"fs\");' 'const { fragen } = require(\"./model\");' '' 'const texte = [' ' \"Bitte schicken Sie 12 Bleistifte in den Kunstraum, es eilt nicht.\",' ' \"Wir brauchen heute 3 Schachteln Kreide, so schnell wie möglich.\",' ' \"Kann mir jemand sagen, wo das Lehrerzimmer ist?\",' '];' '// Aufgezeichnete Proben, nur benutzt, wenn kein Modell antwortet: eine saubere Antwort, eine, die' '// eine Reparatur braucht, und eine Nachricht ohne Bestellung, die abgelehnt wird.' 'const proben = [' ' JSON.stringify({ artikel: \"Bleistifte\", menge: 12, eilig: false }),' ' [\"Hier: \" + JSON.stringify({ artikel: \"Kreide\", menge: \"drei\", eilig: true }), JSON.stringify({ artikel: \"Kreide\", menge: 3, eilig: true })],' ' [JSON.stringify({ artikel: null, menge: null, eilig: false }), \"In dieser Nachricht finde ich keine Bestellung.\"],' '];' > pipeline6.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 Pipeline schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function jsonHerausziehen(text) {' ' const anfang = text.indexOf(\"{\");' ' const ende = text.lastIndexOf(\"}\");' ' if (anfang === -1 || ende < anfang) return null;' ' try { return JSON.parse(text.slice(anfang, ende + 1)); } catch (fehler) { return null; }' '}' '' '// Das erste Problem oder ein leerer Text, wenn der Datensatz gut ist.' 'function problemVon(datensatz) {' ' if (datensatz === null) return \"kein JSON\";' ' if ((typeof datensatz.artikel === \"string\") === false || datensatz.artikel === \"\") return \"artikel ungueltig\";' ' if (Number.isInteger(datensatz.menge) === false || datensatz.menge < 1 || datensatz.menge > 20) return \"menge ungueltig\";' ' if ((typeof datensatz.eilig === \"boolean\") === false) return \"eilig ungueltig\";' ' return \"\";' '}' >> pipeline6.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 Pipeline schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const AUFFORDERUNG = \"Entnehmen Sie dieser Nachricht artikel, menge (1 bis 20) und eilig (true oder false). Antworten Sie nur mit dem JSON.\n\nNachricht: \";' '' 'async function bearbeiten(text, probe) {' ' const nachrichten = [{ role: \"user\", content: AUFFORDERUNG + text }];' ' let antwort = await fragen(nachrichten, probe, 80);' ' let problem = problemVon(jsonHerausziehen(antwort));' ' if (problem.length > 0) {' ' // Eine Reparatur: die schlechte Antwort und das Problem zurückschicken, einmal erneut fragen.' ' nachrichten.push({ role: \"assistant\", content: antwort });' ' nachrichten.push({ role: \"user\", content: \"Beheben Sie dieses Problem und antworten Sie nur mit dem JSON: \" + problem });' ' antwort = await fragen(nachrichten, probe, 80);' ' problem = problemVon(jsonHerausziehen(antwort));' ' }' ' return { datensatz: jsonHerausziehen(antwort), problem: problem };' '}' >> pipeline6.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 Pipeline schreiben, Teil 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' const gespeichert = [];' ' const abgelehnt = [];' ' for (let nr = 0; nr < texte.length; nr = nr + 1) {' ' const ergebnis = await bearbeiten(texte[nr], proben[nr]);' ' if (ergebnis.problem.length > 0) abgelehnt.push({ text: texte[nr], grund: ergebnis.problem });' ' else gespeichert.push({ artikel: ergebnis.datensatz.artikel, menge: ergebnis.datensatz.menge, eilig: ergebnis.datensatz.eilig });' ' }' ' fs.writeFileSync(\"datensaetze.json\", JSON.stringify(gespeichert, null, 2));' ' console.log(\"Gespeichert: \" + gespeichert.length + \" Datensätze in datensaetze.json\");' ' for (const einer of abgelehnt) console.log(\"Abgelehnt: \" + einer.text + \" (\" + einer.grund + \")\");' ' console.log(\"Ablehnungsquote: \" + Math.floor(abgelehnt.length * 100 / texte.length) + \" Prozent\");' '}' 'main();' >> pipeline6.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.
Mit drei Nachrichten ausführen
docker exec -w /home/node/project agent node pipeline6.jsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine mögliche Ausgabe
| Zeile | Was sie zeigen kann |
|---|---|
| Gespeichert | Zum Beispiel: Gespeichert: 2 Datensätze in datensaetze.json |
| Abgelehnt | Die Nachricht über das Lehrerzimmer, mit einem Grund wie artikel ungueltig |
| Ablehnungsquote | Ablehnungsquote: 33 Prozent, wenn eine von drei abgelehnt wird |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele glauben, eine abgelehnte Nachricht zeige, dass die Pipeline versagt hat. Ablehnen ist richtig, wenn eine Nachricht keine Bestellung enthält. Versagt hat, wer ablehnt, ohne zu zählen und den Grund zu nennen.