Langzeitgedächtnis mit RAG & GPTs
Über diese Seite Werk
Gründet auf dem Werk „KI-Revolution“ Arnold Oberleiter
25. Oktober 2024 n. Chr. hrsg.
AI mit Arnie
LLMs meistern
LLM-Anpassung - Systemprompts & GPTs
Überarbeitung Liste Werke von Klaus Feldmann
Abschrift
30. November 2024 n. Chr. erst.
14:42 Uhr Ausgabe 00
Ausgabe 00
veröffentlicht
geprüft
↑ In-Context Learning und SPR
→ Langzeitgedächtnis mit RAG & GPTs
↓ Der GPT Store - Alles, was du wissen musst
Langzeitgedächtniss mit RAG, GPTs einfach gestalten.mp4 Langzeitgedächtniss mit RAG, GPTs einfach gestalten.pages
🎓 Langzeitgedächtniss mit RAG & GPTs
📽️ 6 Langzeitgedächtniss mit RAG, GPTs einfach gestalten (19:38)
Du kennst den Systemprompt und du kennst das In-Context Learning, aber wir haben das aktuell im Chat gemacht. Wir werden jetzt auf In-Context Learning wechseln, das wir aber mit der sogenannten RAG-Technologie machen. Erstmal sehen wir uns an, was die RAG-Technologie ist, und dafür ist dieser Artikel perfekt.
Wir haben das schon mal kurz am Anfang des Kurses angerissen. Ich will das jetzt jedoch ein klein wenig vertiefen, und wir gehen danach natürlich sofort in die Praxis. Ganz, ganz einfach ausgedrückt: Diese RAG-Technologie ist ganz einfach, wie wir einem LLM Kontext geben, wir aber nicht das Tokenlimit vom In-Context Learning hier überschreiten. Das ist richtig wichtig. Und warum ist das wichtig? Weil ein LLM natürlich ab und zu falsche Informationen hat oder veraltete Informationen. Es antwortet auf Quellen, die nicht valide sind, oder es ist ab und zu einfach verwirrt. Tatsächlich – also kann mehrere Gründe haben.
Das heißt, wenn ich hier jetzt einfach mal fragen würde: „Gib mir Essensplan und Trainingsplan in Doggcrapp und Paleo,“ ich denke, ich würde nicht so eine gute Antwort bekommen, da ich nicht weiß, ob ChatGPT an Doggcrapp-Training trainiert worden ist. Und das kann man natürlich alles umgehen, indem man die RAG-Technologie verwendet. Und die RAG-Technologie hat einen weiteren Vorteil, daß wir das Tokenlimit nicht aufbrauchen. Das ist hier das Praktische.
Wir gehen sozusagen her, wir verwenden unser Wissen und speichern das außerhalb vom Kontextfensters. Und ChatGPT kann danach sozusagen hergehen und dieses Kontextfenster durchsuchen. Er verwendet ein Tool, ganz genauso wie wenn es das Web durchsuchen würde – aber diesmal durchsucht es einfach unsere hochgeladenen Dateien.
Wir müssen nicht zu tief eintauchen. Die Vorteile, die haben wir bereits gehört: Es ist natürlich auch kostengünstig, es hat aktuelle Informationen, liefert bessere Antworten, das ist natürlich auch vertrauenswürdiger und man hat mehr Kontrolle. Das heißt, ich kann dem Modell ganz genau sagen, was es antworten soll.
Man muss erstmal die externen Daten erstellen. Das sehen wir uns jetzt natürlich sofort an. Man kann sie danach abrufen, und man kann sie sogar erweitern und natürlich auch immer wieder aktualisieren. Das Ganze sieht in etwa so aus: Das LLM geht ganz einfach her und sucht sich danach unser Wissen durch. Und wir können das hochladen und dieses hochgeladene Wissen das wird nicht im LLM direkt gespeichert – nicht im Chat. Es wird in einer sogenannten Vektor-Datenbank gespeichert. All das kann auch über AWS direkt laufen. Wir sehen uns später natürlich auch noch an, wie man Apps erstellen kann. Aber wir können uns einfach nur merken: Wir haben danach eine … ein externes Wissen sozusagen, und dieses externe Wissen wird gespeichert in einer sogenannten Vektor-Database.
Hier kann man Dinge hochladen wie HTML-Seiten, PowerPoint-Präsentationen, PDFs, Excel-Tabellen und auch Textdateien. Das heißt, ganz, ganz viele Dinge werden hier unterstützt. Wenn man selbst seine App bauen will – was wir später machen, wie gesagt – dann könnte man auch Dinge verwenden wie Pinecone. Pinecone wie hier, die geben uns ganz einfach nur solche Vektor-Datenbanken zur Verfügung. Pinecone arbeitet zusammen mit ganz, ganz vielen verschiedenen Firmen wie HubSpot, Microsoft, Notion und so weiter. Und es ist auch relativ einfach, hier Pinecone zu verwenden, oder Pinecone in eine App einzubauen, damit wir die RAG-Technologie in einer App mittendrinnen haben.
Das Coolste ist aber: Wenn wir bei OpenAI bleiben – OpenAI ist hier natürlich auch ein Partner von Pinecone – aber wenn wir bei OpenAI direkt bleiben, dann haben wir natürlich schon eine Vektor-Database mit eingebaut. Und die Vektor-Database kann man sowohl über die API verwenden als auch im normalen ChatGPT-Interface. Wir sind aktuell noch im normalen Interface. Deshalb machen wir das Ganze so.
Wir können auf ChatGPT gehen, und danach müssen wir einen sogenannten GPT erstellen. Dafür klicken wir auf „GPTs erkunden“. Erstmal können wir danach hier oben auf „Erstellen“ klicken. Wir sehen uns danach natürlich noch den GPT-Store an. Das heißt, wenn man schon etwas verwenden will, das hier gelistet ist, dann auf alle Fälle kann man auch das machen. Aber es geht ja darum, wie wir einen GPT für uns persönlich jetzt machen – deshalb werden wir erstmal einen erstellen, bevor wir die Modelle anderer verwenden, damit wir verstehen, was wir hier verwenden.
Das heißt, wir klicken auf „Erstellen“ und kommen in dieses Menü rein, das ich schon mal kurz gesagt hab. Wir werden diesem Ding jetzt einen Namen geben,„Fitness-Experte“ zum Beispiel oder meinetwegen „Doggcrapp-Experte“ „DC-Experte“. Danach eine kleine Beschreibung – das heißt, was macht dieser GPT?„Hilft dabei, Muskeln aufzubauen.“ Danach einige Hinweise, also: Was tut dieses GPT, wie ver… verhält es sich, was sollte es nicht tun? Das hier sind ganz ganz genau wie die Custom Instructions, die wir uns schon angesehen haben.
Und hier machen wir das Ganze so, wie wir im normalen Prompt-Engineering gelernt haben. Hier könnte etwas so aussehen: Wir geben erstmal eine Rolle „Du bist ein Fitness-Experte und hilfst beim Erstellen von Trainingsplänen und Ernährungsplänen.“ Wie gesagt, Rechtschreibung wäre auch hier nicht unbedingt notwendig. Und jetzt müssen wir dem GPT natürlich auch sagen, wie es sich verhalten sollte: „Du hältst dich vor allem an das Wissen, das hochgeladen wird.“ oder hochgeladen wurde. Das Wissen werden wir danach natürlich noch hochladen.
Jetzt könnten wir hier aber noch viel, viel mehr eingeben. Wir könnten ihm zum Beispiel sagen: „Wenn du XY nicht weißt, dann könntest du auf diesen Link weiterleiten weiter.“ Oder was auch immer. Genau das werde ich auch jetzt machen. Also, wenn du die Antworten nicht weißt, dann antwortest du nicht, sondern leitest auf diesen Link weiter. Hiermit wollen wir sichergehen, dass unser GPT keinen Blödsinn erstellt.
Und wir verwenden einfach mal meinen YouTube-Kanal hier als Beispiel, damit wir tatsächlich irgendwo landen, wo wir eventuell mehr Hilfe bekommen. Wir könnten auch die Skool-Page von mir verwenden – also du kannst natürlich weiterleiten auf welche Webseite von dir oder von wen auch immer. Verwenden wir einfach mal diese Skool page von mir, die natürlich gratis ist.
Das heißt, ich verwende das da und sagen wir, hier würde es um Fitness gehen, in diesem interessanten Beispiel natürlich, es geht es mir nur darum, dass du Leute auch weiterleiten kannst auf gewisse Links. Das ich jetzt hier ganz einfach einfügen. Danach denke ich, haben wir hier tatsächlich schon ein…ähm … eine Anweisung oder Hinweise, wie er hier funktionieren sollte.
Danach die Gesprächsaufhänger. Ich könnte z. B. sowas schreiben: „Erkläre Doggcrapp-Training“, „Erkläre Paleo“, „Erstelle einen Essensplan“, „Erstelle einen Trainingsplan“. Jetzt haben wir schon mal die allgemeinen Dinge richtig gemacht. Jetzt geht es um das Wissen, denn wir wollen ja das In-Context Learning machen – in diesem Video.
Dafür müssen wir natürlich Dateien hochladen. Das Coolste ist natürlich: Wir könnten hier jetzt hergehen und diese Artikel nehmen, die wir schon hatten. Das heißt, wir könnten natürlich absolut hergehen und diese ganzen langen Artikel hochladen. Aber natürlich sind auch diese Vektor-Interfaces nicht unendlich groß. Auch diese haben ein Tokenlimit. Und das Modell tut sich immer schwerer, und schwerer den Kontext zu halten.
Also verwenden wir auch hierfür erstmal natürlich unser „Spars Prime Representation“, um die Dinge zu komprimieren, damit wir nicht das Kontextfenster unnötig schnell voll machen. Das heißt, auch in unsere hochgeladenen Dateien – auch die können wir natürlich komprimieren. Das muss nicht unbedingt sein, aber es funktioniert einfacher, besser und effizienter, wenn du das Ganze machst.
Wenn du z. B. Daten hast von deinem Unternehmen – meinetwegen geht es darum, wann ihr Pause macht und so weiter. Wir sprechen später noch über Datenschutz, denn das ist wichtig, wenn du Dinge hochlädst. Aber wenn du hier allgemeine Informationen hast für Leute, die z. B. bei dir anfangen zu arbeiten und du willst sie ganz einfach einlernen in deiner Firma, du hast allgemeine Informationen, wenn sie etwas nicht wissen, dann werden sie weitergeleitet auf deine Webseite.
Du musst natürlich selbst reintippen, was für dich relevant ist. Oder du lädst z. B. einen Artikel hoch. Wenn du das Ganze so effizient wie möglich machen willst, verwendest du das „Spars Prime Representation“, genauso wie wir es gemacht haben. Natürlich habe ich das jetzt schon. Die Rolle brauche ich dem Typen hier nicht mehr unbedingt geben. Ich kopiere das aber dennoch, da es schneller geht. Das heißt, ich will hier ganz einfach nur die Dinge alle kopieren, und diese Sachen könnten wir danach auch hier hochladen in unser Wissen.
Das heißt, ich kopiere das, ich erstelle mal eben eine neue Textdatei, die hier .… In diese Textdatei füge ich all das ein. Somit haben wir hier das gesamte Wissen komprimiert, dank dem „Spars Prime Representation“. Ich speicher das Ganze, und jetzt können wir es natürlich in ChatGPT hochladen. Das heißt, wir gehen wieder her, klicken „Datei hochladen“. Die Textdatei heißt „train“. Ich klicke auf „Öffnen“, jetzt wird dieses Wissen hochgeladen.
Und ChatGPT – unser Dc-Experte – sollte dieses Wissen durchsuchen. Jetzt können wir hier unten noch mehrere Funktionsweisen aktivieren oder deaktivieren. Die Onlinesuche brauchen wir die in diesem GPT? Ja, nein, vielleicht? Wir können die deaktivieren. Brauchen wir DALL·E zur Bildgenerierung? Wahrscheinlich nicht. Der Code-Interpreter könnte aber eventuell hilfreich sein – also holen wir den rein. Wir könnten ja eventuell Charts zeichnen mit unserem Code-Interpreter. Wir können natürlich hiermit viiele viele Dinge machen.
Und wir haben noch weitere Aktionen, über die ich später sprechen will, denn wir können auch externe APIs hinzufügen bei unseren GPTs. Dementsprechend klicke ich jetzt einfach mal auf „Erstellen“.
Für wen sollte der sein? Soll er für den GPT-Store sein, für jeden mit einem Link oder nur für mich? Wenn ich „Nur für mich“ klicke, dann ist er natürlich für mich privat. Wenn ich den z. B. an meine Kunden weiterschicken würde – und ich bin Fitnesstrainer – dann kann ich den natürlich teilen: „Für jeden mit einem Link“. Und ich kann ihn sogar im GPT-Store listen. Und so können ihn einfach alle finden, wenn sie im GPT-Store was suchen suchen, was wir uns später noch ansehen werden. Aber ich will das einfach mal „Für jeden mit einem Link“ hier dabeilassen. Deshalb klicke ich jetzt „Gemeinsam nutzen“. Jeder, der den Link zu diesem GPT hat, der kann diesen GPT jetzt verwenden.
Und das ist jetzt hier unser Experte für Doggcrapp-Training. Und wenn er gewisse Dinge nicht weiß, dann leitet er weiter auf die Webseite, die wir hier verlinkt haben. Das heißt, ich kann diesen Link kopieren, den kann ich dir zuschicken, den kann ich meiner Mutter zuschicken, meinen Kunden, meinen Fitnesskunden, wenn ich ein Unternehmen hab, wem wem auch immer. Ich klicke mal „GPT anzeigen“, denn dann können wir uns ansehen, wie das Ganze funktioniert.
Ich könnte mal fragen: „Erkläre Doggcrapp-Training.“ Und erinnere dich immer: Wenn du das Ding einfach nur noch benutzt, dann gehe auch mal kurz nochmal auf deine Custom Instructions. Vielleicht ist hier das da jetzt nicht mehr effizient, vielleicht macht es keinen Sinn mehr, dass ich das jetzt hier aktiviert habe. Dementsprechend will ich das einfach mal deaktivieren. Wir wollen hier ja schließlich kein „Spars Prime Representation“ mehr machen, und ich will, dass mir das Ding einfach mal Doggcrapp-Training erklärt. Ich klicke darauf, und ich bin mir relativ sicher, dass ich hier richtig, richtig gutes Wissen bekomme über Doggcrapp-Training, weil ich ihn natürlich trainiert habe an haufenweise Doggcrapp-Training-Material.
Und ich bekomme hier eine super, super gute Erklärung dafür. Und so könnte unser Chat starten. Aber ich kann das natürlich auch spezifischer machen. Ich kann hier fragen: „Hey, gib mir mal einen Beispielplan für das Brusttraining. Gib mir ein Beispiel für das, sagen wir mal, Beintraining.“
Hier ist ein Beispiel für das Beintraining im DC-Stil. Erstmal natürlich – ganz, ganz interessant – hat GPT vollkommen richtig automatisch erkannt, der Split beim Doggcrapp-Training, der sieht vor, dass man auch Bizeps, Unterarme und Waden trainiert am Beintag. Also insgesamt: Bizeps, Unterarme, Waden, Beinbizeps und Quadrizeps. Man startet immer mit Waden, danach mit Bizeps und danach geht es los: Quadrizeps, Beinbizeps. Und man sieht die gesamten Übungen – also richtig, richtig perfekt umgesetzt.
All das war hier tatsächlich perfekt umgesetzt von ChatGPT. Und ich könnte mal Folgendes fragen: „Macht es Sinn, Kniebandagen zu verwenden?“ Das heißt, du siehst, wir bekommen natürlich auch weiterhin Informationen, da ChatGPT das allgemeine Large Language Model natürlich immer noch all das Wissen hat, woran es trainiert worden ist. Es versucht einfach, das Wissen aus dem hochgeladenen Wissen hier rauszusaugen.
Wenn du willst, dass ChatGPT nicht antwortet bei Wissen, woran es nicht trainiert worden ist, dann würde man das natürlich im Systemprompt festlegen. Man würde dann sagen: „Wenn du die Dinge nicht in deinem hochgeladenen Wissen findest, dann bitte bitte antworte nicht. Antworte mit ‚Das weiß ich nicht.‘“ Das heißt, du kannst das natürlich ganz, ganz genau so anpassen, wie du willst. Und du verwendest dafür einfach natürliche Sprache.
Und wenn ich danach so etwas frage wie: „Wo bekomme ich mehr Informationen?“, dann gibt mir ChatGPT Infos: Also Foren und Communities, spezialisierte Webseiten, Bücher und eBooks, YouTube-Kanäle. Man könnte auch einen erfahrenen Trainer oder Coach finden. Falls du nach einer speziellen Anlaufstelle für Fragen zu DC suchst, empfiehlt er dir die School-Plattform zu besuchen. Und wenn ich hier drauf klicken würde, dann landen wir hier auf dem Link, den ich eben ChatGPT gegeben habe.
Das heißt, wir landen auf School, oder ich könnte meinen YouTube-Kanal verlinken. Der YouTube-Kanal ist hier aktuell automatisch verlinkt. Ich könnte Webseiten verlinken, ich könnte was auch immer verlinken. Wir haben also einen richtig, richtig praktischen Assistenten gebaut. Und der Assistent wurde ganz, ganz genau auf uns zugeschnitten.
Du erinnerst dich, wir haben auch den Code-Interpreter mit eingebaut. Dementsprechend könnte ich natürlich auch sowas hier sagen: „Ich habe bei Kniebeugen mit 120 kg gestartet und will mich für 8 Wochen jedes Mal um 2 % steigern. Male ein Diagramm, wie das aussehen könnte.“
Wir haben den Code-Interpreter dabei, dementsprechend wird jetzt das Zeug analysiert. Wir werden hier Python verwenden, wir rufen die richtigen Bibliotheken ab, und danach sollten wir hier tatsächlich ein klitzekleines Beispiel bekommen. Das heißt, eien Chart.
Natürlich habe ich „male“ gesagt, also wir malen unsere Charts hier, aber wir sollten danach einfach einen super schönen Chart bekommen, wie das Ganze aussehen könnte. Hier siehst du ein Diagramm, das die Gewichtssteigerung deiner Kniebeuge über Wochen darstellt, basierend auf einer Steigerung von 2 % pro Woche. Du startest bei 120 kg und erhöhst das Gewicht jede Woche um 2 %.
Und schon haben wir hier unseren wunderschönen Chart. Du siehst hier die y-Achse zeigt das Gewicht in Kilogramm, die x-Achse zeigt die Wochen an. Das heißt, erstmal 120, danach Woche 2: 122,4 , danach natürlich 124,85 , 127,34 und wir hier die perfekte Steigerung vorprogrammiert. Und jetzt können wir natürlich verschiedene Dinge machen: „Switch to static Chart“. Ich könnte ja mal draufklicken. Jetzt siehst du das Ganze anders angezeigt. Das ist also alles richtig, richtig praktisch.
Wir können die Farben verändern, sogar meinetwegen hast du das Ganze lieber in Rot oder sonst was. Und schon haben wir hier die Linie in Rot. Wir können natürlich unseren Chart herunterladen oder wir können ihn groß machen und uns das Ganze etwas genauer ansehen.
Stellen wir uns den Unterschied zwischen RAG und dem In-Context Learning am besten so vor: Das In-Context Learning läuft natürlich in einem Chat ab. Das heißt, bei einer Konversation erinnert sich ChatGP T natürlich entsprechend der Tokenlänge immer an deine Sachen, eben bis das Tokenlimit überschritten wird.
Die RAG-Technologie – hier haben wir sozusagen unser externes Wissen. Das wis nicht…… ist hochgeladen, und das kannst du als Langzeitgedächtnis sehen. Also, dieses Wissen ist immer abrufbar, völlig egal, wie lang der Chat ist. Dieses Langzeitgedächtnis ist immer für ChatGPT extern abgreifbar.
Und das In-Context Learning, daß heißt in einem einzelnen Chat, das ist das Kurzeitgedächtnis. Einige Leute bringen das immer durcheinander. Man kann es auch in-Context-Learning nennen, mit der RAG-Technologie, es ist mir wichtig, dass du verstehst, dass das In-Context Learning in einem Chat, kannst du dir als Kurzzeitgedächtnis vorstellen, denn das vergißt ChatGPT mit der Zeit und die Rag-Technologie kannst du dir als Langzeitgedächtnis vorstellen, da das natürlich extern gespeichert ist – in unseren hochgeladenen Wissen – und das kann natürlich wieder und wieder abgeruft werden. Ja, ich habe diese wunderhübsche Tabelle mit ChatGPT erstellt, mit diesen einfachen Wörtern.
In diesem Video hast du gesehen, wie wir die RAG-Technologie verwenden. RAG bedeutet nichts anderes, als dass wir externe Dateien hochladen können. Wir können das machen in ChatGPT, hier wird uns die Vektor-Database automatisch zur Verfügung gestellt. Wir könnten sogar Apps erstellen und eine Vektor-Database, für um Pinecone z. B. zu verwenden, wenn wir nicht über die OpenAI-API arbeiten.
Un wir können hier viele, viele Dinge hochladen und auch im Systemprompt einstellen, wie das LLM reagieren sollte. So können wir für unseren speziellen Use Case ein LLM so zuschneidern, dass es perfekt für uns reagiert. Wir können das Ganze natürlich noch effizienter machen, indem wir das „Spars Prime Representation“ verwenden, bevor wir die Dinge hochladen. Denn auch die RAG-Technologie hat natürlich nicht ein unendlich großes Kontextfenster.
Aktuell weiß man nicht ganz genau, wie groß das Fenster ist. Man weiß nur, ChatGPT geht her und durchsucht unsere Vektor-Database und je kleiner und komprimierter der Text, umso besser werden die Antworten. Wird die Vektor-Database zu groß gefüllt mit Fluff, also mit unnützen Dingen, dann wird das Ganze unpraktischer und weniger relevant.
Das ist, wie du dein eigenes ChatGPT anpasst. Hierzu gibt es noch viel mehr – man kann APIs einbauen und vieles mehr. Das ist aber die einfachste Technologie. Bevor wir APIs einbauen, müssen wir natürlich auch lernen, was APIs sind und so weiter. Aber erstmal sehen wir uns den GPT-Store an, denn du kannst eventuell auch GPTs von anderen Leuten verwenden, bevor du jedes einzelne GPT für dich machst.
Also, wir sehen uns im nächsten Video.
- AufEinWort Werk
- Werk von Arnold Oberleiter
- 25. Oktober 2024 n. Chr. hrsg.
- Werk AI mit Arnie
- Hauptteil LLMs meistern
- LLM-Anpassung - Systemprompts & GPTs
- Werkart Überarbeitung
- Werk von Klaus Feldmann
- AufEinWort Werkausgabe Abschrift
- 30. November 2024 n. Chr. erst.
- Leserschaft keine
- AufEinWort freigegeben
- AufEinWort geprüft
- Langzeitgedächtnis
- retrieval augmented generation (RAG)
- und…
- generative pretrained transformer (GPT)