Praktisches Prompt Engineering für kleinere LLMs

Maud Nalpas
Maud Nalpas

Die Effektivität eines Large Language Models hängt stark von den Anweisungen ab, die wir ihm geben. Prompt Engineering ist der Prozess, Fragen so zu formulieren, dass die beste Leistung von einem LLM erzielt wird. Dies ist ein wichtiger Schritt bei der Implementierung einer LLM-basierten Funktion.

Prompt Engineering ist ein iterativer Prozess. Wenn Sie mit verschiedenen LLMs experimentiert haben, haben Sie wahrscheinlich festgestellt, dass Sie Ihren Prompt anpassen mussten, um ein besseres Ergebnis zu erzielen.

Das gilt auch für Modelle unterschiedlicher Größe.

Chatschnittstellen, die auf Large Language Models wie Gemini oder ChatGPT basieren, können oft mit minimalem Prompting zufriedenstellende Ergebnisse erzielen. Wenn Sie jedoch mit einer standardmäßigen, kleineren LLM arbeiten, die nicht optimiert ist, müssen Sie Ihren Ansatz anpassen.

Kleinere LLMs sind weniger leistungsfähig und haben einen kleineren Informationspool.

Was bedeutet „kleinere LLMs“?

Die Definition der Größe von LLMs ist kompliziert und wird von den Herstellern nicht immer offengelegt.

In diesem Dokument bezieht sich „kleinere LLMs“ auf Modelle mit weniger als 30 Milliarden Parametern. Derzeit können Modelle mit einigen Millionen bis einigen Milliarden Parametern realistischerweise im Browser auf Geräten für den Massenmarkt ausgeführt werden.

Wo werden kleinere LLMs eingesetzt?

  • On-Device-/In-Browser-generative KI, z. B. wenn Sie Gemma 2B mit der LLM Inference API von MediaPipe verwenden (auch für Geräte geeignet, die nur eine CPU haben) oder DistilBert im Browser mit Transformers.js. Das Herunterladen eines Modells und das Ausführen der Inferenz auf dem Gerät eines Nutzers ist nur mit diesen kleineren LLMs möglich, um Webdownloads in einem angemessenen Rahmen zu halten und den Speicher- und GPU-/CPU-Beschränkungen eines Geräts gerecht zu werden.
  • Benutzerdefinierte serverseitige generative KI Kleine Open-Weight-Modelle wie Gemma 2B, Gemma 7B oder Gemma 27B können auf Ihrem eigenen Server ausgeführt und optional optimiert werden.

Jetzt starten

Chatschnittstellen, die auf großen LLMs wie Gemini oder ChatGPT basieren, können oft zufriedenstellende Ergebnisse mit minimalem Prompting-Aufwand erzielen. Bei kleineren LLMs müssen Sie Ihren Ansatz jedoch anpassen. Kleinere LLMs sind weniger leistungsfähig und haben einen kleineren Informationspool.

Kontext und genaue Formatanleitung bereitstellen

Um mit kleinen LLMs optimale Ergebnisse zu erzielen, sollten Sie detailliertere und spezifischere Prompts erstellen.

Beispiel:

Based on a user review, provide a product rating as an integer between 1 and 5. \n
Only output the integer.

Review: "${review}"
Rating:
Eingabe (Überprüfung) Ausgabe (Bewertung)
  Größerer LLM (Gemini 1.5) Kleinerer LLM (Gemma 2B)
Die Passform ist absolut super! Verteilt das Gewicht gut und ist auch bei ganztägigen Wanderungen überraschend bequem. Ich würde es weiterempfehlen. 5 4 von 5 Sternen**
Die Träger sind dünn und haben sich bei schweren Lasten in meine Schultern eingegraben. 1 2/5

Während Gemini 1.5 mit diesem einfachen Prompt die gewünschte Ausgabe liefert, ist die Ausgabe von Gemma nicht zufriedenstellend:

  • Das Format ist falsch. Wir haben eine Ganzzahl für die Bewertung angefordert.
  • Die Bewertung scheint nicht ganz korrekt zu sein. Die erste Rezension ist so begeistert, dass sie eine 5-Sterne-Rezension verdient.

