Zurück zum Blog

KI für EinsteigerAnleitung

Few-Shot-Prompting: Zeige dem Modell 3–5 Beispiele, um dein Format zu bekommen

Wie 3–5 getaggte Beispiele ein Modell dazu bringen, in deinen Labels oder JSON zu antworten, mit einer Python-Anfrage und den zusätzlichen Input-Kosten pro Anfrage.

Von CheapTokens TeamVeröffentlicht am 6 Min. Lesezeit

Cover: ein Few-Shot-Prompt mit einem Beispiel-Ticket und seinem Label
Auf dieser Seite
  1. Was „Few-Shot“ bedeutet
  2. Drei Regeln für Beispiele, die funktionieren
  3. Durch die API schicken
  4. Was fünf Beispiele zur Rechnung hinzufügen
  5. JSON, Ton und das Prüfen deiner Beispiele

Dein Ticket-Bot sollte mit einem Wort antworten: billing, bug oder other. Die meisten Antworten sind genau das. Dann kommt eine als „Label: billing — der Kunde scheint wegen einer Rückerstattung verärgert zu sein“, und der Code, der das Label liest, bricht ab.

Die übliche Lösung ist keine längere Anweisung. Es sind ein paar Beispiele: Packe 3–5 fertige Tickets mit ihren Labels in den Prompt, und das Modell kopiert das Muster. Das ist Few-Shot-Prompting. Anthropics Prompting-Guide (Abschnitt „Use examples effectively“, geprüft am 3. November 2026) nennt Beispiele eine der zuverlässigsten Methoden, um Format, Ton und Struktur zu steuern, und empfiehlt 3–5 davon. Der Haken: Jedes Beispiel ist Input, den du bei jeder Anfrage erneut bezahlst. Der Kostenabschnitt unten rechnet es für einen Bot durch, der 2.000 Tickets pro Tag bearbeitet.

Was „Few-Shot“ bedeutet#

Stell dir eine neue Kollegin an ihrem ersten Tag am Support-Desk vor. Du sagst „tagge jedes Ticket mit billing, bug oder other“ und gehst weg. Einige Tags werden deiner Vorstellung entsprechen, andere nicht. Jetzt hinterlasse drei Tickets, die bereits getaggt sind, und sage „so wie diese“. Dieselbe Kollegin, deutlich weniger Überraschungen.

Modelle verhalten sich genauso. Nur eine Anweisung nennt man Zero-Shot. Anweisung plus mehrere ausgearbeitete Beispiele ist Few-Shot (Anthropics Seite sagt auch Multishot). Ein „Shot“ ist einfach ein Beispiel.

Vergleichen

Dieselbe Aufgabe, zwei Prompts

Nur Anweisung

text
Label the support ticket as billing, bug or other.

Anweisung plus Beispiele

text
Label the support ticket with one word: billing, bug or other.

Ticket: I was charged twice for one top-up.
Label: billing

Ticket: The export button does nothing.
Label: bug

Ticket: Do you have a dark theme?
Label: other

Der zweite Prompt erklärt nie, was billing bedeutet. Die Beispiele tun es, indem sie es zeigen, und sie transportieren das Format zusammen mit der Bedeutung. Eine explizite Anweisungszeile schadet trotzdem nicht, deshalb behält die Version unten sie bei.

Drei Regeln für Beispiele, die funktionieren#

Anthropics Seite bringt gute Beispiele auf drei Wörter:

  • Relevant: nah an den Tickets, die du wirklich bekommst, nicht an irgendeiner anderen Aufgabe.
  • Diverse: sie decken Randfälle ab und unterscheiden sich voneinander, damit das Modell sich nicht an ein zufälliges Muster klammert.
  • Structured: in Tags eingebettet (<example>, und mehrere innerhalb von <examples>), damit das Modell Beispiele von Anweisungen unterscheiden kann. Dieselbe Seite sagt, man soll die Tag-Namen konsistent halten.

Hier ist ein vollständiger Prompt, so aufgebaut. Speichere ihn als prompt.txt:

