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

SQL lesen, das ein Sprachmodell geschrieben hat

Nach dieser Lektion: Ich kann die Abfrage eines Modells lesen und sagen, ob sie die gestellte Frage beantwortet.

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

Beantwortet die Abfrage des Modells die Frage?

SQL eines Modells zu lesen heißt, die Abfrage mit der Frage abzugleichen, bevor Sie ihr vertrauen. Eine Abfrage kann fehlerfrei laufen und trotzdem eine andere Frage beantworten.

Modul 4 lehrt Joins und Gruppierung. Diese Lektion liest SQL, das ein Modell für eine Frage geschrieben hat, und sucht die drei Fehler, die Modelle am häufigsten machen.

Am Ende dieser Lektion

Notiz

Ich kann die Abfrage eines Modells lesen und sagen, ob sie die gestellte Frage beantwortet.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Klauselein Teil einer Abfrage, etwa WHERE
Filtereine Bedingung, die nur manche Zeilen behältzurueck = 0
Duplikatderselbe Wert, mehr als einmal gezählt
DISTINCTbehält jeden Wert nur einmalCOUNT(DISTINCT mitglied_id)
Join-Spaltedie Spalte, über die zwei Tabellen verbunden werden

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

Lesen Sie die Frage vor der Abfrage

Listen Sie zuerst auf, was die Frage verlangt. Welche Zeilen zählen? Ist es eine Zahl, eine Liste oder ein einzelner Wert? Muss jedes Ding einmal gezählt werden?

Lesen Sie dann die Abfrage Klausel für Klausel. FROM und JOIN sagen, woher die Zeilen kommen, WHERE behält einige davon, und SELECT sagt, was zurückkommt.

Beispiel: Teile der Frage und Klauseln

Die Frage sagtDie Abfrage brauchtKlausel
im Monat 3monat = 3WHERE
verschiedene MitgliederDISTINCT mitglied_idSELECT
wie vieleCOUNTSELECT
Titeleinen Join von ausleihen zu buecher über buch_idFROM und JOIN

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

Drei Fehler, die ein Modell oft macht

Duplikate zählen: COUNT(mitglied_id) zählt Anke doppelt, wenn sie zweimal geliehen hat. Ein fehlender Filter: Die Abfrage zählt jede Ausleihe, nicht nur die noch offenen.

Der falsche Join: ausleihen.id = buecher.id ordnet Ausleihe 3 dem Buch 3 nur zu, weil beide die Nummer 3 tragen. Der Join muss ausleihen.buch_id nutzen.

Beispiel: falsch und richtig

FrageFalscher TeilRichtiger Teil
Verschiedene Mitglieder im Monat 3COUNT(mitglied_id)COUNT(DISTINCT mitglied_id)
Noch ausgeliehene BücherKein WHEREWHERE zurueck = 0
Titel, die Mitglied 2 geliehen hatON a.id = b.idON a.buch_id = b.id

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

Ein häufiger Fehler

Warnung

Viele denken, eine Abfrage ohne Fehlermeldung beantworte die Frage. Ein Fehler heißt nur, dass das SQL kaputt ist. Ein falscher Join oder ein fehlender Filter läuft sauber durch und liefert eine falsche Antwort.

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 Checkliste zum Lesen schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen, sqlVon } = require(\"./model\");' 'const fragenliste = [' '  { f: \"Wie viele verschiedene Mitglieder haben im Monat 3 ein Buch geliehen?\", braucht: [\"DISTINCT\", \"monat = 3\"],' '    a: \"SELECT COUNT(mitglied_id) FROM ausleihen WHERE monat = 3\",' '    b: \"SELECT COUNT(DISTINCT mitglied_id) FROM ausleihen WHERE monat = 3\" },' '  { f: \"Wie viele Bücher sind noch ausgeliehen?\", braucht: [\"zurueck = 0\"],' '    a: \"SELECT COUNT(*) FROM ausleihen\",' '    b: \"SELECT COUNT(*) FROM ausleihen WHERE zurueck = 0\" },' '  { f: \"Welche Titel hat Mitglied 2 geliehen?\", braucht: [\"buch_id\", \"mitglied_id = 2\"],' '    a: \"SELECT b.titel FROM ausleihen a JOIN buecher b ON a.id = b.id WHERE a.mitglied_id = 2\",' '    b: \"SELECT b.titel FROM ausleihen a JOIN buecher b ON a.buch_id = b.id WHERE a.mitglied_id = 2\" },' '];' > lesen.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 Checkliste zum Lesen schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function stauchen(sql) { return sql.toUpperCase().split(/\s+/).join(\" \").trim(); }' 'function pruefen(sql, braucht) {' '  const text = stauchen(sql);' '  const probleme = braucht.filter(function (n) { return text.indexOf(stauchen(n)) < 0; })' '    .map(function (n) { return \"fehlt \" + n; });' '  if (/ON \w+\.ID = \w+\.ID\b/.test(text)) probleme.push(\"verbindet id mit id\");' '  return probleme.length ? probleme.join(\", \") : \"sieht richtig aus\";' '}' >> lesen.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 Checkliste zum Lesen schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  fragenliste.forEach(function (x, i) {' '    console.log((i + 1) + \" \" + x.f);' '    console.log(\"  A: \" + pruefen(x.a, x.braucht));' '    console.log(\"  B: \" + pruefen(x.b, x.braucht));' '  });' '  const schema = \"ausleihen(id, buch_id, mitglied_id, monat, zurueck)\nmitglieder(id, name)\nausleihen.mitglied_id -> mitglieder.id\";' '  const system = \"Antworten Sie mit genau einer SQLite-SELECT-Abfrage und sonst nichts.\";' '  const probe = \"SELECT COUNT(DISTINCT mitglied_id) FROM ausleihen WHERE monat = 3;\";' '  const antwort = await fragen([{ role: \"system\", content: system },' '    { role: \"user\", content: schema + \"\nFrage: \" + fragenliste[0].f }], probe, 120);' '  const sql = sqlVon(antwort.text);' '  console.log(\"Das Modell schrieb: \" + sql);' '  console.log(\"  Leseprüfung: \" + pruefen(sql, fragenliste[0].braucht));' '}' 'main();' >> lesen.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 Checkliste zum Lesen ausführen

Befehl
docker exec -w /home/node/project agent node lesen.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
A: fehlt DISTINCTFrage 1, Kandidat A zählt Duplikate
A: fehlt zurueck = 0Frage 2, Kandidat A hat keinen Filter
A: fehlt buch_id, verbindet id mit idFrage 3, Kandidat A verbindet über die falsche Spalte
B: sieht richtig ausJeder Kandidat B besteht die Leseprüfung
Das Modell schrieb: ...Die Abfrage des Modells für Frage 1, genauso gelesen, oder eine Aufgezeichnete Probe

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.