Praktisches Prompt Engineering für kleinere LLMs

Maud Nalpas
Maud Nalpas

Die Effektivität eines Large Language Model hängt stark von den Anweisungen ab, die wir ihm geben. Prompt Engineering ist der Prozess, bei dem Fragen so formuliert werden, dass das beste Ergebnis von einem LLM erzielt wird. Er ist ein entscheidender Schritt bei der Implementierung einer LLM-basierten Funktion.

Prompt Engineering ist ein iterativer Prozess. Wenn Sie mit verschiedenen LLMs experimentiert haben, ist Ihnen wahrscheinlich aufgefallen, dass Sie Ihren Prompt anpassen müssen, um ein besseres Ergebnis zu erzielen.

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

Chatschnittstellen auf Grundlage großer LLMs wie Gemini oder ChatGPT können oft mit minimalem Prompt-Aufwand zu zufriedenstellenden Ergebnissen führen. Wenn Sie jedoch mit einem kleineren Standard-LLM arbeiten, das nicht genau abgestimmt ist, müssen Sie Ihren Ansatz anpassen.

Kleinere LLMs sind weniger leistungsstark und haben einen kleineren Informationspool, der genutzt werden kann.

Was meinen wir mit „kleineren LLMs“?

Die Definition von LLM-Größen ist kompliziert und wird von den Herstellern nicht immer offengelegt.

In diesem Dokument bezieht sich „kleinere LLMs“ auf jedes Modell unter 30 Milliarden Parametern. Derzeit können Modelle mit wenigen Millionen bis einigen Milliarden Parametern realistischerweise im Browser auf kundenspezifischen Geräten ausgeführt werden.

Wo werden kleinere LLMs verwendet?

  • Generative AI auf dem Gerät/im Browser, z. B. wenn Sie Gemma 2B mit der LLM Inference API von MediaPipe (auch für ausschließlich CPU-basierte Geräte geeignet) oder DistilBert im Browser mit Transformers.js verwenden. Das Herunterladen eines Modells und das Ausführen von Inferenzen auf dem Gerät eines Nutzers ist nur mit diesen kleineren LLMs möglich, um Webdownloads vernünftig zu halten und den Arbeitsspeicher- und GPU-/CPU-Einschränkungen eines Geräts gerecht zu werden.
  • Benutzerdefinierte serverseitige Generative AI. Kleine, offene Modelle wie Gemma 2B, Gemma 7B oder Gemma 27B stehen Ihnen zur Verfügung, die Sie auf Ihrem eigenen Server ausführen (und optional optimieren können).

Erste Schritte

Chatoberflächen, die auf großen LLMs wie Gemini oder ChatGPT basieren, können oft mit minimalem Prompt-Aufwand zufriedene Ergebnisse liefern. Wenn Sie jedoch mit kleineren LLMs arbeiten, müssen Sie Ihren Ansatz anpassen. Kleinere LLMs sind weniger leistungsstark und haben einen kleineren Informationspool, der genutzt werden kann.

Kontext und genaue Formatierungsanleitungen bereitstellen

Um mit kleinen LLMs optimale Ergebnisse zu erzielen, sollten Sie detailliertere und spezifische 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 (Rezension) Ausgabe (Rating)
  Größeres LLM (Gemini 1.5) Kleineres LLM (Gemma 2B)
Ich liebe die Passform! Verteilt das Gewicht und ist überraschend komfortabel, auch bei ganztägigen Wanderungen. Ich kann es empfehlen. 5 4 von 5 Sternen**
Die Träger sind dünn und unter schwerer Last konnten sie sich in meine Schultern vertiefen. 1 2/5

Gemini 1.5 liefert mit diesem einfachen Prompt zwar die gewünschte Ausgabe, aber Gemmas Ausgabe ist nicht zufriedenstellend:

  • Das Format ist falsch. Wir haben eine Ganzzahl für die Bewertung angefordert.
  • Die Bewertung scheint nicht ganz zutreffend zu sein. Die erste Rezension ist begeistert genug, um auf eine 5-Sterne-Rezension hinzuweisen.

