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

Eine Pipeline von Text zu Datensätzen

Nach dieser Lektion: Ich kann eine kleine Pipeline von unordentlichem Text zu geprüften Datensätzen bauen.

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

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

BegriffWas er bedeutet
PipelineSchritte, die ihr Ergebnis jeweils weiterreichen
Stapeleine Gruppe von Texten, die zusammen bearbeitet werden
Ablehneneinen Text mit einem Grund draußen lassen
Ablehnungsquoteder Anteil der Texte, die abgelehnt wurden
Speicherndie geprüften Datensätze irgendwohin schreiben
Personenbezogene DatenAngaben, 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

Befehl
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

Befehl
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

Befehl
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

Befehl
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

Befehl
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

Befehl
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

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

Eine mögliche Ausgabe

ZeileWas sie zeigen kann
GespeichertZum Beispiel: Gespeichert: 2 Datensätze in datensaetze.json
AbgelehntDie Nachricht über das Lehrerzimmer, mit einem Grund wie artikel ungueltig
AblehnungsquoteAblehnungsquote: 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.

Ü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.