Eine Fotofunktion, die zu viel kostet
Ein Team baut in seine App die Funktion „Fragen Sie zu Ihrem Foto“ ein. Nach einer Woche ist die Rechnung hoch, eine blinde Nutzerin kann sie nicht verwenden, und jemand fragt, warum ein Gesicht drei Monate gespeichert wurde.
Bilder, Seiten und Ton kosten mehr als Text, können Menschen ausschließen und enthalten oft personenbezogene Daten. Planen Sie alle drei ein.
Am Ende dieser Lektion
Notiz
Ich kann einen Tag mit Eingaben aus Bild, Seite und Ton bepreisen und die Eingaben markieren, die Sorgfalt brauchen.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Alternativtext | Worte, die für eine Person, die nicht sehen kann, ein Bild ersetzen |
| Transkript | die Worte eines Tons, aufgeschrieben |
| Personenbezogene Daten | Angaben, die eine Person erkennbar machen, etwa ein Gesicht oder eine Stimme |
| Aufbewahrung | wie lange Daten gespeichert bleiben |
| Budget | das Meiste, was Sie auszugeben planen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Bilder, Seiten und Ton werden nach Größe bepreist
Text wird nach seinen Token bepreist (siehe das frühere Modul zu Kosten und Nachverfolgung). Ein Bild wird nach seinen Kacheln bepreist, eine Seite nach ihren Seiten und ein Ton nach seinen Sekunden.
In dieser Lektion kostet jede Anfrage 1. Ein Bild kostet dazu 20 und 10 je Kachel, eine Seite 5 je Seite und Ton 2 für je 10 Sekunden. Das sind erfundene Einheiten. Lesen Sie immer eine echte Preisliste.
Ein Beispieltag
| Eingabe | Größe | Rechnung | Preis |
|---|---|---|---|
| Bild | 6 Kacheln | 1 + 20 + 60 | 81 |
| Seite | 4 Seiten | 1 + 20 | 21 |
| Ton | 25 Sekunden | 1 + 2 mal 3 | 7 |
| Ton | 10 Sekunden | 1 + 2 mal 1 | 3 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Wen eine Funktion ausschließen kann
Eine Funktion, die nur Bilder oder nur Ton annimmt, schließt Menschen aus. Ein Alternativtext erlaubt es, ein Bild ohne Sehen zu verstehen. Ein Transkript erlaubt es, einen Ton ohne Hören zu verstehen.
Prüfen Sie jede Eingabe darauf. Eine Seite braucht hier keinen Alternativtext, denn ihr Text steht in den Boxen.
Ein häufiger Fehler
Warnung
Viele halten eine Stimme ohne Namen für harmlos. Aus einer Stimme kann man eine Person erkennen, auch ohne Namen. Behandeln Sie Gesichter und Stimmen darum immer als personenbezogene Daten und löschen Sie sie, sobald Sie sie nicht mehr brauchen.
Modell-Helfer schreiben, Teil 1
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;' '}' > 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.
Modell-Helfer schreiben, Teil 2
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 };' >> 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.
Kosten-Skript schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'const eingaben = [' ' { id: 1, art: \"bild\", kacheln: 6, alt: true, gesicht: false, stimme: false, tage: 7 },' ' { id: 2, art: \"bild\", kacheln: 16, alt: false, gesicht: true, stimme: false, tage: 90 },' ' { id: 3, art: \"seite\", seiten: 4, alt: true, gesicht: false, stimme: false, tage: 30 },' ' { id: 4, art: \"ton\", sekunden: 25, alt: false, gesicht: false, stimme: true, tage: 31 },' '];' > kosten6.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.
Kosten-Skript schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function preis(e) {' ' if (e.art === \"bild\") return 1 + 20 + 10 * e.kacheln;' ' if (e.art === \"seite\") return 1 + 5 * e.seiten;' ' if (e.art === \"ton\") return 1 + 2 * Math.ceil(e.sekunden / 10);' ' return 1;' '}' >> kosten6.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.
Kosten-Skript schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function hinweise(e) {' ' const aus = [];' ' if (e.gesicht) aus.push(\"Gesicht\");' ' if (e.stimme) aus.push(\"Stimme\");' ' if (e.alt === false && e.art === \"bild\") aus.push(\"kein Alternativtext\");' ' if (e.alt === false && e.art === \"ton\") aus.push(\"kein Transkript\");' ' if (e.tage > 30) aus.push(\"zu lange gespeichert\");' ' return aus;' '}' >> kosten6.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.
Kosten-Skript schreiben, Teil 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' let summe = 0;' ' for (const e of eingaben) {' ' summe += preis(e);' ' console.log(e.id + \" \" + e.art + \": Kosten \" + preis(e) + \", Hinweise \" + JSON.stringify(hinweise(e)));' ' }' ' console.log(\"Summe \" + summe);' ' const frage = \"Schreiben Sie einen kurzen Hinweis, der Nutzern sagt, dass ihre Sprachnachrichten nach 30 Tagen gelöscht werden.\";' ' const antwort = await fragen([{ role: \"user\", content: frage }], \"Ihre Sprachnachrichten werden nach 30 Tagen gelöscht.\", 40);' ' console.log(\"Antwort: \" + antwort.text);' '}' 'main();' >> kosten6.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.
Einen Tag bepreisen und markieren
docker exec -w /home/node/project agent node kosten6.jsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Zeilen, die der Run druckt
| Zeile | Was sie zeigt |
|---|---|
| 1 bild: Kosten 81, Hinweise [] | Ein kleines Bild, mit Alternativtext, kurz gespeichert |
| 2 bild: Kosten 181, Hinweise [...] | Gesicht, kein Alternativtext, 90 Tage |
| 4 ton: Kosten 7, Hinweise [...] | Stimme, kein Transkript, 31 Tage |
| Summe 290 | Der Preis des ganzen Tages |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.