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

Bilder und Dokumente an ein Modell senden

Nach dieser Lektion: Ich kann sagen, was sich ändert, wenn die Eingabe ein Bild oder ein Dokument ist.

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

Wenn die Eingabe kein Text ist

Multimodale Eingabe heißt: Eine Anfrage enthält neben Wörtern auch Bilder oder Dokumente. Das Modell liest sie, aber Ihr Dienst trägt nun große Dateien, prüft ihren Typ und zahlt pro Bild oder Seite. Das ist wichtig, weil aus einer Anfrage von einigen hundert Bytes viele Megabyte werden können.

Eine Nutzerin fotografiert einen Kassenbon und lädt einen Vertrag mit zehn Seiten hoch. Eine einzige Anfrage hat nun drei Teile und drei Wege, abgelehnt zu werden.

Am Ende dieser Lektion

Notiz

Ich kann sagen, was sich ändert, wenn die Eingabe ein Bild oder ein Dokument ist.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Teilein Stück der Anfrage: Text, Bild oder Dokument
Medientypdie Bezeichnung für das Format einer Dateiimage/png
Nutzlastgrößedie Bytes, die eine Anfrage trägt
Seitenlimitdie höchste Seitenzahl eines Dokuments
Stückpreisdie Kosten für ein Bild oder eine Seite

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

Das Labor nimmt nur Text

Warnung

Der Modell-Zugangspunkt des Labors akzeptiert Text. Ein Run kann ihm kein Bild und kein Dokument schicken. Diese Lektion geht von einer aufgezeichneten Anfrageform aus, die für die Lektion erfunden wurde, und prüft sie mit Code.

Eine Anfrage wird zu einer Liste von Teilen

Eine Texteingabe ist eine einzige Zeichenkette. Eine multimodale Eingabe ist eine Liste von Teilen, jeder mit Typ und Daten. Die Daten einer Datei reisen als Bytes, oft als Text kodiert, was sie etwa ein Drittel größer macht.

Unten steht eine aufgezeichnete Form, erfunden für diese Lektion. Jeder echte Anbieter hat eigene Feldnamen: Lesen Sie immer seine Dokumentation.

Eine aufgezeichnete Anfrageform

Code: node
{ "messages": [{ "role": "user", "content": [
    { "type": "text", "text": "Was steht auf diesem Kassenbon?" },
    { "type": "image", "media": "image/png", "data": "<base64, 412000 Bytes>" },
    { "type": "document", "media": "application/pdf", "data": "<base64, 880000 Bytes>" }
] }] }

Jeden Teil vor dem Senden prüfen

Prüfen Sie jeden Teil gegen eine Regel, die Sie festlegen: den Medientyp, die Größe in Bytes und die Seitenzahl. Prüfen Sie auch die Summen: wie viele Bilder, wie viele Bytes insgesamt.

Lehnen Sie früh ab, mit einem klaren Grund. Eine Anfrage, die beim Anbieter scheitert, hat Sie schon den Upload und vielleicht Geld gekostet.

Beispiel: Limits und ein Preis

TeilWas es istPrüfungKosten in Einheiten
1Text, 1800 Zeichenhier kein Limit2
2Bild, png, 412000 Byteserlaubt, unter 5 MB4
3Bild, gif, 90000 Bytesgif steht nicht auf der Liste4
4Dokument, 24 Seitenüber dem Limit von 20 Seiten48

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

Kosten entstehen pro Bild und pro Seite

Text wird pro Token bezahlt. Ein Bild oder eine Seite wird meist mit einem festen Betrag oder einer Tokenzahl nach Größe bezahlt. Addieren Sie die Teile vor dem Aufruf, damit eine Budgetregel eine teure Anfrage ablehnen kann.

Senden Sie wenn möglich weniger: Verkleinern Sie das Bild oder senden Sie nur die wichtigen Seiten.

Ein häufiger Fehler

Warnung

Viele vertrauen dem Dateinamen oder der Endung. Ein Name kann png sagen bei einer Datei, die keines ist. Prüfen Sie den Typ an den Bytes, auf dem Server, und behalten Sie auch die Größenlimits. Die Endung ist ein Hinweis, keine Tatsache.

Das Modell-Hilfsskript 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.

Das Modell-Hilfsskript 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.

Den Formprüfer schreiben, Teil 1

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' '// Eine aufgezeichnete, erfundene Anfrage: Jeder Anbieter hat seine eigene Form.' 'const anfrage = { teile: [' '  { typ: \"text\", zeichen: 1800 },' '  { typ: \"bild\", art: \"png\", bytes: 412000 },' '  { typ: \"bild\", art: \"gif\", bytes: 90000 },' '  { typ: \"dokument\", seiten: 24, bytes: 880000 },' '] };' 'const LIMITS = { bilder: 3, bytesBild: 5000000, seiten: 20, arten: [\"png\", \"jpeg\"] };' 'const PREIS = { bild: 4, seite: 2, tausendZeichen: 1 }; // erfundene Einheiten' > shapes.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 Formprüfer schreiben, Teil 2

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function pruefen(anf) {' '  const probleme = [];' '  let bilder = 0;' '  let kosten = 0;' '  anf.teile.forEach(function (t, i) {' '    const n = i + 1;' '    if (t.typ === \"text\") kosten += Math.ceil(t.zeichen / 1000) * PREIS.tausendZeichen;' '    if (t.typ === \"bild\") {' '      bilder++;' '      kosten += PREIS.bild;' '      if (LIMITS.arten.indexOf(t.art) < 0) probleme.push(\"Teil \" + n + \": Format \" + t.art + \" nicht erlaubt\");' '      if (t.bytes > LIMITS.bytesBild) probleme.push(\"Teil \" + n + \": Bild zu groß\");' '    }' >> shapes.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 Formprüfer schreiben, Teil 3

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' '    if (t.typ === \"dokument\") {' '      kosten += t.seiten * PREIS.seite;' '      if (t.seiten > LIMITS.seiten) probleme.push(\"Teil \" + n + \": zu viele Seiten\");' '    }' '  });' '  if (bilder > LIMITS.bilder) probleme.push(\"zu viele Bilder\");' '  return { probleme: probleme, kosten: kosten };' '}' >> shapes.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 Formprüfer schreiben, Teil 4

Befehl
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const ergebnis = pruefen(anfrage);' 'ergebnis.probleme.forEach(function (p) { console.log(\"Problem:\", p); });' 'console.log(\"Kosten:\", ergebnis.kosten, \"Einheiten (ein erfundener Preis)\");' 'async function main() {' '  const text = \"Belegtext: Brot 2,10, Milch 1,05, Summe 3,15. Wie hoch ist die Summe?\";' '  const probe = \"Die Summe beträgt 3,15.\";' '  console.log(\"Nur Text, echter Aufruf:\", await fragen([{ role: \"user\", content: text }], probe, 30));' '}' 'main();' >> shapes.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 aufgezeichnete Anfrage prüfen

Befehl
docker exec -w /home/node/project agent node shapes.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 zeigt
Problem: Teil 3: Format gif nicht erlaubtDer Medientyp steht nicht auf der Liste
Problem: Teil 4: zu viele Seiten24 Seiten übersteigen das Limit von 20
Kosten: 58 EinheitenText 2, zwei Bilder 8 und ein Dokument 48
Nur Text, echter AufrufEine kurze Antwort auf eine Textfrage oder eine gekennzeichnete 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.