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 Text-zu-SQL-Antwort erklären

Nach dieser Lektion: Ich kann eine Antwort schreiben, die die Abfrage zeigt, Zweifel zugibt und bei einer vagen Frage nachfragt.

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

Was eine Text-zu-SQL-Antwort zeigen sollte

Eine Text-zu-SQL-Antwort zu erklären heißt, der Person die Abfrage und ihre Zeilen zu zeigen, nicht nur einen Satz. Ein Satz allein klingt sicher, auch wenn die Abfrage falsch war.

Modul 84 gestaltet KI-Funktionen für Menschen. Diese Lektion schreibt die Antwort einer Text-zu-SQL-Funktion: was sie zeigt, wann sie Zweifel zugibt und wann sie zuerst nachfragt.

Am Ende dieser Lektion

Notiz

Ich kann eine Antwort schreiben, die die Abfrage zeigt, Zweifel zugibt und bei einer vagen Frage nachfragt.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Antwortwas die Person nach ihrer Frage sieht
Lesarteine Art, eine Frage in eine Abfrage zu übersetzen
Vages Wortein Wort, das hier mehr als eine Bedeutung hatbeliebt
Rückfrageeine Gegenfrage, die eine Vermutung erspart
Leeres Ergebniseine Abfrage, die keine Zeilen liefert

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

Zeigen Sie die Abfrage und die Zeilen

Setzen Sie die Abfrage und ihre Zeilen neben den Satz. Wer die Daten kennt, erkennt einen falschen Join sofort.

Halten Sie die Zeilen kurz: Zeigen Sie die ersten paar und sagen Sie, wie viele es noch gibt. Der Satz kommt aus den Zeilen, nie aus dem Gedächtnis des Modells.

Beispiel: zwei Antworten auf eine Frage

AntwortWas die Person prüfen kann
Fünf Bücher sind ausgeliehen.Nichts
Antwort: 5. Abfrage: SELECT COUNT(*) FROM ausleihen WHERE zurueck = 0Den Filter, die Tabelle und die Zahl

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

Sagen Sie, wenn Sie nicht sicher sind

„Wer hat die meisten Bücher geliehen?“ hat zwei Lesarten. Die meisten Ausleihen ergeben Anke, bei einem Gleichstand, der nach dem Namen aufgelöst wird. Die meisten verschiedenen Bücher ergeben Bernd.

Führen Sie beide Lesarten aus. Stimmen sie überein, antworten Sie. Weichen sie ab, sagen Sie, dass Sie nicht sicher sind, und zeigen beide. Ein leeres Ergebnis ist auch eine Antwort: Sagen Sie, dass keine Zeilen passen.

Erst nachfragen, dann ein vages Wort deuten

Wörter wie beliebt, aktuell, beste und aktiv haben in den Daten keine eindeutige Bedeutung. Beliebt könnte zweimal geliehen heißen, oder in diesem Monat geliehen.

Steht eines davon in der Frage, stellen Sie zuerst eine kurze Rückfrage. Eine Gegenfrage kostet weniger als eine selbstsichere falsche Antwort.

Ein häufiger Fehler

Warnung

Viele denken, ein selbstsicherer Satz sei die hilfreichste Antwort. Eine selbstsichere falsche Antwort ist schlechter als eine Rückfrage. Antworten Sie nur dann bestimmt, wenn die Lesarten übereinstimmen und kein Wort vage ist.

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 Antwortskript schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'const { oeffnen } = require(\"./bibliothek\");' 'const db = oeffnen();' 'const VAGE = [\"beliebt\", \"aktuell\", \"beste\", \"aktiv\"];' 'const M = \"SELECT m.name, COUNT(\";' 'const J = \") AS n FROM ausleihen a JOIN mitglieder m ON m.id = a.mitglied_id GROUP BY m.name ORDER BY n DESC, m.name LIMIT 1\";' > erklaeren.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 Antwortskript schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const anfragen = [' '  { f: \"Wie viele Bücher sind noch ausgeliehen?\", a: \"SELECT COUNT(*) FROM ausleihen WHERE zurueck = 0\" },' '  { f: \"Welche Titel hat Mitglied 2 geliehen?\",' '    a: \"SELECT b.titel FROM ausleihen a JOIN buecher b ON a.buch_id = b.id WHERE a.mitglied_id = 2\" },' '  { f: \"Welche Bücher sind beliebt?\", a: \"SELECT buch_id FROM ausleihen GROUP BY buch_id HAVING COUNT(*) > 1\" },' '  { f: \"Wer hat die meisten Bücher geliehen?\", a: M + \"*\" + J, b: M + \"DISTINCT a.buch_id\" + J },' '  { f: \"Welche Bücher wurden im Monat 9 geliehen?\",' '    a: \"SELECT b.titel FROM ausleihen a JOIN buecher b ON a.buch_id = b.id WHERE a.monat = 9\" },' '];' >> erklaeren.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 Antwortskript schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function zeilen(sql) {' '  return db.prepare(sql).all().map(function (r) { return Object.values(r).join(\" \"); });' '}' 'function antworten(x) {' '  const vage = VAGE.filter(function (w) { return x.f.toLowerCase().indexOf(w) >= 0; });' '  if (vage.length) return \"Bevor ich antworte: Was meinen Sie mit \" + vage[0] + \"?\";' '  const a = zeilen(x.a);' '  const b = x.b ? zeilen(x.b) : a;' '  if (a.join(\"|\") === b.join(\"|\")) {' '    if (a.length === 0) return \"Keine Zeilen passen. Abfrage: \" + x.a;' '    return \"Antwort: \" + a.join(\"; \") + \". Abfrage: \" + x.a;' '  }' '  return \"Ich bin nicht sicher. Zwei Lesarten weichen ab: \" + a.join(\"; \") + \" oder \" + b.join(\"; \");' '}' >> erklaeren.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 Antwortskript schreiben, Teil 4

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  anfragen.forEach(function (x, i) { console.log((i + 1) + \" \" + x.f + \"\n  \" + antworten(x)); });' '  const fakten = anfragen[0].f + \" Zeilen: \" + JSON.stringify(zeilen(anfragen[0].a));' '  const probe = \"Fünf Bücher sind noch ausgeliehen.\";' '  const res = await fragen([{ role: \"system\", content: \"Nennen Sie die Antwort in einem kurzen Satz. Nutzen Sie nur die gegebenen Zeilen.\" },' '    { role: \"user\", content: fakten }], probe, 60);' '  console.log(\"Das Modell sagte: \" + res.text);' '  console.log(\"  gezeigt mit Abfrage und Zeilen, damit man ihn prüfen kann\");' '}' 'main();' >> erklaeren.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.

Fünf Fragen beantworten

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

FrageAntwort
1 Wie viele Bücher sind noch ausgeliehen?Antwort: 5. Abfrage: ...
2 Welche Titel hat Mitglied 2 geliehen?Antwort: Eine Karte aus Regen; Leise Maschinen; Sieben Kessel. Abfrage: ...
3 Welche Bücher sind beliebt?Bevor ich antworte: Was meinen Sie mit beliebt?
4 Wer hat die meisten Bücher geliehen?Ich bin nicht sicher. Zwei Lesarten weichen ab: Anke 3 oder Bernd 3
5 Welche Bücher wurden im Monat 9 geliehen?Keine Zeilen passen. Abfrage: ...

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.