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, bei dem Fragen so formuliert werden, dass ein LLM die beste Ausgabe erzielt. 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 LLM-Größen 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 offene Gewichtsmodelle 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 Large Language Models wie Gemini oder ChatGPT basieren, können oft mit minimalem Prompting zufriedenstellende Ergebnisse erzielen. Wenn Sie jedoch mit kleineren LLMs arbeiten, müssen Sie Ihren Ansatz anpassen. Kleinere LLMs sind weniger leistungsfähig und haben einen kleineren Informationspool.

Geben Sie Kontext und genaue Anweisungen zum Formatieren an.

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 (rating)
  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. Empfehlenswert. 5 4 von 5 Sternen**
Die Träger waren dünn und sie begannen, meine Schultern unter schwerer Last zu vergraben. 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 Bewertung ist begeistert genug, um eine 5-Sterne-Bewertung auszuzeichnen.

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 geben und darauf bestehen, dass das Modell alle Bewertungen verwenden soll.

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 sehenswert! Verteilt das Gewicht gut und ist überraschend bequem, auch bei ganztägigen Wanderungen. Empfehlenswert.

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

Bewertung (ganze Zahl): 5

Die Träger waren dünn und bei schwerer Last haben sie sich in meine Schultern gegraben.

**Analyse:** In der Rezension wird ein erhebliches Problem mit dem Tragekomfort 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.

Erwarten Sie ein manuelles Parsen der Ausgabe

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

Im ersten Beispiel haben wir Chain-of-Thought-Prompts verwendet, sodass die Ausgabe sowohl eine Analyse als auch eine Bewertung enthielt und wir für die Bewertung manuell parsen 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 Prompt-Entwurf und Tests in Ihrer Zeitschätzung für die Entwicklungszeit.

Aufgrund von API-Unterschieden und Tokenlimits ist die Erstellung Ihres Prompts für ein kleineres als ein größeres LLM wahrscheinlich mehr Zeit und Aufwand. Das Testen und Validieren der Ausgabe des LLM kann auch mehr Aufwand erfordern.

Prompt-Engineering 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.