Die Effektivität eines Large Language Model hängt stark von den Anweisungen ab, die wir ihm geben. Prompt Engineering ist der Prozess, Fragen so zu formulieren, dass ein LLM die bestmögliche Ausgabe liefert. Das 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.
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 nicht immer von den Entwicklern offengelegt.
In diesem Dokument bezieht sich der Begriff „kleinere LLMs“ auf alle Modelle mit weniger als 30 Milliarden Parametern. Aktuell 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 eingesetzt?
- Generative KI auf dem Gerät/im Browser, z. B. wenn Sie Gemma 2B mit der LLM Inference API von MediaPipe verwenden (sogar für Geräte mit reiner CPU-Architektur 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 Web-Downloads in einem angemessenen Rahmen zu halten und den Speicher- und GPU-/CPU-Einschrä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
Chat-Schnittstellen, die auf großen LLMs wie Gemini oder ChatGPT basieren, können oft mit minimalem Prompting-Aufwand zufriedenstellende Ergebnisse liefern. Bei der Arbeit mit kleineren LLMs müssen Sie Ihren Ansatz jedoch anpassen. Kleinere LLMs sind weniger leistungsstark und haben einen kleineren Pool an Informationen, aus dem sie schöpfen können.
Kontext und genaue Formatierungsanweisungen angeben
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ößeres LLM (Gemini 1.5) | Kleineres LLM (Gemma 2B) | |
| Die Passform ist einfach perfekt! Das Gewicht wird gut verteilt und der Rucksack ist auch bei ganztägigen Wanderungen überraschend bequem. Würde ich empfehlen. | 5 | 4 von 5 Sternen** |
| Die Schultergurte sind dünn und haben sich bei schwerer Last in meine Schultern eingegraben. | 1 | 2/5 |
Gemini 1.5 liefert mit diesem einfachen Prompt die gewünschte Ausgabe, die Ausgabe von Gemma ist jedoch 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 so positiv, dass sie auf eine 5‑Sterne-Rezension hindeutet.
Um dieses Problem zu beheben, müssen wir Prompt-Engineering-Techniken wie One-, Few- und Multi-Shot-Prompting und Chain-of-Thought-Prompting verwenden. Wir müssen außerdem klare Formatierungsanweisungen geben und darauf bestehen, dass das Modell den gesamten Bereich der Bewertungen nutzt.
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 einfach perfekt! Das Gewicht wird gut verteilt und der Rucksack ist auch bei ganztägigen Wanderungen überraschend bequem. Würde ich empfehlen. |
Analyse: Diese Rezension ist sehr positiv und betont die Passform und den Komfort des Produkts. Das deutet auf eine hohe Zufriedenheit mit dem Produkt hin. Das rechtfertigt eine hohe Bewertung. Bewertung (Ganzzahl): 5 |
Die Gurte sind dünn und haben sich bei schwerer Last in meine Schultern eingegraben. |
**Analyse**: In der Rezension wird ein erhebliches Problem mit dem Tragekomfort der Armbänder hervorgehoben. Das Produkt ist möglicherweise nicht für schwere Lasten oder längere Ausflüge geeignet. **Bewertung**: 1 (schlechteste) |
Unser ausführlicherer Prompt in Kombination mit Few-Shot-Prompting und Chain-of-Thought-Prompting-Techniken führt zu genaueren Bewertungen.
Manuelles Parsen 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 ausgereifte Ergebnisse liefern und Chain-of-Thought-Prompts erfordern.
Im ersten Beispiel haben wir Chain-of-Thought-Prompts verwendet. Die Ausgabe enthielt also sowohl eine Analyse als auch eine Bewertung. Wir müssen die Bewertung manuell parsen. 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 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 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 KI-APIs im Browser sind in der Regel schlanker.
Tokenlimits beachten
Da Ihre Eingabeaufforderung für kleinere LLMs Beispiele oder detailliertere Anweisungen enthalten muss, ist sie wahrscheinlich länger und beansprucht mehr von Ihrem Eingabetokenlimit, sofern ein solches vorhanden ist.
Außerdem haben kleinere Modelle in der Regel ein geringeres Limit für Eingabetokens. Gemini 1.5 Pro hat beispielsweise ein Eingabetokenlimit von 1 Million, während Gemma-Modelle ein Kontextfenster von 8.000 Tokens haben.
Verwenden Sie Funktionen zum Zählen von Tokens, um das Limit nicht zu überschreiten.
Zeitschätzungen anpassen
Berücksichtigen Sie das Prompt-Design und ‑Testing in Ihren Schätzungen für die Entwicklungszeit.
Aufgrund von API-Unterschieden und Tokenlimits benötigen Sie wahrscheinlich mehr Zeit und Aufwand, um einen Prompt für ein kleineres LLM zu erstellen als für ein größeres. Das Testen und Validieren der LLM-Ausgabe kann ebenfalls mit einem höheren Aufwand verbunden sein.
Prompt-Engineer im Vergleich zur Feinabstimmung
Für Webentwickler ist Prompt Engineering die bevorzugte Methode, um generative KI über benutzerdefiniertes Training und Feinabstimmung zu nutzen. 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, wenn:
- Sie benötigen für eine bestimmte Aufgabe höchste Genauigkeit und Leistung. Beim Fine-Tuning 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 gelabelt wurden. Sie benötigen diese Daten für ein effektives Fine-Tuning.
- Sie verwenden das Modell wiederholt für denselben Zweck. Die Feinabstimmung kann einmal durchgeführt und für eine bestimmte Aufgabe wiederverwendet werden.