Antwortgenerierung

Entdecken Sie weitere Angebote des RAG Cookbook, um einen tieferen Einblick in die heutigen RAG-Lösungen zu gewinnen

Ein Flussdiagramm mit verschiedenen Formen und Symbolen, darunter eine blaue Sprechblase, ein Fragezeichen und.
Überblick

Die Antwortgenerierung ist die Komponente einer RAG-Lösung, die eine Antwort auf die Anfrage eines Benutzers unter Verwendung der Informationen erstellt, die aus den angestrebten Unternehmensdatenquellen oder dem Textkorpus abgerufen wurden. 

Überlegungen

Modellparameter

Die Zahlen hinter den Namen der Open-Source-LLMs bezeichnen die Parameter des Modells.  Beispielsweise ist Granite 3.0 8B Instruct ein Modell mit 8B-Parametern.  Denken Sie an die Parameter als die Dirigenten, die steuern, wie das Modell die Eingabe manipuliert und versteht und Ausgaben erzeugt. Sie könnten sich als Gewichtungen oder Verzerrungen manifestieren und die Bedeutung bestimmter Eingabemerkmale für die generierte Ausgabe beeinflussen.

Eine größere Parameteranzahl entspricht im Allgemeinen einem Modell mit erhöhter Komplexität und Anpassungsfähigkeit (obwohl dies nicht unbedingt auf verschiedene Architekturen zutrifft, im Allgemeinen innerhalb einer Transformer-Architektur). Ein großes Sprachmodell mit einer höheren Parameteranzahl kann aus den Daten komplexere Muster erkennen und so den Weg für reichhaltigere und präzisere Ausgaben ebnen. Aber wie bei vielen Dingen im Leben gibt es auch hier einen Kompromiss. Ein Anstieg der Parameter bedeutet höhere Rechenanforderungen, einen größeren Speicherbedarf und das Risiko einer Überanpassung.

Modelltypen: Anweisungen und Code im Vergleich, Anweisungen und Chat im Vergleich

Der Chat-Modus ist für Gesprächskontexte konzipiert, während der Anweisungsmodus für Aufgaben der Verarbeitung natürlicher Sprache in spezifischen Bereichen entwickelt wurde.

Die Feinabstimmung im Chat-Modus hilft dem LLM dabei, natürliche und kohärente Antworten zu generieren, die für den Benutzer relevant und ansprechend sind. Die Feinabstimmung im Anweisungsmodus hilft dem LLM, verschiedene Arten von Anweisungen besser zu befolgen und Ausgaben zu generieren, die genau und für die Aufgabe geeignet sind.

Modell-Einstellungen

LLMs bieten eine Handvoll Einstellungen, um zu „konfigurieren“, wie Antworten generiert werden.

  • Die Einstellung „Temperatur“ bestimmt, wie variabel die Antworten des Modells sind. Einfach ausgedrückt: Je niedriger die Temperatur, desto deterministischer und konsistenter sind die Antworten des Modells. Für RAG-Lösungen wird ein sehr niedriger Temperaturwert, idealerweise 0, empfohlen.
  • „max_tokens / max_new_tokens“ begrenzt die Anzahl der Token (ein Wort entspricht ungefähr 1,5 Token), die das Modell in seiner Antwort verwendet. Lösungsentwickler müssen experimentieren, um einen Wert zu finden, der vollständige Antworten mit zu vielen Informationen für ihren Anwendungsfall ausgleicht, aber 100 ist im Allgemeinen ein guter Grenzwert für RAG-Lösungen.
  • Die Stichprobenstrategie bestimmt, wie das Modell den nächsten Token in einer Antwort auswählt. Bei RAG-Lösungen sollte eine Greedy-Sampling-Strategie verwendet werden, die konsistente Antworten auf Eingabeaufforderungen gewährleistet.

Prompt Engineering

Zunächst einmal wollen wir uns mit Prompt-Regeln befassen, um die Leistung der Generierung von vornherein zu verbessern.