text
<instructions>
Label the support ticket with exactly one word: billing, bug or other.
Reply with the label only.
</instructions>

<examples>
<example>
<ticket>I was charged twice for the same top-up.</ticket>
<label>billing</label>
</example>
<example>
<ticket>The export button does nothing when I click it.</ticket>
<label>bug</label>
</example>
<example>
<ticket>Do you have a dark theme?</ticket>
<label>other</label>
</example>
<example>
<ticket>Please refund me. Also, the page crashes on login.</ticket>
<label>billing</label>
</example>
<example>
<ticket>Is there an API for exporting reports?</ticket>
<label>other</label>
</example>
</examples>

Schau dir das vierte Beispiel an: eine Rückerstattungsanfrage, die auch einen Absturz erwähnt. Eine Anweisung kann ein gemischtes Ticket nicht klären, ein Beispiel schon. Hier gewinnt das Geld, also ist das Label billing. Welche Regel du auch wählst, zeige sie einmal.

Paare zuordnen

Welche Regel ist verletzt?

  • Deine Beispiele sind einzeilige Chat-Begrüßungen, aber echte Tickets sind lange E-MailsNicht relevant: Beispiele müssen nah an der echten Aufgabe sein
  • Alle deine Beispiele tragen dasselbe LabelNicht divers: das Modell kann ein zufälliges Muster aufgreifen
  • Beispiele sind als loser Text zwischen die Anweisungen geklebtNicht strukturiert: bette sie in Tags ein, damit sie nicht mit Anweisungen verwechselt werden

Durch die API schicken#

Der Prompt ist bei jeder Anfrage derselbe Text, und nur das neue Ticket ändert sich. Jedes Ticket macht dieselbe kurze Reise:

Anweisung, Beispiele und das neue Ticket gehen in eine Anfrage; ein Label kommt zurück
Eine Anfrage pro Ticket: die Anweisungen und Beispiele bleiben, das Ticket ändert sich

Hier ist es in Python mit dem openai-Paket. Die Adresse ist die CheapTokens API, der Key steckt in einer Umgebungsvariable (siehe wie man einen Key sicher speichert), und die Modell-ID ist die vollständige aus der Doku:

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

PROMPT = open("prompt.txt", encoding="utf-8").read()


def label(ticket: str) -> str:
    response = client.chat.completions.create(
        model="deepseek-ai/DeepSeek-V4-Flash-0731",
        max_tokens=64,
        messages=[
            {"role": "system", "content": PROMPT},
            {"role": "user", "content": f"<ticket>{ticket}</ticket>"},
        ],
    )
    print(response.usage.prompt_tokens, response.usage.completion_tokens)
    return response.choices[0].message.content.strip()


print(label("The app shows a blank screen after the update."))

Wenn es funktioniert, siehst du zwei Token-Zahlen in einer Zeile und dann das Label selbst, ein Wort wie bug. Wenn du stattdessen einen Satz bekommst, leisten die Beispiele ihre Arbeit noch nicht: Prüfe die Tags und ob jedes Label aus deinem Schema mindestens einmal vorkommt.

Die erste Zahl ist die, auf die du achten solltest. Sie ist der ganze Prompt, Anweisungen plus Beispiele plus das Ticket, und sie wächst mit jedem Beispiel, das du hinzufügst. Führe das Skript einmal mit dem vollständigen prompt.txt und einmal nur mit dem <instructions>-Teil aus: Die Differenz zwischen den beiden ersten Zahlen sind die Kosten deiner Beispiele pro Anfrage.

DeepSeek-V4-Flash eignet sich für diese Art Massen-Labeling: ein Preis zu jeder Tageszeit, ein Kontext von 380K Tokens (sodass ein langer Beispielblock leicht hineinpasst) und bis zu 32.768 Tokens pro Antwort. GLM-5.3-Flash mit 390K Kontext funktioniert für kurze Labeling-Aufgaben ebenfalls. Beide stehen auf der Modellseite, hinter einem Guthaben.

Was fünf Beispiele zur Rechnung hinzufügen#

