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

Modell-SQL durch Ausführen prüfen

Nach dieser Lektion: Ich kann die Abfrage eines Modells prüfen, indem ich sie auf Daten mit bekannter Antwort ausführe.

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

Ausführen, wo Sie die Antwort kennen

SQL durch Ausführen zu prüfen heißt, die Abfrage eines Modells auf einem kleinen Datensatz zu testen, dessen Antwort Sie von Hand ermittelt haben. Lesen findet manche Fehler; Ausführen findet die, die auf dem Papier gut aussehen.

Modul 43 prüft die Abfrage eines Menschen an ihren Ergebniszeilen. Diese Lektion prüft die Kandidaten eines Modells und fragt, ob die Daten Richtig und Falsch unterscheiden können.

Am Ende dieser Lektion

Notiz

Ich kann die Abfrage eines Modells prüfen, indem ich sie auf Daten mit bekannter Antwort ausführe.

Schlüsselwörter

BegriffWas er bedeutet
Bekannte Antwortdas Ergebnis, das Sie von Hand ermittelt haben
Kandidateine Abfrage, die als Antwort angeboten wird
Ergebniszeilenwas eine Abfrage zurückgibt
Testdatenkleine, feste Daten, die zum Prüfen aufbewahrt werden
Unterscheidenfür Richtig und Falsch verschiedene Ergebnisse liefern

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

Vergleichen Sie Zeilen mit einer bekannten Antwort

Ermitteln Sie die Antwort von Hand auf kleinen Testdaten. Neun Ausleihen sind wenige genug, um sie auf Papier zu zählen. Führen Sie dann jeden Kandidaten aus und vergleichen Sie seine Zeilen mit Ihren.

Es gibt drei Urteile. Bestanden heißt, die Zeilen stimmen. Falsche Zeilen heißt, die Abfrage lief und lieferte etwas anderes. Fehler heißt, SQLite hat sie abgelehnt.

Beispiel: bekannte Antworten für die Bibliothek

FrageVon Hand ermitteltBekannte Antwort
Verschiedene Mitglieder im Monat 3Ausleihen 1 bis 4: Anke, Anke, Bernd, Carla3
Noch ausgeliehene BücherAusleihen 3, 5, 6, 8 und 9 haben zurueck = 05
Titel, die Mitglied 2 geliehen hatAusleihen 3, 6 und 8: Bücher 3, 4 und 5Eine Karte aus Regen, Leise Maschinen, Sieben Kessel

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

Reihenfolge zählt nur, wenn die Frage sie verlangt

Eine Liste von Titeln in beliebiger Reihenfolge beantwortet „welche Titel“. Vergleichen Sie sortierte Kopien beider Listen, damit eine andere Reihenfolge trotzdem besteht.

Sagt die Frage „neueste zuerst“, gehört die Reihenfolge zur Antwort. Dann vergleichen Sie die Zeilen genau so, wie sie kommen.

Die Daten müssen Richtig von Falsch unterscheiden

Fragen Sie, wie viele Ausleihen aus Monat 5 noch draußen sind. Beide Ausleihen aus Monat 5 sind draußen, also liefert auch eine Abfrage ohne Filter auf zurueck die 2.

Diese Testdaten können die beiden nicht unterscheiden. Ergänzen Sie eine Zeile, die sie trennt, etwa eine zurückgegebene Ausleihe in Monat 5, und prüfen Sie erneut.

Ein häufiger Fehler

Warnung