Regel Nr. 1: Einfach anfangen

Beginnen Sie nicht damit, einen sehr langen Prompt zu schreiben und diesen erst anschließend zu testen.

Beginnen Sie beispielsweise nicht mit einem langen Prompt wie:

- Sie arbeiten in der Finanzabteilung eines großen Elektronikunternehmens in der S&P 1000. Sie müssen die Protokolle der vierteljährlichen Aktionärsversammlungen zusammenfassen, um die wichtigsten Themen, Trends und Stimmungen zu ermitteln. 

Antworten Sie in einem numerischen Listenformat mit Aufzählungszeichen.

Stellen Sie sicher, dass jeder Satz ein vollständiger Satz ist.
Halluzinieren Sie nicht. Beantworten Sie die Fragen ausschließlich mit Informationen aus dem Protokoll.

Hier ist das Transkript in Kurzform:

Fangen Sie hier an:

- Fassen Sie die wichtigsten Themen aus dem folgenden Besprechungsprotokoll zusammen:

Regel Nr. 2: Nur Inkremente

Nehmen Sie keine großen Änderungen an den Modellparametern vor. 

In den meisten Fällen:

  • Geringfügige Änderungen der Temperatur und der Wiederholungsstrafe haben spürbare Auswirkungen.
  • Große Veränderungen verbergen oft Erfolge, die durch kleine Veränderungen möglich sind.

Wenden Sie die besten technischen Prinzipien an:

  • Ändern Sie jeweils nur einen Parameter. Validieren Sie jede Änderung einzeln.
  • Machen Sie Änderungen rückgängig, die nicht den gewünschten Effekt haben. Zurück zum vorherigen Wert.
  • Jede Änderung gegenüber der Standardeinstellung sollte eine gute Erklärung haben.

Regel Nr. 3: Kreuzvalidierung

Versuchen Sie, Ihren Prompt zu unterbrechen.  Testen Sie Ihren Prompt nicht ein einziges Mal und behaupten Sie, er sei erfolgreich. Führen Sie Dutzende von Tests mit Ihrem Prompt durch.

  • Versuchen Sie, Ihren Prompt zu unterbrechen, bevor der Kunde es tut.

Erstellen Sie einen Testdatensatz und fügen Sie fortlaufend Ihre Beispiele hinzu.  Testen Sie nach jeder POC-Veröffentlichung erneut, um sicherzustellen, dass Ihr Prompt weiterhin funktioniert.

Regel Nr. 4: Komplexe Extraktionen können nicht durch einzelne Eingabeaufforderungen durchgeführt werden.

Kein Problem, mehrere Prompts werden parallel mit watsonx.ai verarbeitet

Flussdiagramm für die Analyse von Finanzberichten mit sechs Eingabeaufforderungen und drei Abschnitten.

Regel Nr. 5: Prompt-Ketten

Teilen Sie Aufgaben in kleinere Unteraufgaben auf.

Ein Flussdiagramm, das den Prozess der Planung eines Urlaubs im kalifornischen Weinland veranschaulicht.

Regel Nr. 6: Aufgabenpriorisierung (oder Prompt-Architektur)

Trennen Sie jeden Schritt des Prozesses über mehrere Prompts und ihr spezielles Modell.

Ein Flussdiagramm, das den Prozess eines Multi-LLM-Assistenten veranschaulicht, von der Benutzeranfrage bis hin zu Unternehmensdaten.

Regel Nr. 7: granite.13b.chat.v

Chatmodelle erfordern ein anderes Prompt-Design als Anweisungsmodelle.

Ein Screenshot eines modellspezifischen Anweisungsformats mit einem System-Prompt und einem generischen Prompt.
Ein Screenshot eines generischen Prompts für kontextbezogenes Lernen.
Prompt für RAG-modellspezifisches Format.

Regel Nr. 8: Viel Spaß beim Spielen mit den Modellen!

