Zero-, One- und Few-Shot
Die Anzahl der Beispiele auswählen
Zero-, One- und Few-Shot ist eine kostenlose AI Prompt Engineering-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Prompt Engineering-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Prompt Engineering-Kurs umfasst insgesamt 4 Lektionen.
Das Shot-Spektrum
Shots bezeichnen die Anzahl beschrifteter Demonstrationen, die im Prompt vor der eigentlichen Anfrage platziert werden. Zero-Shot stützt sich vollständig auf die vortrainierten Priors des Modells; Few-Shot konditioniert das Modell während der Inferenz auf eine kleine aufgabenspezifische Verteilung, ohne die Gewichte zu aktualisieren.
Dies wird als In-Context Learning (ICL) bezeichnet: Der Transformer behandelt die Beispiele als Teil der Sequenz und führt implizit eine Art meta-gelernte Regression darüber aus. Die Wahl von k (Anzahl der Shots) ist ein Hyperparameter, den Sie empirisch abstimmen, und keine feststehende Best Practice.
from dataclasses import dataclass
@dataclass
class ICLConfig:
k: int # number of demonstrations
selection: str # 'static' | 'dynamic'
order: str # 'random' | 'similarity' | 'curriculum'
# Zero-shot is simply k=0
cfg = ICLConfig(k=0, selection='static', order='random')Wann Zero-Shot überlegen ist
Bevorzugen Sie Zero-Shot, wenn die Aufgabe im Pretraining gut abgedeckt ist (Zusammenfassung, Übersetzung, gängige Klassifikation) und Beispiele das Ausgabeformat verzerren könnten. Bei instruction-tuned Modellen ist eine präzise Anweisung zusammen mit einem Ausgabeschema oft besser als Beispiele, die den Stil subtil vorgeben.
Zero-Shot minimiert außerdem Tokenkosten und Latenz und vermeidet den Mehrheitslabel-Bias, bei dem das Modell diejenige Klasse überproportional häufig vorhersagt, die in Ihren Demonstrationen dominiert.
# Zero-shot with explicit schema beats vague few-shot
PROMPT = (
'Classify sentiment as POSITIVE, NEGATIVE, or NEUTRAL.\n'
'Respond with only the label.\n\n'
'Text: ' + user_text + '\nLabel:'
)One-Shot als Formatanker
One-Shot spielt seine Stärken aus, wenn die Aufgabe konzeptionell klar ist, aber das Ausgabeformat ungewöhnlich oder strikt vorgegeben ist. Eine einzige Demonstration vermittelt die genaue Struktur (JSON-Schlüssel, Trennzeichen, Groß-/Kleinschreibung) wesentlich zuverlässiger als eine Beschreibung in Prosa.
Verwenden Sie One-Shot, wenn Sie die Struktur einschränken möchten, ohne viele Tokens zu verbrauchen oder die durch mehrere Beispiele eingeführte Verzerrung der Labelverteilung zu riskieren.
ONE_SHOT = (
'Extract entities as JSON.\n\n'
'Input: Apple released the iPhone in Cupertino.\n'
'Output: {"org": ["Apple"], "product": ["iPhone"], "loc": ["Cupertino"]}\n\n'
'Input: ' + query + '\nOutput:'
)Few-Shot und die k-Kurve
Die Leistung in Abhängigkeit von k steigt nur selten monoton. Typischerweise nimmt sie zunächst zu, erreicht ein Plateau und sinkt dann wieder, wenn Beispiele den Kontext überfüllen, die Aufmerksamkeit verwässern und die aktuelle Abfrage weiter aus dem Recency-Fokus des Modells drängen.
Testen Sie k empirisch mit {1, 2, 4, 8, 16} auf einem zurückgehaltenen Datensatz. Das optimale k hängt von der Aufgabenkomplexität, der Länge der Beispiele und der effektiven Kontextnutzung des Modells ab, die meist deutlich unterhalb des beworbenen Kontextfensters liegt.
def sweep_k(eval_set, candidates, ks=(1,2,4,8,16)):
results = {}
for k in ks:
acc = evaluate(build_prompt(candidates[:k]), eval_set)
results[k] = acc
return max(results, key=results.get)Warum ICL funktioniert: implizite Inferenz
Die Forschung beschreibt ICL als implizite Bayes'sche Inferenz des Modells: Demonstrationen helfen dabei, das latente Aufgabenkonzept zu identifizieren, das das Modell bereits während des Pretrainings gelernt hat. Die Beispiele dienen als Evidenz, die den Posterior über mögliche Aufgaben eingrenzt, und nicht als neues Wissen.
Das erklärt einen kontraintuitiven Befund: Selbst falsche Labels in Demonstrationen können einen großen Teil der Genauigkeit erhalten, weil das dominante Signal das Format und der Labelraum sind und nicht die Zuordnung von Eingaben zu Labels.
# Min, Lyu et al. (2022): label correctness matters less than
# - the input distribution
# - the label space (which classes exist)
# - the format / structure
# Implication: invest in representative inputs + valid label setAbwägung zwischen Tokenbudget und Kosten
Jeder Shot verbraucht Kontext und Geld. Bei langen Demonstrationen können vier Beispiele die Abfrage um ein Vielfaches übertreffen. Berechnen Sie eine Kennzahl für die Kosten pro Genauigkeitspunkt: Wenn k=8 gegenüber k=4 einen Zugewinn von 0,5 % bei doppelter Tokenanzahl bringt, ist k=4 in der Produktion die bessere Wahl.
Bevorzugen Sie bei Pipelines mit hohem Durchsatz Prompt-Caching für den statischen Demonstrationsblock, damit wiederholte Demonstrationen nur einmal abgerechnet und verarbeitet werden.
def cost_efficiency(acc_by_k, tokens_by_k, price_per_1k):
return {
k: acc_by_k[k] / (tokens_by_k[k] / 1000 * price_per_1k)
for k in acc_by_k
}
# Pick the k maximizing accuracy per dollar, not raw accuracyMehrheitslabel- und Positions-Bias
Few-Shot-Prompts enthalten versteckte Verzerrungen. Der Mehrheitslabel-Bias führt dazu, dass das Modell die häufigste Klasse in den Demonstrationen bevorzugt. Der Recency-Bias gewichtet die letzte Demonstration überproportional. Der Common-Token-Bias bevorzugt Tokens, die häufig vorkommen.
Kalibrierungsverfahren wie die kontextuelle Kalibrierung schätzen den Prior des Modells für eine inhaltsfreie Eingabe (zum Beispiel den Token N/A) und dividieren ihn heraus, wodurch Few-Shot-Klassifikatoren deutlich stabiler werden.
# Contextual calibration (Zhao et al. 2021)
p_cf = model_probs(prompt_with_input('N/A')) # content-free prior
W = 1.0 / p_cf # diagonal correction
def calibrated(probs):
return normalize(W * probs)Das Demonstrationsset ausbalancieren
Um dem Mehrheitslabel-Bias entgegenzuwirken, gleichen Sie die Klassen in den Demonstrationen aus und variieren Sie deren Reihenfolge. Verwenden Sie bei einer binären Klassifikation mit k=4 zwei positive und zwei negative Beispiele in gemischter Reihenfolge statt eines Verhältnisses von 3:1.
Gleichen Sie bei Generierungsaufgaben die relevanten Dimensionen aus (Länge, Ton, Schwierigkeitsgrad), damit das Modell nicht auf einen einzigen Modus beschränkt wird, den es am häufigsten gesehen hat.
import random
def balanced_demos(pool, k, label_fn):
by_label = {}
for ex in pool:
by_label.setdefault(label_fn(ex), []).append(ex)
per = k // len(by_label)
picks = [e for lst in by_label.values() for e in random.sample(lst, per)]
random.shuffle(picks)
return picksFew-Shot vs. Fine-Tuning
Few-Shot ist das richtige Werkzeug, wenn sich die Aufgabe häufig ändert, Daten knapp sind oder Sie kein abgestimmtes Modell hosten können. Fine-Tuning ist überlegen, wenn Sie Tausende von Beispielen haben, die geringstmögliche Latenz pro Aufruf benötigen oder das Format fest im Modell verankern möchten, damit Prompts kurz bleiben.
Ein gängiger Weg für die Produktion: Prototypisieren Sie mit Few-Shot, sammeln Sie die erfolgreichen Traces und destillieren Sie sie anschließend in ein Fine-Tune, um die Beispiel-Tokens vollständig zu entfernen.
# Decision heuristic
if num_labeled < 500 or task_volatility == 'high':
strategy = 'few-shot ICL'
elif latency_budget_ms < 200 or prompt_token_cost_dominant:
strategy = 'fine-tune + zero-shot'
else:
strategy = 'few-shot now, distill later'Reasoning-Aufgaben benötigen mehr als Shots
Bei mehrstufigem Reasoning können einfache Few-Shot-Antwortpaare schaden: Das Modell lernt, direkt zu einer Antwort zu springen, die es nicht begründen kann. Kombinieren Sie Few-Shot mit Chain-of-Thought-Demonstrationen, die die Begründungskette und nicht nur das finale Label zeigen.
Die Anzahl der Shots hängt mit der Tiefe des Reasonings zusammen; häufig schlagen k=2 hochwertige CoT-Beispiele k=8 Beispiele, die nur Antworten enthalten, bei Benchmarks für Arithmetik und Logik.
COT_SHOT = (
'Q: A shop had 23 apples, used 20, bought 6 more. How many now?\n'
'A: Start 23, minus 20 leaves 3, plus 6 is 9. Answer: 9\n\n'
'Q: ' + question + '\nA:'
)Ein Evaluations-Harness für k
Behandeln Sie die Auswahl der Shots als empirische Suche, die durch ein Harness unterstützt wird. Halten Sie einen Validierungsdatensatz zurück, kontrollieren Sie die Reihenfolge der Beispiele mit mehreren Seeds und geben Sie Mittelwert und Varianz an, da die Few-Shot-Genauigkeit allein aufgrund der Reihenfolge um mehrere Prozentpunkte schwanken kann.
Protokollieren Sie die Tokenanzahl und Latenz für jedes k, damit die endgültige Entscheidung das vollständige Ziel optimiert und nicht nur die Genauigkeit.
def harness(pool, val, ks, seeds=5):
report = {}
for k in ks:
accs = []
for s in range(seeds):
demos = balanced_demos(pool, k, label_fn)
accs.append(evaluate(build_prompt(demos), val))
report[k] = (mean(accs), stdev(accs))
return reportKurzer Test
Testen Sie Ihr Verständnis der Shot-Auswahl und des ICL-Bias.
Zusammenfassung
Die wichtigsten Erkenntnisse:
kist ein abstimmbarer Hyperparameter. Testen Sie verschiedene Werte und beobachten Sie die Kurve aus Anstieg, Plateau und Abfall.- Zero-Shot eignet sich für bekannte Aufgaben, One-Shot verankert strikte Formate und Few-Shot konditioniert auf eine Aufgabenverteilung.
- ICL funktioniert, indem eine vortrainierte Aufgabe identifiziert wird. Daher sind Format und Labelraum wichtiger als die Richtigkeit der Labels.
- Wirken Sie Mehrheitslabel-, Recency- und Common-Token-Bias mit Ausbalancieren, Mischen und kontextueller Kalibrierung entgegen.
- Optimieren Sie die Genauigkeit pro Dollar, kombinieren Sie Reasoning-Aufgaben mit CoT-Beispielen und destillieren Sie stabile Few-Shot-Prompts in Fine-Tunes.
Häufig gestellte Fragen
Ist die Lektion „Zero-, One- und Few-Shot“ kostenlos?
Ja — der vollständige Text von „Zero-, One- und Few-Shot“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Prompt Engineering-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Prompt Engineering-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Zero-, One- und Few-Shot“?
Die Anzahl der Beispiele auswählen Du übst AI Prompt Engineering mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um AI Prompt Engineering zu starten?
Keine Vorkenntnisse erforderlich. AI Prompt Engineering auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Zero-, One- und Few-Shot“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser AI Prompt Engineering-Lektion Code schreiben und ausführen?
Ja. Jede AI Prompt Engineering-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Zero-, One- und Few-Shot
- Wirksame Beispiele entwerfen
- Reihenfolge und Aktualität von Beispielen
- Dynamische Few-Shot-Auswahl