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

Aus gefundenen Quellen antworten

Nach dieser Lektion: Ich kann aus dem Gefundenen eine Aufforderung bauen und nur daraus antworten.

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

Eine Antwort mit ihren Quellen

Retrieval-Augmented Generation (kurz RAG) findet zuerst Passagen. Dann bittet sie ein Sprachmodell, nur daraus zu antworten. Das ist wichtig: Ein Modell, das aus dem Gedächtnis antwortet, kann sicher klingen und irren, eines mit Quellen lässt sich prüfen.

Eine Besucherin fragt, wann die Bibliothek am Samstag öffnet. Die Seite findet zwei Passagen, fragt ein Modell und zeigt die Antwort mit der Passage, aus der sie stammt.

Am Ende dieser Lektion

Notiz

Ich kann aus dem Gefundenen eine Aufforderung bauen und nur daraus antworten.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Kontextdie Passagen, die Sie in die Aufforderung legen
Aufforderungder Text, den Sie an ein Modell senden
Quellenmarkeeine Marke, die auf eine Passage zeigt[1]
Belegtnur auf die gegebenen Passagen gestützt
Verweigerungeine Antwort, die sagt, dass sie es nicht weiß

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

Die Passagen in die Aufforderung legen

Das Modell hat Ihre Dokumente nicht gelesen. Also trägt die Aufforderung sie. Nummerieren Sie jede Passage, damit das Modell auf eine zeigen kann. Fügen Sie dann die Frage und die Regeln hinzu.

Nehmen Sie wenige und kurze Passagen. Jedes zusätzliche Wort kostet, und eine lange Aufforderung macht die Antwort schwerer prüfbar.

Beispiel: die Teile der Aufforderung

TeilBeispielWozu er dient
RegelAntworten Sie nur anhand der Passagen untenHält die Antwort belegt
QuellenregelNennen Sie jede verwendete Passage so: [1]Macht die Antwort prüfbar
AuswegSonst antworten Sie genau: Ich weiß es nichtVerhindert eine erfundene Antwort
Passagen[1] Am Samstag öffnet die Bibliothek um 10 UhrDie einzigen erlaubten Fakten
FrageWann öffnet die Bibliothek am Samstag?Was zu beantworten ist

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

Prüfen, was zurückkommt

Eine Aufforderung bittet. Sie erzwingt nichts. Das Modell kann eine Passage nennen, die es nicht gibt, einen nicht gegebenen Fakt hinzufügen oder die Quellenmarke vergessen.

Also prüft das Programm. Es findet die Quellenmarken und schlägt jede nach. Eine Antwort ohne Marke wird nicht als belegt gezeigt.

Beispiel: was mit jeder Antwort geschieht

Die AntwortWas das Programm tut
Nennt [1], und Passage 1 gibt esMit der Quelle von Passage 1 zeigen
Nennt [7], und es gibt zwei PassagenIhr nicht trauen
Nennt nichtsNicht als belegt zeigen
Ich weiß es nicht.Das zeigen, ohne Quellen

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

Einmal fragen und die Antwort prüfen

Die nächsten Runs schreiben zwei Dateien und machen dann einen einzigen kurzen Aufruf. Die erste, model.js, sendet die Aufforderung an das Modell des Labors. Antwortet das Modell nicht, gibt sie „Aufgezeichnete Probe“ aus und nutzt eine ins Skript geschriebene Antwort.

Die zweite, antwort.js, baut die Aufforderung, fragt, findet die Marken und sagt, ob die Antwort eine Verweigerung ist. Nichts Persönliches gehört in eine Aufforderung.

Die Modell-Hilfe 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 Modell-Hilfe 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.

Das Antwort-Skript schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' '// Die Passagen, die ein Abruf gefunden hat, hier hingeschrieben, damit der Run nur einen kurzen Aufruf kostet.' 'const passagen = [' '  { quelle: \"zeiten-wochenende\", text: \"Am Samstag öffnet die Bibliothek um 10 Uhr und schließt um 14 Uhr. Am Sonntag ist sie geschlossen.\" },' '  { quelle: \"zeiten-woche\", text: \"Von Montag bis Freitag öffnet die Bibliothek um 9 Uhr und schließt um 18 Uhr.\" },' '];' > antwort.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 Antwort-Skript schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const frage = \"Wann öffnet die Bibliothek am Samstag?\";' 'function baueAufforderung(frage, passagen) {' '  const zeilen = [\"Antworten Sie nur anhand der Passagen unten. Nennen Sie jede verwendete Passage so: [1]. Wenn die Passagen die Antwort nicht enthalten, antworten Sie genau: Ich weiß es nicht.\", \"\"];' '  passagen.forEach(function (eine, i) { zeilen.push(\"[\" + (i + 1) + \"] \" + eine.text); });' '  zeilen.push(\"\", \"Frage: \" + frage);' '  return zeilen.join(\"\n\");' '}' >> antwort.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 Antwort-Skript schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Aufgezeichnete Probe, nur benutzt, wenn kein Modell antwortet.' 'const probe = \"Sie öffnet am Samstag um 10 Uhr [1].\";' 'function genannteQuellen(antwort) {' '  const gefunden = [];' '  (antwort.match(/\[(\d+)\]/g) || []).forEach(function (marke) {' '    const eine = passagen[Number(marke.slice(1, -1)) - 1];' '    if (eine && gefunden.indexOf(eine.quelle) < 0) gefunden.push(eine.quelle);' '  });' '  return gefunden;' '}' >> antwort.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 Antwort-Skript schreiben, Teil 4

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const aufforderung = baueAufforderung(frage, passagen);' '  console.log(aufforderung);' '  const antwort = await fragen([{ role: \"user\", content: aufforderung }], probe, 120);' '  console.log(\"Antwort:\", antwort);' '  const genannt = genannteQuellen(antwort);' '  console.log(\"Quellen:\", genannt.length > 0 ? genannt.join(\", \") : \"keine genannt\");' '  console.log(\"Sagt Ich weiß es nicht:\", /ich weiß es nicht/i.test(antwort) ? \"ja\" : \"nein\");' '}' 'main();' >> antwort.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.

Ausführen und die Antwort lesen

Befehl
docker exec -w /home/node/project agent node antwort.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
Die AufforderungDie Regeln, zwei nummerierte Passagen und die Frage
AntwortSie öffnet am Samstag um 10 Uhr [1].
Quellenzeiten-wochenende
Sagt Ich weiß es nichtnein

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

Ein häufiger Fehler

Warnung

Viele glauben, ein Modell halte sich an die Passagen, wenn man es ihm sagt. Die Regel senkt das Risiko einer erfundenen Antwort. Sie beseitigt es nicht. Behalten Sie die Prüfung und ändern Sie die Frage zu einer, die die Passagen nicht abdecken, um den Ausweg wirken zu sehen.

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