Im Ernst, wir lernen genauso viel vom Spielen wie von der Arbeit.  Probieren Sie die neuesten LLM-Programme aus und stellen Sie sich den Herausforderungen mit Aufgaben außerhalb Ihres normalen Arbeitsalltags.

Wählen Sie etwas, das das LLM wahrscheinlich leisten könnte.

  • Schreibe ein Gedicht mit 4 Sätzen über Vögel. 
  • Chat-Herausforderung: Okay, jetzt über Hunde
  •  Erzähle mir in weniger als 5 Sätzen eine lustige Geschichte über einen Vogel namens Midori. 
  • Chat-Herausforderung: Ändere den Namen des Vogels in Charlie, füge die Farbe Blau hinzu und verfasse einen Chat mit 7 Sätzen. 
  • Beantworte die folgende Frage in nur 10 Wörtern: „Warum ist der Himmel blau?“ 
  • Chat-Herausforderung: Super, nenne mir einen Grund, der sich plausibel anhört, aber nicht stimmt.

Fügen Sie mehrstufige Interaktionen hinzu, um mit der Verkettung Ihrer Aufforderungen zu experimentieren.

System- und Benutzeraufforderungen

Die Bearbeitung der Systemaufforderung ist ebenso wichtig wie die Bearbeitung der Benutzeraufforderung. Die Systemaufforderung kann einen großen Unterschied in der Qualität der Antwort, dem Tonfall usw. ausmachen. Systemaufforderungen legen den Kontext für die Interaktion fest, steuern das Verhalten des Modells und gewährleisten Konsistenz, während Benutzeraufforderungen den spezifischen Inhalt des Gesprächs bestimmen. Es ist wichtig, dass Sie die Systemaufforderungen bearbeiten können, um die Leistung zu verbessern.

Systemaufforderung