Sagen wir, der Bot bearbeitet 2.000 Tickets pro Tag. Nimm an, ein Ticket hat etwa 120 Tokens und die Anweisung etwa 80, also ist eine Anfrage ohne Beispiele 80 + 120 = 200 Input-Tokens. Fünf Beispiele mit je etwa 60 Tokens fügen 5 × 60 = 300 hinzu, also ist eine Anfrage mit ihnen 200 + 300 = 500. Die Antwort ist ein Wort, nennen wir es in beiden Fällen 3 Output-Tokens. Das sind Annahmen: Setze die prompt_tokens ein, die dein Skript ausgegeben hat.

Über einen Tag werden aus 200 × 2.000 = 400.000 Input-Tokens 500 × 2.000 = 1.000.000, während der Output bei 3 × 2.000 = 6.000 Tokens bleibt. Auf DeepSeek-V4-Flash sind das $0.0066 pro Tag ohne Beispiele und $0.0156 mit ihnen. Die Beispiele kosten dich die Differenz zwischen diesen beiden Zahlen, und laut Anthropic kaufst du dir dafür konsistenteren Output.

Bei jeder Anfrage gleich: Anweisungen und fünf Beispiele. Jedes Mal neu: das Ticket
Nur das Ticket ändert sich zwischen den Anfragen

Dieses Bild verbirgt ein nützliches Detail. Der Beispielblock ist bei jeder Anfrage identisch, und genau das ist die Art wiederholter Anfang, um den es beim Prompt-Caching geht; was ist Prompt-Caching erklärt, wie das funktioniert.

Hier ist dieselbe Last, 500 Input- und 3 Output-Tokens pro Anfrage, 2.000 Anfragen, über mehrere Modelle. Die Tabelle rechnet mit aktuellen Preisen:

Modell Pro Anfrage 2.000 Anfragen OpenRouter, 2.000 Anfragen
GLM-5.3-Flash $0.00001 $0.0202 $0.034
DeepSeek-V4-Flash $0.0000078 $0.0156 $0.0708
MiniMax-M2.7 $0.000025 $0.0509 $0.611

500 Input- und 3 Output-Tokens pro Anfrage. Die Preise pro 1 Mio. Tokens sind aktuell und ändern sich zusammen mit unseren Tarifen; die OpenRouter-Spalte zeigt Referenzpreise für dieselbe Arbeitslast.

Input und Output zusammengerechnet kommen DeepSeek-V4-Flash und GLM-5.3-Flash bei dieser Last günstiger weg als OpenRouter. Die vollständige Preisliste steht auf der Preisseite.

JSON, Ton und das Prüfen deiner Beispiele#

Derselbe Trick deckt die anderen beiden Fälle ab, auf die du stoßen wirst. Brauchst du jedes Mal dieselben JSON-Felder? Lass das Beispiel selbst das JSON sein:

text
<example>
<ticket>I was charged twice for the same top-up.</ticket>
<output>{"label": "billing", "urgent": true}</output>
</example>

Für response_format und was zu tun ist, wenn eine Antwort trotzdem ungültig ist, siehe gültiges JSON von einer LLM-API bekommen. Willst du Text in einem bestimmten Ton umgeschrieben haben? Adjektive wie „freundlich, aber knapp“ sind vage; zwei Vorher-Nachher-Paare zeigen es besser.

Bevor du irgendeinem Beispielsatz vertraust, nimm 20 Tickets, die du bereits von Hand gelabelt hast, lass sie durchlaufen und vergleiche. Ein Durchlauf sagt dir mehr als jede Regel. Anthropics Seite fügt eine Abkürzung hinzu: Bitte das Modell, deine Beispiele nach Relevanz und Vielfalt zu bewerten oder weitere aus den vorhandenen zu schreiben.

Checkliste

Bevor du deinen Beispielen vertraust

Sobald die Beispiele funktionieren, ist die nächste Frage, wie du verhinderst, dass mehrere Dokumente in einem Prompt ineinander verschwimmen. Jedes Dokument in einem Prompt labeln behandelt das.