Viele denken, ein Kandidat, der auf Testdaten besteht, sei richtig. Er ist nur für diese Daten richtig. Prüfen Sie, dass die Testdaten für die wahrscheinliche falsche Abfrage eine andere Antwort geben, und vertrauen Sie erst dann dem Bestehen.

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\";' '// 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;' '}' '// Eine Antwort kann die Abfrage in einen umzäunten Block setzen: Wir behalten das Innere.' 'function sqlVon(text) {' '  const teile = text.split(String.fromCharCode(96).repeat(3));' '  const innen = (teile.length > 2 ? teile[1] : text).trim();' '  return innen.toLowerCase().startsWith(\"sql\") ? innen.slice(3).trim() : innen;' '}' > 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' '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, sqlVon };' >> 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 kleine Bibliotheksdatenbank schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { DatabaseSync } = require(\"node:sqlite\");' '// Eine erfundene Bibliothek: sechs Bücher, vier Mitglieder, neun Ausleihen.' 'const BUECHER = [[1, \"Der Salzweg\", 2019], [2, \"Hafen aus Glas\", 2021], [3, \"Eine Karte aus Regen\", 2015],' '  [4, \"Leise Maschinen\", 2023], [5, \"Sieben Kessel\", 2018], [6, \"Nördlich vom Mittag\", 2022]];' 'const MITGLIEDER = [[1, \"Anke\"], [2, \"Bernd\"], [3, \"Carla\"], [4, \"Dirk\"]];' '// id, buch_id, mitglied_id, monat, zurueck (1 zurück, 0 noch draußen)' 'const AUSLEIHEN = [[1, 1, 1, 3, 1], [2, 2, 1, 3, 1], [3, 3, 2, 3, 0], [4, 1, 3, 3, 1], [5, 1, 1, 4, 0],' '  [6, 4, 2, 4, 0], [7, 2, 3, 4, 1], [8, 5, 2, 5, 0], [9, 2, 4, 5, 0]];' > bibliothek.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 kleine Bibliotheksdatenbank schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function fuellen(db, tabelle, zeilen) {' '  const marken = zeilen[0].map(function () { return \"?\"; }).join(\", \");' '  const einfuegen = db.prepare(\"INSERT INTO \" + tabelle + \" VALUES (\" + marken + \")\");' '  zeilen.forEach(function (zeile) { einfuegen.run(...zeile); });' '}' 'function oeffnen(datei) {' '  const db = new DatabaseSync(datei || \":memory:\");' '  db.exec(\"CREATE TABLE buecher (id INTEGER PRIMARY KEY, titel TEXT, jahr INTEGER)\");' '  db.exec(\"CREATE TABLE mitglieder (id INTEGER PRIMARY KEY, name TEXT)\");' '  db.exec(\"CREATE TABLE ausleihen (id INTEGER PRIMARY KEY, buch_id INTEGER REFERENCES buecher(id), \"' '    + \"mitglied_id INTEGER REFERENCES mitglieder(id), monat INTEGER, zurueck INTEGER)\");' '  fuellen(db, \"buecher\", BUECHER);' '  fuellen(db, \"mitglieder\", MITGLIEDER);' '  fuellen(db, \"ausleihen\", AUSLEIHEN);' '  return db;' '}' 'module.exports = { oeffnen };' >> bibliothek.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 Prüfskript schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen, sqlVon } = require(\"./model\");' 'const { oeffnen } = require(\"./bibliothek\");' 'const db = oeffnen();' 'function zeilenVon(sql) {' '  try {' '    return db.prepare(sql).all().map(function (r) { return JSON.stringify(Object.values(r)); }).sort();' '  } catch (fehler) { return null; }' '}' 'function pruefen(sql, soll) {' '  const ist = zeilenVon(sql);' '  if (ist === null) return \"Fehler\";' '  const gesucht = soll.map(function (r) { return JSON.stringify(r); }).sort();' '  return ist.join(\"|\") === gesucht.join(\"|\") ? \"bestanden\" : \"falsche Zeilen \" + ist.join(\" \");' '}' > pruefen.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 Prüfskript schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const A = \"SELECT COUNT(*) FROM ausleihen WHERE \";' 'const T = \"SELECT b.titel FROM ausleihen a JOIN buecher b ON \";' 'const faelle = [' '  { soll: [[3]], sql: [\"SELECT COUNT(mitglied_id) FROM ausleihen WHERE monat = 3\",' '    \"SELECT COUNT(DISTINCT mitglied_id) FROM ausleihen WHERE monat = 3\",' '    \"SELECT COUNT(DISTINCT mitglied) FROM ausleihen WHERE monat = 3\"] },' '  { soll: [[5]], sql: [\"SELECT COUNT(*) FROM ausleihen\", A + \"zurueck = 0\", A + \"zurueck = 1\"] },' '  { soll: [[\"Eine Karte aus Regen\"], [\"Leise Maschinen\"], [\"Sieben Kessel\"]],' '    sql: [T + \"a.id = b.id WHERE a.mitglied_id = 2\", T + \"a.buch_id = b.id WHERE a.mitglied_id = 2\",' '      T + \"a.buch_id = b.id WHERE a.mitglied_id = 2 ORDER BY b.titel DESC\"] },' '  { soll: [[2]], sql: [A + \"monat = 5 AND zurueck = 0\", A + \"monat = 5\"] },' '];' >> pruefen.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 Prüfskript schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  faelle.forEach(function (c, i) {' '    c.sql.forEach(function (sql, j) { console.log((i + 1) + \"abc\"[j] + \": \" + pruefen(sql, c.soll)); });' '  });' '  db.exec(\"UPDATE ausleihen SET zurueck = 1 WHERE id = 8\");' '  console.log(\"Nachdem Ausleihe 8 zurück ist, lautet die Antwort auf 4: 1\");' '  faelle[3].sql.forEach(function (sql, j) { console.log(\"4\" + \"ab\"[j] + \": \" + pruefen(sql, [[1]])); });' '  db.exec(\"UPDATE ausleihen SET zurueck = 0 WHERE id = 8\");' '  await live();' '}' >> pruefen.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 Prüfskript schreiben, Teil 4

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function live() {' '  const f = \"ausleihen(id, buch_id, mitglied_id, monat, zurueck)\nFrage: Wie viele verschiedene Mitglieder haben im Monat 3 ein Buch geliehen?\";' '  const probe = \"SELECT COUNT(DISTINCT mitglied_id) FROM ausleihen WHERE monat = 3;\";' '  const antwort = await fragen([{ role: \"system\", content: \"Antworten Sie mit genau einer SQLite-SELECT-Abfrage und sonst nichts.\" },' '    { role: \"user\", content: f }], probe, 120);' '  const sql = sqlVon(antwort.text);' '  console.log(\"Das Modell schrieb: \" + sql);' '  console.log(\"  auf bekannten Daten geprüft: \" + pruefen(sql, [[3]]));' '}' 'main();' >> pruefen.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.

Jeden Kandidaten auf bekannten Daten ausführen

Befehl
docker exec -w /home/node/project agent node --experimental-sqlite --no-warnings pruefen.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.

Was der Run ausgibt

ZeileWas sie zeigt
1a: falsche Zeilen [4]Anke doppelt gezählt
1c: FehlerEs gibt keine Spalte mitglied
2c: falsche Zeilen [4]Die zurückgegebenen Bücher gezählt
3a: falsche Zeilen ["Eine Karte aus Regen"] ["Nördlich vom Mittag"]Der Join von id auf id
3c: bestandenEine andere Reihenfolge besteht trotzdem
4a: bestanden und 4b: bestandenDie Daten unterscheiden sie nicht
4b: falsche Zeilen [2], nachdem Ausleihe 8 zurück istEine neue Zeile unterscheidet sie

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

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