Das Support-Postfach sortieren
Texte mit einem Modell zu klassifizieren heißt, es für jede Nachricht ein Etikett aus einer festen Liste wählen zu lassen. Das ist wichtig, weil ein Programm ein Etikett weiterleiten kann, einen freien Satz aber nicht.
Die App der Mensa eines Campus will jede Nachricht an die Abrechnung, an das App-Team oder an eine allgemeine Stelle schicken. Ein Modell kann die Nachricht lesen und die richtige Stelle nennen. Offen ist, wie oft es recht hat.
Am Ende dieser Lektion
Notiz
Ich kann Texte mit einer festen Liste etikettieren und messen, wie oft die Etiketten stimmen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Etikett | ein Wort, das die Art eines Textes nennt | abrechnung |
| Erlaubte Etiketten | die feste Liste, aus der das Etikett stammen muss | |
| Unbekannt | das Etikett für einen Text, der in keines passt | |
| Bekannte Antwort | das Etikett, das eine Person vorher gewählt hat | |
| Genauigkeit | der Anteil der Etiketten, die der bekannten Antwort gleichen | |
| Testfälle | Texte mit bekannter Antwort, zum Messen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine feste Liste und ein Etikett unbekannt geben
Schreiben Sie die erlaubten Etiketten in die Aufforderung und sagen Sie: nur mit dem Wort antworten. Geben Sie einen Ausweg. Passt kein Etikett, soll das Modell unbekannt sagen, damit es kein falsches wählen muss.
Bereinigen Sie dann, was zurückkommt. Eine Antwort kann einen Großbuchstaben, einen Punkt oder zusätzliche Worte haben. Machen Sie daraus ein erlaubtes Etikett oder unbekannt.
Beispiel: fünf Antworten bereinigen
| Antwort | Bereinigtes Etikett | Warum |
|---|---|---|
| abrechnung | abrechnung | Schon ein erlaubtes Etikett |
| Fehler. | fehler | Großbuchstabe und Punkt entfernt |
| "sonstiges" | sonstiges | Anführungszeichen entfernt |
| Es ist ein Fehler | unbekannt | Mehrere Worte, kein Etikett |
| erstattung | unbekannt | Nicht auf der erlaubten Liste |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Mit bekannten Antworten messen
Um zu wissen, wie gut ein Etikettierer ist, testen Sie ihn. Schreiben Sie zuerst Testfälle: Texte mit einer bekannten Antwort, die eine Person gewählt hat. Lassen Sie das Modell jeden bearbeiten, bereinigen Sie das Etikett und vergleichen Sie.
Die Genauigkeit ist die Zahl der richtigen Etiketten geteilt durch alle, als ganze Prozentzahl. Lesen Sie dann die falschen. Sie zeigen, was an der Aufforderung zu verbessern ist.
Die Modellhilfe schreiben, Teil 1
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
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 Etikettierer schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' '' 'const erlaubte = [\"abrechnung\", \"fehler\", \"sonstiges\"];' '// Fälle mit bekannter Antwort, von einer Person geschrieben, bevor das Modell gefragt wird.' 'const faelle = [' ' { text: \"Mein Essen wurde doppelt abgebucht.\", erwartet: \"abrechnung\" },' ' { text: \"Die App stürzt ab, wenn ich auf Bezahlen tippe.\", erwartet: \"fehler\" },' ' { text: \"Wann öffnet die Mensa am Samstag?\", erwartet: \"sonstiges\" },' ' { text: \"Meine Erstattung ist noch nicht angekommen.\", erwartet: \"abrechnung\" },' '];' > etikett5.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 Etikettierer schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Aufgezeichnete Proben, nur benutzt, wenn kein Modell antwortet. Zwei sind absichtlich unordentlich.' 'const proben = [\"abrechnung\", \"Fehler.\", \"sonstiges\", \"erstattung\"];' 'const AUFFORDERUNG = \"Geben Sie dieser Support-Nachricht genau ein Wort aus dieser Liste: abrechnung, fehler, sonstiges. Passt keines, antworten Sie unbekannt. Antworten Sie nur mit dem Wort.\n\nNachricht: \";' '' '// Jede Antwort in ein erlaubtes Etikett oder in unbekannt verwandeln.' 'function etikettBereinigen(antwort) {' ' let text = antwort.trim().toLowerCase();' ' while (text.length > 0 && (text.endsWith(\".\") || text.endsWith(\" \"))) text = text.slice(0, -1);' ' return erlaubte.includes(text) ? text : \"unbekannt\";' '}' >> etikett5.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 Etikettierer schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' let richtig = 0;' ' let unbekannt = 0;' ' for (let nr = 0; nr < faelle.length; nr = nr + 1) {' ' const antwort = await fragen([{ role: \"user\", content: AUFFORDERUNG + faelle[nr].text }], proben[nr], 10);' ' const etikett = etikettBereinigen(antwort);' ' if (etikett === faelle[nr].erwartet) richtig = richtig + 1;' ' if (etikett === \"unbekannt\") unbekannt = unbekannt + 1;' ' console.log((nr + 1) + \" \" + etikett + \" (erwartet \" + faelle[nr].erwartet + \") \" + (etikett === faelle[nr].erwartet ? \"richtig\" : \"falsch\"));' ' }' ' console.log(\"Genauigkeit: \" + richtig + \" von \" + faelle.length + \" (\" + Math.floor(richtig * 100 / faelle.length) + \" Prozent)\");' ' console.log(\"Unbekannte Etiketten: \" + unbekannt);' '}' 'main();' >> etikett5.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.
Mit vier Nachrichten ausführen
docker exec -w /home/node/project agent node etikett5.jsHier 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
| Zeile | Was sie zeigen kann |
|---|---|
| 1 bis 4 | Ein Etikett, das erwartete Etikett und richtig oder falsch |
| Genauigkeit | Zum Beispiel 3 von 4 (75 Prozent) oder 4 von 4 |
| Unbekannte Etiketten | Wie viele Antworten sich nicht in ein erlaubtes Etikett verwandeln ließen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele glauben, 100 Prozent bei wenigen Fällen beweise, dass der Etikettierer gut ist. Eine Handvoll Fälle beweist wenig. Nehmen Sie viele Fälle, nehmen Sie schwierige dazu und lesen Sie die falschen Antworten.