Um das zu beheben, müssen wir Prompt-Engineering-Techniken wie One-, Few- und Multi-Shot-Prompts und Prompts zur Gedankenkette verwenden. Außerdem müssen wir klare Formatanweisungen bereitstellen und darauf bestehen, dass das Modell die gesamte Bandbreite der Bewertungen verwendet.

Beispiel:

`Analyze a product review, and then based on your analysis give me the
corresponding rating (integer). The rating should be an integer between 1 and
5. 1 is the worst rating, and 5 is the best rating. A strongly dissatisfied
review that only mentions issues should have a rating of 1 (worst). A strongly
satisfied review that only mentions positives and upsides should have a rating
of 5 (best). Be opinionated. Use the full range of possible ratings (1 to
5). \n\n
    \n\n
    Here are some examples of reviews and their corresponding analyses and
    ratings:
    \n\n
    Review: 'Stylish and functional. Not sure how it'll handle rugged outdoor
    use, but it's perfect for urban exploring.'
    Analysis: The reviewer appreciates the product's style and basic
    functionality. They express some uncertainty about its ruggedness but
    overall find it suitable for their intended use, resulting in a positive,
    but not top-tier rating.
    Rating (integer): 4
    \n\n
    Review: 'It's a solid backpack at a decent price. Does the job, but nothing
    particularly amazing about it.'
    Analysis: This reflects an average opinion. The backpack is functional and
    fulfills its essential purpose. However, the reviewer finds it unremarkable
    and lacking any standout features deserving of higher praise.
    Rating (integer): 3
    \n\n
    Review: 'The waist belt broke on my first trip! Customer service was unresponsive too. Would not recommend.'
    Analysis: A serious product defect and poor customer service experience naturally warrants the lowest possible rating. The reviewer is extremely unsatisfied with both the product and the company.
    Rating (integer): 1
    \n\n
    Review: 'Love how many pockets and compartments it has. Keeps everything organized on long trips. Durable too!'
    Analysis: The enthusiastic review highlights specific features the user loves (organization and durability), indicating great satisfaction with the product. This justifies the highest rating.
    Rating (integer): 5
    \n\n
    Review: 'The straps are a bit flimsy, and they started digging into my shoulders under heavy loads.'
    Analysis: While not a totally negative review, a significant comfort issue leads the reviewer to rate the product poorly. The straps are a key component of a backpack, and their failure to perform well under load is a major flaw.
    Rating (integer): 1
    \n\n
    Now, here is the review you need to assess:
    \n
    Review: "${review}" \n`
;
Eingabe (Überprüfung) Ausgabe mit einem kleineren LLM (Gemma 2B)

Die Passform ist absolut super! Verteilt das Gewicht gut und ist überraschend bequem, auch bei ganztägigen Wanderungen. Ich würde es weiterempfehlen.

Analyse: Diese Rezension ist sehr positiv und betont die Passform und den Komfort des Produkts. Sie zeugt von großer Zufriedenheit mit dem Produkt. Das rechtfertigt eine hohe Bewertung.

Bewertung (ganze Zahl): 5

Die Träger sind dünn und schneiden bei schweren Lasten in meine Schultern.

**Analyse:** In der Rezension wird ein erhebliches Problem mit dem Komfort der Träger hervorgehoben. Außerdem wird darauf hingewiesen, dass das Produkt möglicherweise nicht für schwere Lasten oder längere Ausflüge geeignet ist.

**Bewertung:** 1 (schlechteste)

Unser detaillierterer Prompt in Kombination mit den Prompt-Techniken „Few-Shot“ und „Denkkette“ führt zu genaueren Bewertungen.

Manuelles Parsen der Ausgabe