Systemaufforderungen liefern die zugrundeliegenden Anweisungen, die das Verhalten der KI während der gesamten Interaktion steuern.  Sie legen die Rolle, den Tonfall und die Grenzen des Modells fest. Die Verwendung von Begrenzungszeichen kann dem Modell helfen und Prompt-Injektionen vermeiden.  Trennzeichen geben an, wo im Prompt die Benutzereingabe eingefügt wird, was dem Modell hilft zu erkennen, wo die Benutzereingabe beginnt und endet.  Begrenzer helfen auch dabei, Prompt-Injektionen zu vermeiden. Als Trennzeichen können beispielsweise folgende verwendet werden: ``**, **”””**, **< >**, ** `.

Hier ist ein Beispiel für eine Systemaufforderung für das Granite-Modell:

<|system|>\nDu bist Granite Chat, ein von IBM entwickeltes KI-Sprachmodell. Du bist ein vorsichtiger Assistent. Du befolgst die Anweisungen sorgfältig. Du bist hilfsbereit und harmlos, hältst dich an ethische Richtlinien und förderst positives Verhalten. Du antwortest immer auf Begrüßungen (zum Beispiel Hallo, Guten Tag, Morgen, Nachmittag, Abend, Nacht, Wie gehts, Schön, dich zu treffen usw.) mit „Hallo! Ich bin Granite Chat, entwickelt von IBM. Wie kann ich Ihnen heute helfen?“ Bitte sag nichts weiter und beginne kein Gespräch. {instruction}\n{session_history}<|user|>\n{query}\n<|assistant|>\n

Benutzeraufforderungen

Benutzeraufforderungen sind die spezifischen Anweisungen oder Anfragen des Benutzers, um die gewünschte Antwort vom Modell zu erhalten. Sie sollten klar und prägnant sein, um sicherzustellen, dass das Modell die Aufgabe versteht.

IBM Tools

Prompt Lab

Prompt Lab ist eine IBM Plattform, mit der Sie mit Foundation Models arbeiten und Prompts mit Hilfe von Prompt Engineering erstellen können. Im Prompt Lab können Nutzer im Prompt-Editor mit Foundation-Modellen im Modus Chat, Freeform oder Structured interagieren. Diese vielfältigen Optionen ermöglichen es Ihnen, die besten Modellkonfigurationen zu erstellen, um eine Reihe von Aufgaben im Stil Verarbeitung natürlicher Sprache zu unterstützen, darunter Fragestellung, Inhaltserstellung und -zusammenfassung, Textklassifikation und -extraktion.

Für Informationen zum Einstieg und alles Weitere zu Prompt Lab siehe bitte die offizielle Prompt Lab-Website

InstructLab

Eine neue Strategie zur Verbesserung der Genauigkeit einer RAG-Lösung besteht darin, ein Generationsmodell zu verwenden, das auf den Datenkorpus abgestimmt ist. Dies kann aus mehreren Gründen zu einer Verbesserung der End-to-End-Genauigkeit führen.  Die bedeutendste Verbesserung ergibt sich aus der Fähigkeit der Generierungsphase, die Abrufergebnisse zu verbessern und sogar zu korrigieren.  Es kann auch unternehmensspezifischere und relevantere Antworten liefern, da es auf Ihre unternehmensspezifischen Geschäftsinhalte abgestimmt werden kann.

Informationen zum Einstieg und zu allen weiteren Aspekten von InstructLab finden Sie im offiziellen InstructLab Repository.

Granite

Granite 3.0 umfasst eine Reihe von Modellen, wie den Granite 3.0 8B Instruct, 2B Instruct, 8B Base und 2B Base, die auf über 12 Billionen Token in 12 natürlichen Sprachen und 116 Programmiersprachen trainiert wurden. Diese Modelle erreichen oder übertreffen in akademischen und unternehmensinternen Benchmarks die Leistung ähnlich großer Modelle führender Anbieter und zeigen eine starke Performance bei Aufgaben wie Sprachverständnis, Codegenerierung und Dokumentenzusammenfassung.

Granite 3.0 – Unterscheidungsmerkmale

Transparenz und Sicherheit

IBMs Engagement für Transparenz und Sicherheit zeigt sich in der detaillierten Offenlegung der Trainingsdatensätze, Filter- und Kurationsprozesse im technischen Bericht zu Granite 3.0. Die Modelle werden unter der freizügigen Apache 2.0-Lizenz veröffentlicht, was Flexibilität und Autonomie für Unternehmenskunden und die breitere KI-Community gewährleistet. Darüber hinaus bieten die Granite Guardian 3.0-Modelle umfassende Funktionen zur Erkennung von Risiken und Schäden und übertreffen damit andere Sicherheitsmodelle auf dem Markt.

Effizienz und Kosteneffektivität

Granite 3.0-Modelle sind kosteneffizient und ermöglichen es Unternehmen, eine Frontier-Modellleistung zu einem Bruchteil der Kosten zu erreichen. Der Einsatz von InstructLab, einem kollaborativen Open-Source-Ansatz, ermöglicht die Feinabstimmung kleinerer Modelle auf spezifische Aufgaben, wodurch die Kosten im Vergleich zu größeren Modellen um das 3- bis 23-fache gesenkt werden. Die Mixture of Experts (MoE)-Architekturmodelle, wie das Granite 3.0 3B-A800M und 1B-A400M, bieten eine hohe Inferenzeffizienz mit minimalen Leistungskompromissen und sind damit ideal für Anwendungen mit geringer Latenz und CPU-basierte Bereitstellungen.

Multimodale Funktionen und zukünftige Updates

Bis Ende 2024 werden die Granite 3.0-Modelle voraussichtlich ein erweitertes 128K-Kontextfenster und multimodale Funktionen zum Verstehen von Dokumenten unterstützen, einschließlich Bildeingabe- und Textausgabeaufgaben. Diese Erweiterung wird ihren Nutzen in verschiedenen Unternehmensanwendungen weiter steigern.

Ökosystemintegration

Die Granite 3.0-Modelle sind über mehrere Plattformen erhältlich, darunter IBMs watsonx.ai, Hugging Face, Google Clouds Vertex KI, NVIDIA NIM Microservices, Ollama und Replicate, bieten Entwicklern eine breite Palette an Bereitstellung und sorgen für eine nahtlose Integration in bestehende Workflows. Zusammenfassend bieten IBMs Granite 3.0-Modelle eine leistungsstarke, transparente und kosteneffiziente Lösung für Unternehmens-KI, die modernste Leistung mit robusten Sicherheitsfunktionen und umfassender Ökosystemunterstützung kombiniert.

Für Informationen zum Einstieg und zu allem anderen rund um Granite siehe bitte die offizielle Granite-Website

Tipps und Empfehlungen

Besseres Prompting

Der Inhalt und die Struktur der an LLMs eingereichten Prompts können die Qualität und Genauigkeit der generierten Antworten stark beeinflussen.

Die sechs Prompt-Typen

Prompts können in sechs Haupttypen unterteilt werden:

Nur Schlüsselwörter

Suchanfragen, die nur aus Schlüsselwörtern bestehen, sind selbsterklärend; es handelt sich um Anfragen, die aus Schlüsselwörtern zusammengesetzt sind, die sich auf das jeweilige Thema beziehen. Zum Beispiel der Prompt:

Was ist die optimale Backzeit für einen Schokoladenkuchen in großer Höhe

lässt sich auf die folgenden Schlüsselwörter reduzieren:

Backzeit Schokoladenkuchen in großer Höhe

Aufforderungen, die nur auf Schlüsselwörter abzielen, führen in der Regel zu umfassenderen, stärker themenbezogenen Antworten mit hoher Relevanz für den abgerufenen Zusatztext. Dies kann ein erwünschter Effekt sein für eine Lösung, die umfassende, informative Antworten erfordert, wie beispielsweise ein Chatbot für einen Telefonassistenten. Bei Lösungen, die prägnante, dialogorientierte Antworten erfordern, kann dies jedoch zu einer zu großen Informationsmenge führen.

Vergleichend

Vergleichende Prompts bitten das LLM, Vergleiche zwischen einem oder mehreren Themen oder Konzepten im Prompt anzustellen. Einige Beispiele:

Was ist der Unterschied zwischen einer Regel und einer Rollenzuweisung?

Vergleichende Prompts können nützlich sein, wenn das Generierungsmodell und das unterstützende Korpus Informationen zu allen Konzepten sowie offensichtliche Dimensionen oder unterstützendes Material enthalten, wie die Konzepte sinnvoll verglichen werden können. Ohne diese wird ein vergleichender Prompt wahrscheinlich eine sinnlose oder ineffektive Antwort hervorrufen.

Aggregiert

Aggregierte Abfragen fordern das Modell auf, zwei oder mehr Konzepte oder Anfragen in einer einzigen Abfrage zusammenzufassen. Einige Beispiele:

Wie erstelle ich eine Berechtigung und eine Berechtigungsgruppe?

Zusammengefasste Aufgabenstellungen sind für LLMs im Allgemeinen schwieriger, da die Fragestellung eine inhärente Mehrdeutigkeit aufweist.   

  • Geht es darum, mehrere Konzepte parallel auszuführen, um die Verarbeitungszeit zu minimieren?
  • Geht es um komplementäre Konzepte, die sich gegenseitig verstärken?
  • Besteht die Absicht darin, zu erklären, wie man Aktionen in einer Abfolge von Schritten ausführt? 

Um diese Mehrdeutigkeit zu beheben, wird allgemein empfohlen, aggregierte Prompts in mehrere einzelne Themenprompts aufzuteilen oder zusätzlichen Kontext bereitzustellen, der die gewünschte Antwort explizit beschreibt.

Mehrdeutig

Ein mehrdeutiger Prompt kann auf mehrere Arten interpretiert werden. Einige Beispiele:

Was ist eine Rolle?

Dieser Prompt könnte Antworten zu Rollen im Kontext der Schauspielerei und einer anschließenden Diskussion über berühmte Schauspieler und ihre Rollen, Rollen im Kontext einer IT-Sicherheitslösung oder Rollen im Kontext eines Unternehmens hervorrufen. Aufgrund der Unsicherheit, die sie mit sich bringen, sind mehrdeutige Prompts für die meisten Lösungen eine schlechte Wahl. Sie sollten überarbeitet werden, um zusätzliche Details und Kontext hinzuzufügen und das LLM auf das gewünschte Thema zu fokussieren.

Abweichend

Im Kontext einer RAG-Lösung ist ein abweichender Prompt einer, für den keine Antwort im Korpus der unterstützenden Dokumente vorliegt. Dies kann zu halluzinatorischen/improvisierten Antworten führen, die auf dem im LLM enthaltenen Wissen basieren, oder zu irrelevanten Antworten, die auf schlecht relevanten Ergebnissen aus dem Korpus beruhen.

Es kann zwar unmöglich sein, sich in allen Anwendungsfällen vor abweichenden Antworten zu schützen (z. B. einem Chatbot), aber Lösungsentwickler können sie minimieren, indem sie die Eingaben durch Auswahllisten einschränken, z. B. „Ich kann Ihnen helfen bei …“, gefolgt von einer Reihe vordefinierter Themenbuttons, oder indem Benutzer durch beschreibende oder direktive Sprache in Benutzerhinweisen und Musterantworten zu sicheren Antworten „angestupst“ werden.

Indirekt

Indirekte Prompts sind Prompts, deren Schlüsselwörter nicht direkt im Korpus enthalten sind, es aber Synonyme gibt. Indirekte Prompts sind eine Herausforderung für Lösungsentwickler, da ihre Zuverlässigkeit davon abhängt, wie viele Synonyme es für die Prompt-Schlüsselwörter gibt und wie die Synonyme zu einer eindeutigen Abfrage führen.

Entwicklern wird empfohlen, einen Blacklisting-Abfragefiltermechanismus zu implementieren, um den Schlüsselwörtern eindeutige Details hinzuzufügen oder „problematische“ Schlüsselwörter durch eindeutige Synonyme oder Phrasen zu ersetzen.

Gute Prompting-Praktiken

Obwohl die Erstellung „guter“ Prompts ebenso eine Kunst wie eine Wissenschaft ist, gibt es eine Reihe anerkannter Praktiken, die zu besseren Prompts und damit besseren Ergebnissen führen.

Ein guter Prompt ist:

  • Relevant für die Zieldomäne und enthält genügend Details und Kontext, um den Inhalt und den Ton des gewünschten Outputs klar und spezifisch zu machen.

  • Auf die Zielgruppe zugeschnitten. Eine Antwort, die für einen Finanzanalysten in einem Unternehmen bestimmt ist, wird einen ganz anderen Ton, eine andere Struktur und einen anderen Inhalt haben als eine Antwort für einen Privatkunden im Bankwesen. Ein guter Prompt enthält Anweisungen („Du bist ein Finanzanalyst im mittleren Management. Erstelle einen Bericht …“) oder eine klare Angabe der Zielgruppe („… geschrieben für einen Privatkunden im Bankwesen, der keine Kenntnisse der Finanzterminologie hat“) für die Antwort.

  • Für einen bestimmten Anwendungsfall entwickelt. Ein guter Prompt sollte auf einen konkreten Anwendungsfall zugeschnitten sein und Angaben darüber enthalten, wo und wie die generierte Antwort verwendet wird („… die Antwort wird in einer Reiseindustrie-Branchenmagazin für Reiseveranstalter veröffentlicht“); dies wiederum beeinflusst den Ton, die Sprache und den Stil der generierten Antwort.

Mehr erfahren

Erhalten Sie die neuesten Technologiemuster, Lösungsarchitekturen und Architekturveröffentlichungen von IBM.

  1. Besuchen Sie das IBM Architecture Center
Beitragende

Vicky Kuo, Chris Kirby, Luke Major, Atin Chandel, Brant Li, Evan Wheldon

Aktualisiert: 15. November 2024