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

Daten aus Text extrahieren

Nach dieser Lektion: Ich kann einen Absatz in einen Datensatz verwandeln, ohne einen Wert zu erfinden.

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

Die Telefonnummer, die niemand nannte

Einen Datensatz aus einem Text zu extrahieren heißt, ein Modell einen Absatz lesen und einen festen Satz von Feldern füllen zu lassen. Das ist wichtig, weil das Modell eine Lücke mit einer Vermutung füllt, wenn Sie ihm das nicht verbieten.

Das Sekretariat einer Hochschule erhält eine Raumanfrage mit Name, Raum und Datum, aber ohne Telefonnummer. Das Werkzeug zeigt trotzdem eine Nummer. Niemand hat sie genannt: Das Modell hat sie erfunden.

Am Ende dieser Lektion

Notiz

Ich kann einen Absatz in einen Datensatz verwandeln, ohne einen Wert zu erfinden.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Extrahierenbenannte Fakten aus einem Text ziehen
Feldein benannter Fakt in einem Datensatzdatum
Nullder Wert, der sagt, dass ein Feld fehlt
Quelltextder Absatz, aus dem die Fakten stammen müssen
Verankertim Quelltext gefunden, nicht geraten
Vollständigkeitder Anteil der Felder, die einen Wert haben

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

Die Felder nennen und null erlauben

Sagen Sie genau, welche Felder Sie wollen und welchen Typ jedes hat. Sagen Sie dann, was zu tun ist, wenn ein Fakt nicht im Text steht: null verwenden und nie raten.

Ohne diese Regel kann ein Modell alle Felder füllen, weil ein voller Datensatz nach einer guten Antwort aussieht. Geben Sie ihm die Erlaubnis, eine Lücke zu lassen.

Beispiel: eine Nachricht, fünf Felder

FeldIn der Nachricht?Der richtige Wert
nameJa: „mein Name ist Lena Schneider“Lena Schneider
raumJa: „den Raum B12“B12
datumJa: „2026-11-20“2026-11-20
studierendeJa: „24 Studierende“24
telefonNeinnull

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

Prüfen, ob jeder Wert verankert ist

Verlassen Sie sich nicht allein auf die Aufforderung. Vergleichen Sie nach der Antwort jeden Wert mit dem Quelltext. Steht der Wert nicht darin, behandeln Sie ihn als erfunden und setzen null.

Diese Prüfung ist einfach und hat eine Schwäche: Die Zahl 2 steht auch in 2026-11-20, eine falsche Angabe 2 würde also trotzdem bestehen. Eine feinere Prüfung vergleicht ganze Wörter. Die erfundene Telefonnummer fängt sie trotzdem.

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.

Den Extraktor schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' '' 'const quelle = \"Guten Tag, mein Name ist Lena Schneider. Ich möchte den Raum B12 am 2026-11-20 reservieren. Wir sind 24 Studierende und 3 Lehrende. Bitte antworten Sie per E-Mail.\";' 'const felder = [\"name\", \"raum\", \"datum\", \"studierende\", \"telefon\"];' '' '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; }' '}' > extraktion4.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 Extraktor schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Einen Wert nur behalten, wenn er wirklich im Quelltext steht.' 'function verankern(datensatz, quelle, felder) {' '  const ergebnis = {};' '  for (const name of felder) {' '    const wert = datensatz === null ? null : datensatz[name];' '    if (wert === null || wert === undefined || wert === \"\") {' '      ergebnis[name] = null;' '      console.log(name + \": null (fehlt)\");' '    } else if (quelle.toLowerCase().includes(String(wert).toLowerCase())) {' '      ergebnis[name] = wert;' '      console.log(name + \": \" + wert + \" (behalten)\");' '    } else {' '      ergebnis[name] = null;' '      console.log(name + \": \" + wert + \" (nicht im Text, verworfen)\");' '    }' '  }' '  return ergebnis;' '}' >> extraktion4.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 Extraktor schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const aufforderung = \"Entnehmen Sie der Nachricht diese Felder als JSON-Objekt: name (Text), raum (Text), datum (Text, Jahr-Monat-Tag), studierende (eine ganze Zahl), telefon (Text). Steht ein Feld nicht in der Nachricht, verwenden Sie null. Raten Sie nie. Antworten Sie nur mit dem JSON.\n\nNachricht: \" + quelle;' '// Aufgezeichnete Probe, nur benutzt, wenn kein Modell antwortet. Sie erfindet absichtlich eine Telefonnummer.' 'const probe = JSON.stringify({ name: \"Lena Schneider\", raum: \"B12\", datum: \"2026-11-20\", studierende: 24, telefon: \"0172 1234567\" });' >> extraktion4.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 Extraktor schreiben, Teil 4

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const antwort = await fragen([{ role: \"user\", content: aufforderung }], probe, 150);' '  const datensatz = verankern(jsonHerausziehen(antwort), quelle, felder);' '  let gefuellt = 0;' '  for (const name of felder) {' '    if (datensatz[name] === null) continue;' '    gefuellt = gefuellt + 1;' '  }' '  console.log(\"Gefüllt: \" + gefuellt + \" von \" + felder.length);' '}' 'main();' >> extraktion4.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 Extraktor ausführen

Befehl
docker exec -w /home/node/project agent node extraktion4.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
name, raum, datum, studierendeJeweils ein Wert und (behalten)
telefonnull (fehlt) oder ein Wert mit (nicht im Text, verworfen)
GefülltGefüllt: 4 von 5, wenn das Modell nur die vier Fakten fand

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

Ein häufiger Fehler

Warnung

Viele glauben, ein gefülltes Feld sei besser als ein leeres. Ein erfundener Wert sieht aus wie ein echter, und niemand denkt daran, ihn zu prüfen. Ein null sagt klar, dass eine Person nachsehen muss.

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