Skip to content
BitDojo
Vorbereitung auf die Claude-Zertifizierung
Agenten bauenFree6 min read

Wie eine Anfrage an das Modell aussieht

Du kannst eine Anfrage an ein Sprachmodell in ihre Bestandteile zerlegen, erklären warum der Dienst sich zwischen zwei Aufrufen nichts merkt, und am Abbruchgrund ablesen, warum eine Antwort endete.

Wer zum ersten Mal mit einem Sprachmodell arbeitet, stellt sich ein Gespräch vor: Man sagt etwas, der andere merkt es sich, man sagt das Nächste. So läuft es an der Oberfläche eines Chatfensters, und so läuft es unter der Oberfläche gerade nicht.

Technisch schickst du ein Paket, bekommst ein Paket zurück, und danach ist die Verbindung vorbei. Der Dienst auf der anderen Seite hat nichts aufgehoben. Was im nächsten Aufruf gelten soll, muss im nächsten Aufruf wieder mitkommen.

Diese eine Tatsache erklärt drei Dinge, über die später alle stolpern: warum lange Gespräche teurer werden, warum ein Fehler in Runde acht sich nicht durch einen freundlichen Hinweis in Runde neun beheben lässt, und warum du den Verlauf in deiner eigenen Datenbank führen musst.

Das Gespräch ist eine Liste, die du mitbringst

{
  "modell": "ein-modellname",
  "system": "Antworte knapp und auf Deutsch.",
  "nachrichten": [
    { "von": "nutzer", "inhalt": "Wie viele Bestellungen sind offen?" },
    { "von": "modell", "inhalt": "Dazu brauche ich Zugriff auf die Datenbank." },
    { "von": "nutzer", "inhalt": "Die hast du." }
  ],
  "hoechstens": 1024
}

Die Systemanweisung steht dabei außerhalb der Liste. Sie ist die Rahmenregel für den ganzen Aufruf und wiederholt sich nicht je Nachricht.

Weil die Liste bei jedem Aufruf vollständig mitgeht, wächst die Menge an Text mit jeder Runde. Nach zwanzig Runden bezahlst du die erste Frage zum einundzwanzigsten Mal. Das ist kein Fehler im Aufbau, sondern seine Bedingung, und der Umgang damit ist eine eigene Aufgabe.

Eine Antwort besteht aus Blöcken, nicht aus einem Text

Diese Bauweise ist der Grund, warum Werkzeuge und Bilder später ohne Sonderregel dazupassen. Dein Code darf deshalb nie annehmen, eine Antwort sei eine Zeichenkette. Er nimmt die Liste, sieht jeden Block an und behandelt ihn nach seiner Art.

Warum eine Antwort mitten im Satz aufhört

Der häufigste Anfängerfehler an dieser Stelle ist still. Ein Programm nimmt die Antwort, schickt sie durch die JSON-Verarbeitung, fängt den Fehler ab und schreibt „Antwort konnte nicht gelesen werden" ins Protokoll. Die wahre Ursache war die Ausgabegrenze, und sie stand die ganze Zeit im Abbruchgrund.

Prüfe deshalb den Abbruchgrund, bevor du die Antwort weiterverarbeitest. Ein abgeschnittener Text ist ein anderer Fall als ein leeres Ergebnis, und die beiden brauchen verschiedene Behandlungen.

Was daraus für deinen Code folgt

Der Verlauf gehört in deine Datenbank, mit Zeitpunkt und Kennung des Nutzers. Ohne ihn kannst du weder fortsetzen noch später erklären, was das Modell gesehen hat.

Die Antwort wird als Liste von Blöcken behandelt, nicht als Text. Sobald Werkzeuge dazukommen, ist das der Unterschied zwischen einer Zeile Anpassung und einem Umbau.

Und die Ausgabegrenze setzt du bewusst. Zu klein bedeutet abgeschnittene Antworten, zu groß bedeutet, dass ein außer Kontrolle geratener Lauf lange auf deine Rechnung schreibt.

Exerciseabout 35 minutes

Ein Gespräch von Hand führen

Du baust den Aufruf einmal ohne Bibliothek, damit du jedes Feld gesehen hast.

  1. Schicke mit einem Kommandozeilenwerkzeug eine einzelne Anfrage an ein Sprachmodell deiner Wahl und speichere die vollständige Antwort als Datei.
  2. Suche in der Antwort die Liste der Inhaltsblöcke und den Abbruchgrund und schreibe beide Werte auf.
  3. Setze die Ausgabegrenze auf zwanzig Token und stelle eine Frage, die eine lange Antwort verlangt. Notiere, wie sich der Abbruchgrund ändert.
  4. Führe drei Runden, indem du die vorherige Antwort selbst wieder in die Nachrichtenliste einträgst, und zähle, wie viele Zeichen im dritten Aufruf mitgehen.
  5. Gib in der letzten Runde den Anfang der Antwort selbst vor und prüfe, ob die Fortsetzung dort ansetzt.

welcher Ausgabegrenze auftrat. größer ist als die der ersten.

Done when

  • Du kannst an deiner gespeicherten Antwort zeigen, welcher Abbruchgrund bei
  • Du kannst die Zeichenzahl der dritten Anfrage nennen und begründen, warum sie

Has it stuck?

7 cards from this lesson, 6 questions in the exam pool.