Um dies zu beheben, müssen wir Prompt Engineering-Techniken, One-Shot- und Multi-Shot-Prompts sowie Chain-of-Tought-Prompts verwenden. Außerdem müssen wir klare Formatierungsanweisungen geben und darauf bestehen, dass das Modell die gesamte Bandbreite an 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 (Rezension) Ausgabe mit einem kleineren LLM (Gemma 2B)

Ich liebe die Passform! Verteilt das Gewicht gut und überraschend bequem bei ganztägigen Wanderungen. Ich kann es empfehlen.

Analyse: Diese Rezension ist äußerst positiv und betont die Passform und den Komfort des Produkts, was auf eine hohe Zufriedenheit mit dem Produkt hinweist. Das rechtfertigt eine hohe Bewertung.

Bewertung (Ganzzahl): 5

Die Träger sind dünn und unter schwerer Last verkratzten sie sich in meine Schultern.

**Analyse:** In der Rezension geht es um ein erhebliches Problem mit den Trägern. Es deutet auch darauf hin, dass das Produkt möglicherweise nicht für hohe Ladevorgänge oder längere Ausflüge geeignet ist.

**Bewertung:** 1 (schlechtste)

Unsere ausgefeilteren Prompts in Kombination mit „wenige Prompts“ und „Chain of Threating“-Techniken erzielen genauere Bewertungen.

Die Ausgabe muss manuell geparst werden.

Sie sollten die Ausgabe eines LLM zwar immer manuell bereinigen und interpretieren, aber dies gilt insbesondere für kleinere LLMs, die weniger ausgearbeitete Ergebnisse liefern und möglicherweise ein Chain-of-Thought Prompting 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 jedes Mal.

// 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 zwischen Mind API

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

Derzeit sind diese Features nicht immer für benutzerdefinierte Modelle oder für kleinere LLMs verfügbar, auf die über browserinterne KI-APIs wie die MediaPipe LLM Inference API oder Transformers.js zugegriffen wird. Dies ist zwar nicht unbedingt eine technische Einschränkung, Browserinterne KI-APIs sind jedoch in der Regel schlanker.

Mind-Token-Limits

Da Ihre Aufforderung für kleinere LLMs Beispiele oder ausführlichere Anweisungen enthalten muss, dauert sie wahrscheinlich länger und beansprucht gegebenenfalls mehr von Ihrem Eingabetoken-Limit.

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

Mit Funktionen für die Tokenzahl können Sie verhindern, dass das Limit erreicht wird.

Zeitschätzungen anpassen

Berücksichtigen Sie bei Ihrer Schätzung der Entwicklungszeit die Prompt-Entwurfsweise und Tests.

Aufgrund von API-Unterschieden und Tokenlimits benötigen Sie wahrscheinlich mehr Zeit und Aufwand, um Ihre Aufforderung für ein kleineres LLM als für ein größeres zu erstellen. Auch das Testen und Validieren der LLM-Ausgabe kann aufwendiger sein.

Prompt Engineering und Feinabstimmung im Vergleich?

Für Webentwickler ist Prompt Engineering unsere bevorzugte Methode, um Generative AI vor benutzerdefiniertem Training und Feinabstimmung zu nutzen. Aber selbst Advanced Prompt Engineering ist in einigen Anwendungsfällen möglicherweise nicht ausreichend, insbesondere wenn Sie ein kleineres LLM verwenden.

Verwenden Sie die Feinabstimmung in folgenden Fällen:

  • Sie erwarten bei einer bestimmten Aufgabe höchste Genauigkeit und Leistung. Bei der Feinabstimmung werden die internen Parameter des Modells direkt angepasst, um optimale Ergebnisse zu erzielen.
  • Sie haben gut zusammengestellte Daten, die für Ihre Aufgabe relevant sind und bereits mit bevorzugten Ausgaben gekennzeichnet sind. Sie benötigen diese Daten für eine effektive Feinabstimmung.
  • Sie verwenden das Modell wiederholt für denselben Zweck. Die Feinabstimmung kann einmal vorgenommen und für eine bestimmte Aufgabe wiederverwendet werden.