Die Effektivität eines Large Language Model (LLM) hängt stark von den Anweisungen ab, die wir ihm geben. Beim Prompt Engineering werden Fragen so formuliert, dass ein LLM die bestmögliche Ausgabe liefert. Es ist ein entscheidender 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.
Chatoberflächen, die auf großen LLMs wie Gemini oder ChatGPT basieren, können oft mit minimalem Prompting-Aufwand zufriedenstellende Ergebnisse liefern. Wenn Sie jedoch mit einem kleineren Standard-LLM arbeiten, das nicht feinabgestimmt ist, müssen Sie Ihren Ansatz anpassen.
Kleinere LLMs sind weniger leistungsstark und haben einen kleineren Pool an Informationen, aus dem sie schöpfen können.
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 alle 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 Endnutzer ausgeführt werden.
Wo werden kleinere LLMs verwendet?
- Generative KI auf dem Gerät/im Browser, z. B. wenn Sie Gemma 2B mit der LLM Inference API von MediaPipe verwenden (auch für Geräte mit nur einer CPU geeignet) oder DistilBert im Browser mit Transformers.js. Das Herunterladen eines Modells und das Ausführen von Inferenz auf dem Gerät eines Nutzers ist nur mit diesen kleineren LLMs möglich, um die Web-Downloads 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 feinabgestimmt werden.
Jetzt starten
Chatoberflächen, die auf großen LLMs wie Gemini oder ChatGPT basieren, können oft mit minimalem Prompting-Aufwand zufriedenstellende Ergebnisse liefern. Wenn Sie jedoch mit kleineren LLMs arbeiten, müssen Sie Ihren Ansatz anpassen. Kleinere LLMs sind weniger leistungsstark und haben einen kleineren Pool an Informationen, aus dem sie schöpfen können.
Kontext und genaue Formatierungsanweisungen bereitstellen
Um optimale Ergebnisse mit kleinen LLMs zu erzielen, müssen 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 (Rezension) | Ausgabe (Bewertung) | |
|---|---|---|
| Größeres LLM (Gemini 1.5) | Kleineres LLM (Gemma 2B) | |
| Die Passform ist perfekt! Das Gewicht wird gut verteilt und der Rucksack ist überraschend bequem, auch bei ganztägigen Wanderungen. Ich kann ihn nur empfehlen. | 5 | 4 von 5 Sternen** |
| Die Riemen sind zu dünn und haben bei schwerer Last angefangen, in meine Schultern einzuschneiden. | 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 enthusiastisch genug, um eine 5-Sterne-Bewertung zu rechtfertigen.
Um dieses Problem zu beheben, müssen wir Prompt-Engineering-Techniken verwenden, z. B. One-, Few- und Multi-Shot-Prompting sowie Chain-of-Thought-Prompting. Außerdem müssen wir klare Formatierungsanweisungen geben 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 (Rezension) | Ausgabe mit einem kleineren LLM (Gemma 2B) |
|---|---|
Die Passform ist perfekt! Das Gewicht wird gut verteilt und der Rucksack ist überraschend bequem, auch bei ganztägigen Wanderungen. Ich kann ihn nur empfehlen. |
**Analyse** : Diese Rezension ist sehr positiv und betont die Passform und den Komfort des Produkts, was auf eine hohe Zufriedenheit mit dem Produkt hindeutet. Das rechtfertigt eine hohe Bewertung. **Bewertung (Ganzzahl)** : 5 |
Die Riemen sind zu dünn und haben bei schwerer Last angefangen, in meine Schultern einzuschneiden. |
**Analyse** : Die Rezension weist auf ein erhebliches Komfortproblem mit den Riemen hin. Außerdem wird angedeutet, dass das Produkt möglicherweise nicht für schwere Lasten oder längere Ausflüge geeignet ist. **Bewertung** : 1 (schlechteste Bewertung) |
Unser ausführlicherer Prompt in Kombination mit Few-Shot-Prompting und Chain-of-Thought-Prompting-Techniken liefert genauere Bewertungen.
Manuelle Analyse der Ausgabe erwarten
Sie sollten die Ausgabe eines LLM immer manuell bereinigen und interpretieren. Das gilt insbesondere für kleinere LLMs, die möglicherweise weniger ausgefeilte Ergebnisse liefern und Chain-of-Thought-Prompting erfordern.
Im ersten Beispiel haben wir Chain-of-Thought-Prompting verwendet. Die Ausgabe enthielt also sowohl eine Analyse als auch eine Bewertung. Wir müssen die Bewertung manuell analysieren. 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);
}
API-Unterschiede beachten
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 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 wie die MediaPipe LLM Inference API oder Transformers.js zugegriffen wird. Das ist zwar nicht unbedingt eine technische Einschränkung, aber In-Browser-KI-APIs sind in der Regel schlanker.
Tokenlimits beachten
Da Ihr Prompt für kleinere LLMs Beispiele oder detailliertere Anweisungen enthalten muss, ist er wahrscheinlich länger und beansprucht mehr von Ihrem Eingabetokenlimit, falls vorhanden.
Außerdem haben kleinere Modelle in der Regel ein geringeres Eingabetokenlimit. Gemini 1.5 Pro hat beispielsweise ein Eingabetokenlimit von 1 Million, während Gemma-Modelle ein Kontextfenster von 8.000 haben.
Verwenden Sie Funktionen zur Tokenanzahl , um das Limit nicht zu überschreiten.
Zeitschätzungen anpassen
Berücksichtigen Sie das Prompt-Design und die Tests in Ihren Zeitschätzungen für die Entwicklung.
Aufgrund von API-Unterschieden und Tokenlimits benötigen Sie wahrscheinlich mehr Zeit und Aufwand, um Ihren Prompt für ein kleineres LLM zu erstellen als für ein größeres. Auch das Testen und Validieren der LLM-Ausgabe kann aufwendiger sein.
Prompt-Engineer oder Feinabstimmung?
Für Webentwickler ist Prompt Engineering unsere bevorzugte Methode, um generative KI zu nutzen, anstatt benutzerdefiniertes Training und Feinabstimmung zu verwenden. Aber selbst fortgeschrittenes Prompt Engineering reicht in einigen Anwendungsfällen möglicherweise nicht aus, insbesondere wenn Sie ein kleineres LLM verwenden.
Verwenden Sie die Feinabstimmung in folgenden Fällen:
- Sie benötigen für eine bestimmte 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 kuratierte 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 durchgeführt und für eine bestimmte Aufgabe wiederverwendet werden.