Sie sollten die Ausgabe eines LLM immer manuell bereinigen und interpretieren. Dies gilt insbesondere für kleinere LLMs, die weniger ausgefeilte Ergebnisse liefern und möglicherweise eine Gedankenkette erfordern.

Im ersten Beispiel haben wir eine Prompt-Frage verwendet, die die Gedankenkette der Person nachahmt. Die Ausgabe enthielt daher sowohl eine Analyse als auch eine Bewertung, die wir manuell nach der Bewertung durchsuchen müssen. Beachten Sie auch die inkonsistente Formatierung in der Ausgabe im vorherigen Abschnitt: Das Modell gibt manchmal Markdown aus, aber nicht immer.

// Use try/catch to catch (parsing) errors
try {
 
// Parse the output for a rating
 
const int = /[1-5]/;
 
const ratingAsString = llmOutput.match(int)[0];
 
// Parse as int
 
const ratingAsInt = parseInt(ratingAsString);
 
// `checkRating` checks the rating is a number between 1 and 5, since the
 
// regEx may catch a number like "100"
 
const finalRating = checkRating(ratingAsInt);
} catch (e) {
  console
.error('Error', e);
}

Unterschiede bei der Mind API

LLM-Cloud-APIs wie die Gemini API oder OpenAI, die in der Regel der Einstiegspunkt zu größeren LLMs sind, bieten praktische Prompt-Funktionen. Gemini 1.5 Pro bietet beispielsweise Systemanweisungen und den JSON-Modus.

Derzeit sind diese Funktionen nicht immer für die Verwendung benutzerdefinierter Modelle oder für kleinere LLMs verfügbar, auf die über In-Browser-KI-APIs zugegriffen wird, z. B. die MediaPipe LLM Inference API oder Transformers.js. Dies ist zwar nicht unbedingt eine technische Einschränkung, aber In-Browser-KI-APIs sind in der Regel schlanker.

Mind-Token-Limits

Da Ihre Prompts für kleinere LLMs Beispiele oder detailliertere Anweisungen enthalten müssen, sind sie wahrscheinlich länger und belegen einen größeren Teil des Eingabetokenlimits, falls vorhanden.

Außerdem haben kleinere Modelle in der Regel ein kleineres Eingabetokenlimit. Gemini 1.5 Pro hat beispielsweise ein Limit von 1 Million Eingabetokens, während Gemma-Modelle ein Kontextfenster von 8.000 Tokens haben.

Verwenden Sie Tokenzählungsfunktionen, um das Limit nicht zu erreichen.

Zeitschätzungen anpassen

Berücksichtigen Sie das Design und die Tests von Prompts in Ihren Zeitschätzungen für die Entwicklung.

Aufgrund von API-Unterschieden und Tokenlimits benötigen Sie für einen Prompt für ein kleineres LLM wahrscheinlich mehr Zeit und Aufwand als für ein größeres. Das Testen und Validieren der Ausgabe des LLM kann auch mehr Aufwand erfordern.

Prompt-Engineer oder Feinabstimmung?

Für Webentwickler ist Prompt Engineering die bevorzugte Methode, generative KI anstelle von benutzerdefiniertem Training und Feinabstimmung zu nutzen. Aber selbst eine erweiterte Prompt-Erstellung ist in einigen Anwendungsfällen möglicherweise nicht ausreichend, insbesondere wenn Sie ein kleineres LLM verwenden.

Verwenden Sie die Feinabstimmung, wenn:

  • Sie benötigen für eine bestimmte Aufgabe höchste Genauigkeit und Leistung. Bei der Feinabstimmung werden die internen Parameter des Modells direkt für optimale Ergebnisse angepasst.
  • Sie haben gut ausgewählte Daten, die für Ihre Aufgabe relevant sind und bereits mit den gewünschten Ergebnissen versehen sind. Diese Daten sind für eine effektive Feinabstimmung erforderlich.
  • Sie verwenden das Modell wiederholt für denselben Zweck. Die Feinabstimmung kann einmal durchgeführt und für eine bestimmte Aufgabe wiederverwendet werden.