Der Prompt ist Code
Kurz gesagt: Ein Prompt ist der Text, der dem Modell eine Rolle, Regeln und Daten gibt; eine Vorlage mit Beispielen und Prüfungen der Antwort lebt wie jeder andere Code im Code, in Git und in den Tests.
Problem
Die Antwort, die gut klingt
Ein Kunde schreibt im Chat des Shops: „Wann kommt Bestellung 1042 an?“ Der Assistent ist wie in der Lektion über den API-Aufruf an ein Modell angeschlossen, und der System-Prompt ist eine Zeile:
FakeClient client = new FakeClient();Order order = new Order("1042", "versandt", "3. November");List<Message> question = List.of(new Message("user", "Wann kommt Bestellung 1042 an?"));Reply reply = client.create("Du bist ein Shop-Assistent.", question);System.out.println("Prompt: ~" + reply.inputTokens() + " Tokens");System.out.println("Antwort: " + reply.text());for (String line : check(reply.text(), order)) { System.out.println(" " + line);}Prompt: ~13 TokensAntwort: Hallo! Danke, dass Sie sich an uns gewandt haben. Die Lieferung dauert meist 2 bis 5 Werktage, je nach Kurier und Adresse. Bestellung 1042 kommt höchstwahrscheinlich bis Freitag an. Wenn Sie weitere Fragen haben, helfe ich gern! ✗ höchstens 30 Wörter (37) ✗ das Datum aus den Daten (3. November) ✓ die Bestellnummer (1042)Die Antwort ist höflich, aber sie hat 37 Wörter, wo im Chat Platz für zwei Sätze ist. „2 bis 5 Werktage“ ist allgemein, und „bis Freitag“ ist erfunden: In der Datenbank kommt die Bestellung am 3. November an. Der Kunde wartet am Freitag und schreibt dann wütend noch einmal.
Das Modell hat nichts falsch gemacht, was es hätte richtig machen können. Es weiß nichts über Bestellung 1042 und schreibt den wahrscheinlichsten Text, wie in der Lektion über die Grenzen des Modells. Das Problem ist der Prompt.
Die Idee
Der Prompt ist eine Spezifikation
Der Prompt sagt dem Modell, was es tun soll, so wie eine Aufgabenbeschreibung es einem neuen Kollegen sagt. Ein guter Prompt hat fünf Teile:
- Rolle: wer das Modell ist („der Support-Assistent des Shops“).
- Regeln: wie lang, in welchem Ton, was nicht erlaubt ist.
- Daten: alles, was das Modell wissen muss, vom Programm hineingelegt. Hier ist es die Bestellung aus der Datenbank.
- Eine Grenze um die Daten: Tags wie
<order>und</order>zeigen, wo die Anweisungen enden und die Daten beginnen. - Was zu tun ist, wenn es etwas nicht weiß: „wenn die Daten nicht reichen, gib an einen Kollegen weiter“. Ohne diese Regel füllt das Modell die Lücke mit Erfundenem.
Den Prompt baut eine Funktion mit Parametern, er wird nicht für jede Frage von Hand getippt. Diese Funktion ist eine Prompt-Vorlage (Prompt-Template). Solche Prompts zu schreiben und zu testen heißt Prompt Engineering: Der Prompt ist Code, den das Modell ausführt.
Sieh es dir an
Die Vorlage
Die Vorlage nimmt die Bestellung und gibt den System-Prompt zurück:
static String supportPrompt(Order order) { return """ Du bist der Support-Assistent eines Shops. Antworte höflich mit „Sie“, in höchstens zwei Sätzen. Nutze nur die Daten zwischen <order> und </order>. Wenn die Daten nicht reichen, gib an einen Kollegen weiter. Verspreche keine Termine, die nicht in den Daten stehen.
<order> Nummer: %s Status: %s voraussichtliche Lieferung: %s </order>""" .formatted(order.id(), order.status(), order.eta());}Order order = new Order("1042", "versandt", "3. November");String system = supportPrompt(order);System.out.println(system);System.out.println("~" + FakeClient.tokens(system) + " Tokens");Du bist der Support-Assistent eines Shops.Antworte höflich mit „Sie“, in höchstens zwei Sätzen.Nutze nur die Daten zwischen <order> und </order>.Wenn die Daten nicht reichen, gib an einen Kollegen weiter.Verspreche keine Termine, die nicht in den Daten stehen.
<order>Nummer: 1042Status: versandtvoraussichtliche Lieferung: 3. November</order>~67 TokensDie Daten kommen nicht vom Modell, sondern vom Programm: Status und Datum werden aus der Datenbank gelesen. Wenn die Bestellung morgen ihren Status ändert, ändert sich der Prompt mit.
Der Preis: Der vage Prompt hatte etwa 6 Tokens, dieser hat etwa 67. Jede Frage im Chat bezahlt diese Tokens erneut, denn die API hat kein Gedächtnis, und der Prompt geht mit jeder Anfrage mit. Was ein Token ist und warum der Preis in Tokens angegeben wird, hast du in der Lektion über Tokens gesehen.
Sieh es dir an
Eine Frage, zwei Prompts
String vague = "Du bist ein Shop-Assistent.";List<String> prompts = List.of(vague, supportPrompt(order));for (String system : prompts) { Reply reply = client.create(system, question); System.out.println("~" + reply.inputTokens() + " Tokens"); System.out.println(reply.text()); for (String line : check(reply.text(), order)) { System.out.println(" " + line); }}static String supportPrompt(Order order) { return """ Du bist der Support-Assistent eines Shops. Antworte höflich mit „Sie“, in höchstens zwei Sätzen. Nutze nur die Daten zwischen <order> und </order>. Wenn die Daten nicht reichen, gib an einen Kollegen weiter. Verspreche keine Termine, die nicht in den Daten stehen.
<order> Nummer: %s Status: %s voraussichtliche Lieferung: %s </order>""" .formatted(order.id(), order.status(), order.eta());}Schritt für Schritt, in Worten
- Eine Frage eines Kunden: „Wann kommt Bestellung 1042 an?“ Zuerst der vage Prompt: eine Zeile ohne Daten, ~13 Tokens.
- Die Antwort ist höflich und lang. „Bis Freitag“ ist erfunden: Im Prompt steht kein Datum, aus dem das Modell den Termin nehmen könnte.
- Das Programm prüft die Antwort: 37 Wörter, kein Datum aus den Daten. Sie besteht 1 von 3.
- Die Vorlage: wer das Modell ist, wie lang es antworten soll, was es benutzen darf und was es tun soll, wenn die Daten nicht reichen.
- Die Daten der Bestellung kommen vom Programm, zwischen <order> und </order>. Der Prompt hat jetzt ~74 Tokens statt ~13.
- Dieselbe Frage, der neue Prompt: ein Satz mit dem Datum 3. November.
- Der vage Prompt besteht 1 Prüfung von 3, der klare 3 von 3. Der klare Prompt ist länger, aber seine Antwort lässt sich prüfen.
Das Programm schickt dieselbe Frage mit beiden Prompts und prüft jede Antwort mit drei Regeln: die Länge, das Datum aus den Daten und die Bestellnummer:
static List<String> check(String answer, Order order) { int words = answer.strip().split("\\s+").length; return List.of( mark(words <= 30) + " höchstens 30 Wörter (" + words + ")", mark(answer.contains(order.eta())) + " das Datum aus den Daten (" + order.eta() + ")", mark(answer.contains(order.id())) + " die Bestellnummer (" + order.id() + ")");}
static String mark(boolean ok) { return ok ? "✓" : "✗";}FakeClient client = new FakeClient();Order order = new Order("1042", "versandt", "3. November");List<Message> question = List.of(new Message("user", "Wann kommt Bestellung 1042 an?"));String vague = "Du bist ein Shop-Assistent.";List<String> prompts = List.of(vague, supportPrompt(order));for (String system : prompts) { Reply reply = client.create(system, question); System.out.println("~" + reply.inputTokens() + " Tokens"); System.out.println(reply.text()); for (String line : check(reply.text(), order)) { System.out.println(" " + line); }}~13 TokensHallo! Danke, dass Sie sich an uns gewandt haben. Die Lieferung dauert meist 2 bis 5 Werktage, je nach Kurier und Adresse. Bestellung 1042 kommt höchstwahrscheinlich bis Freitag an. Wenn Sie weitere Fragen haben, helfe ich gern! ✗ höchstens 30 Wörter (37) ✗ das Datum aus den Daten (3. November) ✓ die Bestellnummer (1042)~74 TokensBestellung 1042 ist versandt und kommt voraussichtlich am 3. November an. ✓ höchstens 30 Wörter (11) ✓ das Datum aus den Daten (3. November) ✓ die Bestellnummer (1042)Der vage Prompt besteht 1 Prüfung von 3, der klare 3 von 3. Die Prüfungen sind Code: Sie sagen nicht, ob die Antwort schön ist, nur ob sie die Regeln einhält, die sich prüfen lassen. Wie aus solchen Prüfungen ein Testset für die ganze Anwendung wird, steht in der Lektion über Evaluation.
Ehrlich zum Modell in den Programmen. Das Modell ist hier ein falscher Client: dieselbe Form wie die echte API (System-Prompt, Nachrichten, Antwort und Tokens), aber die Antworten sind aufgezeichnet. Seine Regel ist grob: Wenn der Prompt Bestelldaten hat, antwortet er daraus; wenn nicht, gibt er die typische allgemeine Antwort zurück. So läuft das Programm ohne Netz und gibt jedes Mal dieselbe Ausgabe. Ein echtes Modell gibt bei jedem Lauf andere Worte, aber der Unterschied zwischen den beiden Prompts bleibt derselbe. Der Code des falschen Clients steht unten unter „Genauer, für Neugierige“.
Probier es aus
Finde den Fehler
Ein Kollege baut die Vorlage für die Frage „wo sind meine Bestellungen?“ um und übergibt alle Bestellungen aus der Datenbank. Die Tests laufen durch: Die Antworten sind kurz und haben die richtigen Daten. In welcher Zeile steckt der Fehler?
Wähle die Zeile mit dem Fehler.
Die Schleife geht durch die Bestellungen jedes Kunden, und customer wird nie benutzt. Was im Prompt steht, kann das Modell sagen: Der Kunde fragt „und meine andere Bestellung?“ und hört Nummer und Status der Bestellung eines anderen. Die Korrektur gehört in den Code, nicht in eine Regel „gib keine fremden Daten preis“: Die Schleife nimmt nur die Bestellungen dieses Kunden. Je weniger Daten der Prompt hat, desto weniger kann abfließen, und der Prompt ist auch billiger.
Die Idee
Beispiele statt Erklärungen
Manchmal geht die Antwort nicht an einen Kunden, sondern in Code. Die E-Mails im Support-Postfach sollen nach Thema sortiert werden: Lieferung, Rückgabe, Zahlung oder Sonstiges. Das Programm erwartet genau eins der vier Wörter, um die E-Mail in die richtige Warteschlange zu legen.
Du kannst das Format in Worten erklären („antworte nur mit der Kategorie“). Sicherer ist es, es zu zeigen: ein paar Kundennachrichten, jede mit der Antwort, die du erwartest. Sie stehen im Gesprächsverlauf vor der echten E-Mail, als frühere Züge des Modells.
Das heißt Beispiele im Prompt (Few-Shot). Das Modell setzt den Text nach dem Muster fort, das es sieht, deshalb halten Beispiele das Format besser als Erklärungen. Aus der Lektion über das nächste Token weißt du, warum: Das Modell gibt jeder Fortsetzung eine Wahrscheinlichkeit, und die Beispiele machen das genaue Format zur wahrscheinlichsten.
Sieh es dir an
Drei Beispiele, vier E-Mails
Die Anweisung und die erlaubten Kategorien:
static final String SYSTEM = "Bestimme das Thema der Kundennachricht. " + "Kategorien: lieferung, rückgabe, zahlung, sonstiges. " + "Antworte nur mit der Kategorie.";static final List<String> LABELS = List.of("lieferung", "rückgabe", "zahlung", "sonstiges");Die drei Beispiele sind Paare von Nachrichten: der Kunde (user) und die Antwort, die wir wollen (assistant). Die letzte Nachricht ist die echte E-Mail:
static List<Message> withExamples(String message) { return List.of( new Message("user", "Mein Paket ist noch nicht da, dabei ist schon eine Woche vergangen."), new Message("assistant", "lieferung"), new Message("user", "Ich möchte die Schuhe zurückgeben, sie sind zu klein."), new Message("assistant", "rückgabe"), new Message("user", "Meine Karte wurde zweimal belastet."), new Message("assistant", "zahlung"), new Message("user", message));}Das Programm akzeptiert nur eine exakte Kategorie. Ein wenig Rauschen erlaubt es: Leerzeichen, Großbuchstaben und einen Punkt am Ende:
static String parseLabel(String answer) { String label = answer.strip().toLowerCase(Locale.ROOT); if (label.endsWith(".")) { label = label.substring(0, label.length() - 1); } return LABELS.contains(label) ? label : null;}Dieselben vier E-Mails ohne Beispiele und mit Beispielen:
FakeClient client = new FakeClient();String[] inbox = { "Der Kurier hat mich an der Adresse nicht gefunden.", "Wie gebe ich die Jacke zurück, wenn ich das Etikett entfernt habe?", "Die Zahlung mit Karte klappt nicht.", "Habt ihr ein Geschäft in Hamburg?",};for (boolean examples : new boolean[] {false, true}) { System.out.println(examples ? "mit Beispielen:" : "ohne Beispiele:"); int parsed = 0; for (String message : inbox) { List<Message> messages = examples ? withExamples(message) : List.of(new Message("user", message)); String answer = client.create(SYSTEM, messages).text(); String label = parseLabel(answer); if (label != null) { parsed++; } System.out.println(" \"" + answer + "\" → " + (label == null ? "?" : label)); } System.out.println(" erkannt: " + parsed + " von " + inbox.length);}ohne Beispiele: "Kategorie: lieferung" → ? "Rückgabe der Ware" → ? "Zahlung." → zahlung "Das gehört in keine der Kategorien, ich würde „sonstiges“ sagen." → ? erkannt: 1 von 4mit Beispielen: "lieferung" → lieferung "rückgabe" → rückgabe "zahlung" → zahlung "sonstiges" → sonstiges erkannt: 4 von 4Ohne Beispiele trifft das Modell das Thema, verpackt es aber in Worte, und das Programm liest nur „Zahlung.“. Mit drei Beispielen haben die Antworten genau das nötige Format: 4 von 4.
Probier es aus
Sag die Ausgabe voraus
Was gibt parseLabel für diese drei Antworten aus?
for (String answer : new String[] {" Lieferung.", "Kategorie: lieferung", "rückgabe"}) { System.out.println(parseLabel(answer));}„ Lieferung.“ geht durch: Die Leerzeichen fallen weg, die Buchstaben werden klein, der Punkt am Ende wird abgeschnitten. „Kategorie: lieferung“ enthält die Kategorie, ist aber keine Kategorie, deshalb ist es null. Das Programm rät nicht, was das Modell gemeint hat. Eine Antwort, die es nicht lesen kann, geht an einen Menschen.
Probier es aus
Ergänze
Ein Beispiel ist ein Paar von Nachrichten. Welche Rolle hat die zweite, die Antwort, die wir sehen wollen?
new Message("user", "Mein Paket ist noch nicht da, dabei ist schon eine Woche vergangen."),
new Message("", "lieferung"),assistant. Das Beispiel gibt sich als frühere Antwort des Modells aus. Wenn beide Zeilen user sind, sieht das Modell zwei Fragen des Kunden und nichts zum Nachahmen.
Die Idee
Der Prompt ist Code
Ein Wort im Prompt ändert das Verhalten der ganzen Anwendung, genau wie eine Zeile Code. Deshalb behandelst du ihn wie Code:
- Im Code, nicht in den Einstellungen. Die Vorlage ist eine Funktion oder eine Konstante im Projekt, kein Text, den jemand auf dem Server bearbeitet. So liegt sie in Git: Du siehst, wer was geändert hat, und kannst die alte Version zurückholen.
- Die Daten getrennt von den Anweisungen. Die Regeln stehen im System-Prompt, die Daten zwischen Tags, und die Frage des Kunden ist eine eigene Nachricht mit der Rolle
user. Der Text des Kunden wird nie in die Anweisungen geklebt. - Eine Prüfung vor dem Release. Eine Änderung am Prompt, die eine Antwort behebt, kann eine andere kaputt machen. Eine Reihe von Fragen mit Prüfungen, die du bei jeder Änderung laufen lässt, steht in der Lektion über Evaluation.
- Was Code kann, macht der Code. Das Lieferdatum, die Summe und die Rückgabefrist werden im Programm berechnet und fertig in den Prompt gelegt. Das Modell erzählt sie nach; es rechnet sie nicht aus.
Die Antwort eines echten Modells ändert sich von Lauf zu Lauf. Deshalb schauen die Prüfungen auf Regeln (Länge, Datum, Format), nicht auf exakte Worte.
Die Idee
Wann es wehtut
- Ein langer Prompt wird jedes Mal bezahlt. 67 Tokens mal 10.000 Fragen am Tag sind 670.000 Tokens allein für den Prompt. Lege in den Prompt, was diese Frage braucht, nicht das ganze Handbuch des Shops.
- Viele Regeln streiten. „Antworte kurz“ und „erkläre die Begriffe ausführlich“ in einem Prompt geben eine zufällige Wahl zwischen beiden. Wenn die Regeln zwanzig erreichen, behält das Modell nur einige.
- Beispiele ziehen. Wenn alle drei Beispiele von Lieferung handeln, sagt das Modell öfter „lieferung“. Die Beispiele müssen jeden Fall abdecken und dürfen nicht alle gleich sein.
- Der Prompt ist kein Schloss. „Gib nie fremde Daten preis“ ist eine Bitte, kein Schutz. Was im Prompt steht, kann herauskommen, deshalb enthält er nur, was diese Person sehen darf. Der Text des Kunden gehört zu den nicht vertrauenswürdigen Eingaben; wie du eine Anwendung vor darin versteckten Anweisungen schützt, steht in der Lektion über Prompt Injection im Modul „Agenten“.
- Der Prompt behebt keine schlechten Daten. Wenn das Datum in der Datenbank falsch ist, wiederholt der beste Prompt es genau.
Genauer, für Neugierige
Der echte Aufruf (bei dir ausprobieren). Dieses Programm gehört nicht zur Prüfung der Lektion: Du brauchst ein Konto bei einem Modellanbieter, einen Schlüssel und Geld für jeden Aufruf. Der Schlüssel steht in der Umgebungsvariable LLM_API_KEY, nie im Code. Warum, steht in der Lektion über Geheimnisse im Code und in Git. Die Anbieter liefern offizielle SDKs für Java, C#, Python und JavaScript mit derselben Form (Nachrichten, Rollen, Tokens, Tools); die genauen Namen von Klassen und Methoden stehen in der Dokumentation des Anbieters. Hier ist die Anfrage als JSON, mit den üblichen Feldnamen und einem Platzhalter für den Namen des Modells:
{ "model": "<Name des Modells>", "max_tokens": 1024, "system": "Du bist der Support-Assistent eines Shops.\nAntworte höflich mit „Sie“, in höchstens zwei Sätzen.\nNutze nur die Daten zwischen <order> und </order>.\nWenn die Daten nicht reichen, gib an einen Kollegen weiter.\nVerspreche keine Termine, die nicht in den Daten stehen.\n\n<order>\nNummer: 1042\nStatus: versandt\nvoraussichtliche Lieferung: 3. November\n</order>", "messages": [ { "role": "user", "content": "Wann kommt Bestellung 1042 an?" } ]}Eine Beispielantwort: die Blöcke in content, stop_reason und die Tokens in usage:
{ "content": [ { "type": "text", "text": "Bestellung 1042 ist versandt und kommt voraussichtlich am 3. November an." } ], "stop_reason": "end_turn", "usage": {"input_tokens": 74, "output_tokens": 15}}Ohne SDK geht die Anfrage mit dem Standard-HTTP-Client der Sprache hinaus. Die Adresse ist ein Platzhalter:
// requestJson ist das JSON der Anfrage oben.// Der genaue Header für den Schlüssel steht in der Doku des Anbieters.HttpClient http = HttpClient.newHttpClient();HttpRequest request = HttpRequest.newBuilder(URI.create("https://<anbieter>/messages")) .header("Authorization", "Bearer " + System.getenv("LLM_API_KEY")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(requestJson)) .build();HttpResponse<String> response = http.send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());Der einzige Unterschied zu der Lektion über den Aufruf ist system: Statt einer Textzeile ist es das Ergebnis der Vorlage.
Der falsche Client von innen. Er behält die Form der Anfrage und der Antwort. Er zählt Tokens grob: Wörter × 1,3, aufgerundet. Die echte Zahl hängt vom Tokenizer ab und ist von Sprache zu Sprache verschieden.
// Steht für das echte Modell: gibt eine aufgezeichnete Antwort zurück,// ohne Netz und jedes Mal dieselbe.class FakeClient { static final String VAGUE = "Hallo! Danke, dass Sie sich an uns gewandt haben. Die Lieferung dauert meist 2 bis 5 Werktage, je nach Kurier und Adresse. Bestellung 1042 kommt höchstwahrscheinlich bis Freitag an. Wenn Sie weitere Fragen haben, helfe ich gern!"; static final Map<String, String> VERBOSE = Map.of( "lieferung", "Kategorie: lieferung", "rückgabe", "Rückgabe der Ware", "zahlung", "Zahlung.", "sonstiges", "Das gehört in keine der Kategorien, ich würde „sonstiges“ sagen.");
Reply create(String system, List<Message> messages) { String text = answer(system, messages); int input = tokens(system); for (Message m : messages) { input += tokens(m.content()); } return new Reply(text, "end_turn", input, tokens(text)); }
// Grob: Wörter × 1,3, aufgerundet. static int tokens(String text) { String t = text.strip(); int words = t.isEmpty() ? 0 : t.split("\\s+").length; return (words * 13 + 9) / 10; }
private String answer(String system, List<Message> messages) { String last = messages.get(messages.size() - 1).content(); if (system.contains("Kategorien:")) { String label = labelOf(last); return messages.size() > 1 ? label : VERBOSE.get(label); } String eta = field(system, "voraussichtliche Lieferung: "); if (eta == null) { return VAGUE; } return "Bestellung " + field(system, "Nummer: ") + " ist " + field(system, "Status: ") + " und kommt voraussichtlich am " + eta + " an."; }
private static String labelOf(String message) { String m = message.toLowerCase(Locale.ROOT); if (m.contains("kurier") || m.contains("paket")) return "lieferung"; if (m.contains("zurück")) return "rückgabe"; if (m.contains("karte") || m.contains("zahlung")) return "zahlung"; return "sonstiges"; }
private static String field(String system, String name) { for (String line : system.split("\n")) { if (line.startsWith(name)) { return line.substring(name.length()); } } return null; }}Warum Tags. <order> und </order> sind keine besondere Syntax. Das Modell hat viel Text mit solchen Tags gesehen und versteht, wo der Block beginnt und endet. ### oder Anführungszeichen funktionieren genauso gut, solange sie überall gleich sind.
„Denk Schritt für Schritt“. Bei Aufgaben mit mehreren Schritten (eine Summe, ein Vergleich) hilft es, wenn das Modell zuerst seine Überlegung schreibt und dann die Antwort. Das kostet mehr Tokens und Zeit, und die Antwort muss von der Überlegung getrennt werden, bevor sie das Programm erreicht. Die strukturierte Ausgabe aus der nächsten Lektion macht diese Trennung zuverlässig.
Der Textblock""" in Java entfernt die gemeinsame Einrückung der Zeilen, und formatted füllt %s der Reihe nach aus. Wenn die Vorlage wächst, lesen sich benannte Felder ({order}) mit replace besser als zehn %s.Übung
Eine Vorlage für Rückgaben
Löse die Aufgabe in deinem Editor.
Schreibe eine Vorlage returnPrompt(order) für Fragen zu Rückgaben. Die Bestellung hat eine Nummer, ein Lieferdatum (oder keins, wenn sie noch nicht geliefert ist) und eine Summe in Euro. Die Vorlage hat drei Regeln und die Daten zwischen <order> und </order>. Wenn es kein Datum gibt, steht in den Daten „noch nicht geliefert“: Der Code entscheidet, was gesagt wird, nicht das Modell. Führe sie für beide Bestellungen aus und gib nach jedem Prompt --- aus.
Du bist der Support-Assistent eines Online-Shops.Der Kunde kann die Bestellung bis zu 14 Tage nach der Lieferung zurückgeben.Nutze nur die Daten zwischen <order> und </order>.
<order>Nummer: 1187geliefert am: 21.10Summe: 89.90 €</order>---Du bist der Support-Assistent eines Online-Shops.Der Kunde kann die Bestellung bis zu 14 Tage nach der Lieferung zurückgeben.Nutze nur die Daten zwischen <order> und </order>.
<order>Nummer: 1203geliefert am: noch nicht geliefertSumme: 34.50 €</order>---Weitere Aufgaben
- Die Frist im Code. Füge den Daten eine Zeile „Rückgabe möglich bis:“ hinzu, mit dem Datum 14 Tage nach der Lieferung, im Programm berechnet.
- Noch eine Prüfung. Füge in
checkdie Regel „kein Versprechen eines Wochentags“ hinzu: Die Antwort enthält nicht „Montag“, „Dienstag“ und so weiter bis „Sonntag“. Wie viele Prüfungen besteht dann die vage Antwort?
Test
Teste dich
Verwandte Lektionen
Abschnitt „Verwandte Lektionen“- Baut auf: Das nächste Token vorhersagen · Das Kontextfenster · Die Grenzen des Modells · Ein Modell über eine API aufrufen
- Geht weiter in: Strukturierte Ausgabe: JSON nach einem Schema · Tool Use: das Modell fragt, das Programm handelt · Evaluation: ein Testset für den Assistenten · RAG: Antworten aus den Dokumenten
- Aufgaben zum Thema: Anwendungen mit LLMs