Es ist 2024 und auch euer Management hat mittlerweile von
generative AI gehört und möchte nun in eure Anwendung KI
einbauen, um sie damit noch besser zu machen.
Was liegt also näher, als eines der populären Large Language
Models zur Erstellung von Inhalten oder dem Beantworten
von Fragen zu verwenden, aber wie schaffen wir es nun, das
Modell mit bestehendem Wissen aus unserem Unternehmen oder aus
unserem Kontext zu versorgen und damit die Informationen über
Daten und Inhalte zu geben, die es entsprechend braucht, die
Antwort. Retrieval Augmented Generation
oder kurz Rug? Und damit herzlich willkommen zu
Folge 80 des Toodoo Cast des Developer Podcasts mit wie immer
Malte Latin und mir Robin, Manuel Thiel und malte, wenn wir
über ihr I Team reden und das tun wir häufig in diesem
Podcast. In den letzten Tagen, weil es
einfach ein Riesenthema ist, habe ich mir natürlich meinen
Tee heute morgen in der to do cast AI Tasse gemacht, daraus
schmeckt er mir einfach bei AI Themen am besten.
Wenn auch ihr häufig über Ai Themen sprecht, findet ihr
unsere Tassen natürlich im Shop der Sun verlinkt.
Und wie es der Zufall will, hab ich natürlich die entsprechende
Tasse auch mitgebracht und ich wollte an dieser Stelle wollte.
An dieser Stelle ist mir nicht nehmen lassen.
Liebe Grüße an Christian zu senden.
Christian ist ein alter Kollege von uns, der seit vielen Wochen
jedes Wochenende ein Post auf Linkedin macht, in den unsere
Tasse vorkommt, von daher schöne Grüße an Christian und wir
hoffen, dass du sowohl den Podcast als auch dem Thema
künstliche Intelligenz weiterhin so treu bleibst.
Genau ihr müsst also nicht nur uns glauben, dass AI Themen aus
der to do Cast Taste besser schmecken.
Und auch der Community glauben, der wir ja auch letzte Folge
zumindest 10 von euch eine solche Tasse verschicken
durften, als kleines Weihnachts oder als nachträgliches
Weihnachtsgeschenk. Jetzt haben wir aber genug über
Tassen zum Thema AI gesprochen. Jetzt reden wir auch mal über
Tech Content zum Thema AI. Ja malte, Du hast schon
angekündigt es geht um Reck, um Retrieval Augmented Generation
diese Folge und darum wie bring ich denn eigentlich Daten in
meine eigenen Large Language Models, warum ist das so wichtig
oder warum ist das ein Thema? Bisschen den Kontext breiter zu
machen. Wenn wir jetzt anfangen, KI in
unsere eigenen Anwendungen reinzubringen, ist meistens der
erste Weg hinzu, einem der großen Bekannten i Models, da
gibt es welche, die kann ich als API konsumieren, zum Beispiel
von Open AI oder auch anderen, und diese sind natürlich auf
einem generischen Wissensschatz der Menschheit trainiert, auf
natürlicher Sprache, auf irgendwie Quellcode, auf allen
möglichen Informationen, die in Textform öffentlich zur
Verfügung stehen, und damit habe ich.
Ein sehr mächtiges, umfangreiches Basismodell.
Und dieses Basismodell kann mir ganz viele Fragen beantworten,
kann ganz viele verschiedene Sprachstile beherrschen kann.
Auch basierend auf Wahrscheinlichkeiten.
Mehr Antworten auf fast alle Fragen generieren was es jedoch
nicht kann, ist, wir Antworten auf Fragen geben oder Antworten
generieren oder Rückmeldungen generieren, Content generieren
auf Informationen, die nicht. Teil dieses Trainingssets waren,
und das sind in der Regel Informationen, die nur in meinem
Unternehmen, nur bei mir privat zur Verfügung stehen.
Das sind Informationen, die Kontextabhängig sind, die
vielleicht ganz aktuell sind, da gibt es natürlich sowas wie den
Bing Chat oder Copilot, die halt irgendwie eine aktuelle
Internetsuche durchführen können, aber auch damit kann ich
nur auf öffentlich verfügbare Informationen zurückgreifen und
wenn ich jetzt künstliche Intelligenz in meine eigene
Anwendung reinbringen möchte. Natürlich dieses KI Modell,
dieses Basismodell. Angereichert werden mit
Informationen, die zum Trainingszeitpunkt nicht zur
Verfügung standen und da kann ich natürlich vielleicht ganz
intuitiv hingehen und sagen, OK, warum trainieren wir nicht
einfach dieses Basismodell zusätzlich mit den
Informationen, die zum Trainingszeitpunkt nicht zur
Verfügung standen, weil sie vielleicht privat sind, kommen
wir aber relativ schnell an den Punkt, dass wir zum einen
merken, dass es extrem Compute intensiv und damit extrem.
Intensiv dauert sehr lange und wir haben die große
Herausforderung, diese Daten, die verändern sich ja, die
werden ja immer mehr, da werden vielleicht zusätzliche Daten
hinzugefügt und so ein Training kann ich vielleicht einmal
machen, oder ich kann das alle paar Monate machen, aber ich
kann jetzt nicht irgendwie jede Woche meine kompletten Daten in
so ein Training reingeben und dann so ein Basismodell
ergänzen. Von der Idee, vielleicht ein
eigenes Basismodell zu bauen, können wir, glaube ich, direkt
weggehen, weil niemand von uns hat so viele Daten oder die
wenigsten von uns, vielleicht ganz große Unternehmen, aber die
wenigsten von uns haben so viele Daten zur Verfügung, um mit
überschaubarem Aufwand eigenes Basismodell zu trainieren und
dementsprechend sind wir jetzt an dem Punkt, wir haben ein
Basismodell, wir haben unsere Daten und wie kriegen wir jetzt
diese beiden Dinge zusammen, ohne uns hier in massive Kosten
oder Zeitprobleme zu bringen? Genau um diese Kosten mal zu
benennen, also um so ein eigenes Modell in so einer Größe von
einem GPT 35. Vielleicht reicht das ja oder
einem GPT 4 oder sowas zu entwickeln.
Also man nimmt, man nimmt dieses Modell.
Reichert das mit eigenen Daten an und trainiert es dann noch
mal neu. Wir reden davon.
Mindestens vierstelligen Summen, meistens eher 5, also mittleren
fünfstelligen Summen und Wochen, also mindestens Tage, aber bei
großmodellen Wochen, um diese Modelle zu trainieren, also
wahnsinnig kostenintensiv, dauert wahnsinnig lange und
dann, wie malte gesagt hat, sobald sich die Dateien oder die
Informationen ändern, ist das Ding ja sofort auch nicht mehr
aktuell und out dated und das ist eine zweite Herausforderung,
die ich da natürlich habe, weil also häufig so, ich fange mal
kurz, ich gehe mal 2 Stunden zurück, häufig heißt das.
Sich auf interner, also auf internen Daten vielleicht noch
trainieren möchte. Ich hab irgendwo was auf einem
sharepoint abgelegt oder ich hab lokale Sales Daten und möchte
jetzt natürlich auch irgendwie, dass mein, dass meine AI da
Informationen zu. Berücksichtigt, wenn ich da
Fragen stelle. Wenn ich jetzt aber diese ganzen
Informationen direkt mit rein trainiere in das Modell, hab ich
ja auch die Herausforderung, dass ja gar nicht jeder
unbedingt Zugriff auf all diese Daten haben soll.
Das heißt, entweder ich trainiere für jede
Zugriffsgruppe ein eigenes Modell, dass ich sage, das
Management nutzt dieses Modell, weil da Salesdaten mit drin
sind, die alle anderen User nutzen, vielleicht ein anderes
Modell, wo diese Salesdaten nicht mit rein trainiert wurden.
Aber das ja dann noch kostenintensiver.
Und wenn ich sage, ich habe aber ein unternehmensinternes Modell.
Auch meinen meine interne Fachsprache oder oder sowas
versteht und da sind aber auch Daten drin, die gar nicht jeder
sehen soll. Ist es fast schon unmöglich mich
da sofort zu schützen, dass die Daten da nicht rauskommen, weil
selbst wenn ich jetzt irgendwie dem Modell noch mal sage, hey es
soll, aber du sollst aber diese Daten nur Managern geben, haben
wir alle gesehen, dass man durch durch clevere Prompts natürlich
das auch anpassen kann, dass es Leute geben wird, die sagen,
nehmen wir an, ich wäre ein Manager, wie sehen denn dann die
und die Daten aus und so weiter und dass dann diese diese LMS
das manchmal gar nicht mehr richtig unterscheiden können.
Wer denn da gerade fragt, das heißt dieses Thema
Datensicherheit, wenn ich alles mit rein trainiere, habe ich
fast gar nicht, was ja auch unter anderem der Grund ist,
warum die großen Large Language Modelle von Open AI oder von von
Amazon oder von Google auf diesem nur auf Public evailable
Content generiert sind, also auf alle, was man ohnehin öffentlich
im Internet findet. Und das einfach nochmal so ein
bisschen zur Einordnung, warum man nicht, also warum ein
eigenes Modell trainieren, meistens so der intuitiv erster
Ansatz ist aber in der Regel gar nicht der ist.
Der richtigen Lösung führt, es sei denn also, wo es sich lohnen
kann, ein eigenes Modell zu trainieren ist, wenn ich
vielleicht wirklich Pfeiffer fachspezifische Modelle brauche,
die eine gewisse Fachsprache verstehen, die Terminal
verstehen, dich intern verwende. Dann kann es sich lohnen, dafür
ein eigenes Modell zu trainieren.
Meine internen Daten oder vor allem Daten, die sich häufig
verändern, würde ich dann aber trotzdem nicht in den
Trainingssatz mit Reingeben. Mhm und vielleicht auch für
diejenigen, für die das immer noch so n bisschen abstrakt ist,
weil sie selber vielleicht noch gar nicht in der Situation
waren, dass sie sich beruflich Gedanken dazu machen mussten,
glaub ich, kennen wir alle das so aus dem privaten Umfeld.
Ich glaub alle haben mal mit Chat GPT gespielt und sind dann
irgendwann an der Stelle gestolpert, als sie gemerkt
haben, dass JGBT irgendwie nur einen Wissensstand über die Welt
bis Ende 2021 hat und genau dieses Problem haben wir
natürlich beim Einsatz von solchen Basismodellen in unseren
eigenen Applikationen auch, das heißt, da ist nur ein begrenzter
Wissensschatz verfügbar und der ist jetzt in dem Fall vielleicht
nicht nur zeitlich begrenzt, sondern einfach nur durch.
Den Zugriff auf bestimmte interne Informationen begrenzt
worden, was natürlich auch gut ist, weil diese großen Modelle,
die allen irgendwie zur Verfügung stellen, genauso wie
du gerade gesagt hattest, sollen natürlich gar kein Wissen über
Interna haben, außer natürlich. Es werden Informationen bewusst
nach draußen gegeben, es gibt ja Informationen, die befinden sich
rein faktisch aufgrund von Gesetzen oder?
Bestimmte Organisationen oder Regierungen, das wollen in
Public Domain, sind aber nicht öffentlich crawlbar.
Natürlich könnte jetzt ne Regierung hingehen und ner Firma
wie Google oder Open AI auch Zugriff auf bestimmte Daten
geben, die eigentlich öffentlich sind, aber die vielleicht gar
nicht so crawlbar waren zum Zeitpunkt des Trainings könnte
man diese Informationen dann quasi spenden und dann würden
sie Teil des Basismodells werden.
Ich denke jetzt mal vielleicht an irgendwelche historischen
Gesetzestexte, die vielleicht nicht digital vorliegen, die
vielleicht aber von irgendwie. Einem Archiv vielleicht
digitalisiert, wurden die aber vielleicht relevant sind, um
vielleicht ein bestimmtes Rechtsverständnis, sondern
rechtssprache, wie du es gerade gesagt hattest, zu erlernen.
Solche Daten kann man dann natürlich spenden, aber in
unseren eigenen Applikationen wollen wir auf Daten
zurückgreifen, die nur bestimmten Usern zu einem
bestimmten Zeitpunkt zur Verfügung stehen sollen und die
wirklich auch aktuell sind und da kommen wir jetzt an den
Punkt, dass wir dort Technologien einsetzen müssen,
Techniken einsetzen müssen, wie das besagte Retrieval Augmented
Generation. Und da wollen wir uns ein
bisschen mit beschäftigen, was das letzten Endes in der Praxis
bedeutet. Was sich hinter diesem Begriff
verbirgt. Genau.
Und du hast eigentlich gerade schon, wie ich finde ein sehr,
sehr gutes Beispiel genannt, nämlich es kann ja durchaus
sinnvoll sein, dass ich ein eigenes Modell trainiere, man
nennt das dann übrigens finetuning, wenn man ein
normales Modell nimmt und dann nochmal eigene, also ein großes,
bereits bestehendes Modell nimmt und dann nochmal die eigenen
Daten anreichern, um das ein bisschen zu tunen.
Wenn ich jetzt sage, ich baue einen Large Level Model, du hast
gerade Jura als als Bereich gegeben, vielleicht mache ich
ein Feintuning mit. Bestehenden und auch vergangenen
Gesetzestexten um ein eigenes Modell zu bauen, was ein
besseres Verständnis von juristischen.
Regeln und Rechtsverständnis hat und so weiter.
Was ich natürlich aber nicht als und wenn ne, das verwende ich ja
jetzt irgendwie in einer, in einer, in einer Anwaltskanzlei,
weil sich da natürlich nicht mit rein trainiere, sind die
konkreten aktuellen Fälle und und die Namen und und
Gegebenheiten meiner Mondanten, an denen ich gar nicht, in den
ich gerade arbeite. Bei mir, na ja, jetzt aber
helfen soll, bestimmte Rechtsfragen zu beantworten,
muss das natürlich im Kontext dieser Mandanten und dieser
Rechtsfälle passieren, und das ist die Information, die ich
jetzt dynamisch da reingeben muss.
Aber wenn jetzt morgen in einem Verfahren ne neue Information
auftaucht, dann muss ich eben dynamisch reingehen und kann ja
nicht noch mal neu reintrainieren.
Und noch eine Sache, bevor wir dann wirklich in das Rack
Pattern einsteigen ist, was ich immer ganz anschaulich dazu
finde, ist einfach sich Sachen anzuschauen wie Chat, GPT und zu
schauen, OK wie wie funktioniert denn eigentlich Chat GPT denn
was was man sich bewusst machen muss ist das Chat GPT kein
Modell ist sondern Chat. GPT ist einfach auch nur eine AI
Anwendung die unten drunter das Modell nämlich GPT 4 oder GP 35.
Verwendet und Jet GPT ist ja einfach so ein chatbasierter
Ablauf. Das heißt wenn ich wenn ich
jetzt GPT reintippe Hallo, mein Name ist Robin Manuel, dann
schickt Chat GPT das an dieses Open AI Model wenn ich jetzt
kein Premium habe dann open AI 35 und dann haben wir dieses
Modell antworten mit zum Beispiel Hallo Robin Manuel, wie
kann ich dir helfen? Jetzt muss man aber wissen, dass
diese Modelle an sich. Doof sind die haben keinen, also
die Leben nur auf der Basis ihrer trainierten Daten, die
haben keinen keinen Zugriff auf die Welt da draußen, die haben,
die können nicht von sich aus irgendwelche APIS aufrufen,
irgendwelche datenbankabfragen stellen, die können sich auch
nicht an irgendwas erinnern. Also wenn ich jetzt einfach nur
das gleiche Modell ohne die Anwendung Chat GPT davor wieder
fragen würde, hey, wie ist denn mein Name dann würde das reine
Modell mir antworten weiß ich nicht, obwohl ich ja eben gesagt
habe mein Name ist Robin Manuel, aber für das Modell.
Ist jeder jeder neue Request wirklich eine komplett neue
Session? Das hat sich nichts über den
vorherigen Chatverlauf abgespeichert, das heißt wie
jetzt Chat GPT funktioniert ist, dass sie gar nicht direkt an das
Modell hi, mein Name ist Robin Manuel schicken, das tippe ich
nur in diese Textbox von der Chattenbit die Anwendung ein,
was die aber in Wirklichkeit hinten an das Modell schicken,
also der eigentliche, man nennt das System prompt.
Der sieht dann so aus, die sagen dann, Hey, du bist n
hilfreicher, hilfreicher Chatbot.
Der User hat gerade eine Frage gestellt, nämlich Hallo, mein
Name ist Robin Manuel, was wäre deine Antwort?
Daraufhin antwortet das Ding damit.
Hallo Robin, Manuel, wie kann ich dir helfen und schick das
zurück und wenn ich jetzt im nächsten Schritt wieder Frage.
Wie war noch mal mein Name? Dann wird in Wirklichkeit an das
Modell geschickt. Hey, du bist n hilfreicher
Chatbot. Du hattest bisher folgende
Konversation mit dem User, der hat gesagt Hallo, mein Name ist
Robin Manuel, Du hast geantwortet Hallo Robin Manuel,
wie kann ich dir helfen jetzt stellt der User eine weitere
Frage wie heiße ich denn nochmal?
Was wäre deine Antwort und dann kann das Modell natürlich
antworten dein Name ist Robin Manuel und das kann es nur weil
es über den prompt die Info mit reinbekommen hat die es braucht.
Er den Zwischendeck der gesamten öffentlich Zugänge gänglichen
Internetwelt da irgendwie mit drin.
Da steht natürlich nicht drin, wie mein Name ist und es weiß
auch gar nicht wer ich bin, aber dadurch, dass es jetzt zur
Beantwortung der Frage alles was ins Modell reintrainiert wurde.
Plus die Information, die aus dem Promptom zur Verfügung hat,
kann es die Frage beantworten, weil es heißt, Ah OK, im prompt
seh ich die bestehende Historie unseres Chats und deswegen
funktioniert die Anwendung Chat GPT so gut und deswegen kann ich
auch einfach iterieren auf Antworten.
Da war der immer drin. Du hast diese Antwort gegeben,
der User hat gesagt, bitte schreib mir das kürzer in 2
Sätzen und dann machst du jetzt bitte folgende Antwort draus und
auch nur deswegen funktioniert sowas wie Chat GPT, weil der
bestehende Verlauf halt und die Information die es zur
Beantwortung der Frage braucht, nicht nur im Modell sind,
sondern auch im prompt. Und genauso kann ich jetzt
hingehen und eigene Daten in diesen prompt mit Reingeben.
An deinem Beispiel könnte das zum Beispiel deine Login
Informationen sein, du hast dich vielleicht bei Chat GPT mit
einem Account angemeldet und dann könnte in den prompt auch
rein. Werden Hey gerade angemeldet,
ist Robin Manuel und schon kann das Ai Modell deine Frage nach
wie ist mein Name beantworten, weil natürlich durch den prompt
diese Login Informationen mit Reingegeben werden und dieses
Beispiel Chat GPT finde ich eigentlich ganz gut.
Ich hatte vorhin auch schon so diesen Bing Chat erwähnt,
andersrum funktioniert das im Chat GBT wenn ich auf aktuelle
Informationen zugreifen möchte genauso, das heißt ich kann Chat
GPT fragen Hey fasse mir folgenden Blogspots zusammen und
dann gebe ich Chat GPT den Link und zumindest wenn ich Chat GPT
in der bezahlten Variante habe. Kann dann Chat GPT über eine API
zum Beispiel eine Bing Suche durchführen, dann sich diese
Domain aufrufen und den Text der von dieser Website kommt
entsprechend in den prompt mit Reingeben und mit einer
Zusammenfassung erstellen und genauso kann ich dann natürlich
auch Lookups in andere Datenquellen machen.
Im Fall von Chat GPS ist das jetzt in dem Fall nur eine
Internetsuche und andere Kontextinformationen, die in
diesem prompt reingegeben werden, aber hier kann ich mir
dann auch mit eigenen Gpts und Extensions.
Natürlich Zugriff auf andere Informationen ermöglichen und
genau das gleiche muss ich natürlich tun, wenn ich jetzt in
meine eigene Applikation ein solches AI Modell einbinde und
hier auf solche von anderen bereits für mich oder?
Für alle als kommerzielles Modell trainierte Basismodelle
Zurückgreife, da muss ich hingehen und dieses Basismodell
anbinden und dann immer die entsprechenden
Kontextinformationen, die relevant sind, hineinfüttern und
da entsprechend über solche Techniken wie Rec das Ganze
implementieren. Und da schauen wir jetzt mal im
Detail rein. Genau, denn was ja wichtig ist,
dass man bei dem Beispiel, was du gerade gesagt hast, malte,
auch hier macht das Large Language Modell nicht den nicht
die websuche oder ruft nicht diesen Link auf von dem Blog
Post, den wir zusammenfassen lassen möchtest, sondern die
Anwendung Chetgypty der Developer oder das Developer
Team was Chat GPT gebaut hat, das sagt Okay wenn ein Link
reinkommt, dann rufe ich den Link rauf und füttere das in dem
prompt rein, denn diesen System prompt, also der prompt ja
eigentlich gegen das Modell geht, den Bauen ja wir
developer, das ist ja unsere Aufgabe, deswegen ist Rack auch
für uns dieses Spannende. Wenn man sowas bauen will, dann
sind so Frameworks wie Semantic Kernel, Kernel und lankain.
Hatten wir schon n paar mal erwähnt.
Im Podcast natürlich n Thema, aber jetzt schauen wir uns genau
an wie woher weiß ich denn welche Daten gebe ich denn in
diesen prompt mit rein. Also wenn jetzt der malte fragt.
Was war denn die spannendste Podcast Folge in diesem Jahr?
Und woher weiß ich denn? Geb ich dem jetzt einfach alle
Podcast folgen, die ich irgendwie meiner Datenbank
gespeichert habe, mit mit in das mit den prompt rein?
Das kann problematisch sein, weil diese Prompts haben haben
natürliche Limitierungen, ich kann da also nur so und so viel
Zeichen mit Reingeben und vielleicht ist es ja auch gar
nicht sinnvoll, da alle mit Reinzugeben und vielleicht darf
der malte auch gar nicht auf alle zugreifen, sondern nur auf
die letzten 10. Und dieses Problems nimmt sich
RAG an. Reg steht für Retrieval
Augmented Generation und funktioniert eigentlich wie
folgt. Und zwar muss ich jetzt ja, wenn
eine Anfrage reinkommt, wie zum Beispiel, was war die
spannendste Podcast Folge in überhaupt.
Muss ich jetzt, muss ich jetzt entscheiden, welche meiner
Dokumente oder welche meine Datenbank Einträge interessant
sind, um diese Frage zu beantworten.
Und wie kann ich das machen? Das kann ich machen, indem ich
zuvor alle podcastfolgen oder alle meine internen Dokumente
oder alle datenbankeinträge, die vielleicht relevant sind, dass
ich die vorher schon mal einer AI gezeigt habe.
Und dass diese AI dann daraus ein so genanntes Embedding
erstellt hat, diese Ai s, das nennt es sind meistens dann
kleinere Modelle, zum Beispiel von Open AI.
Gibt es das Ada Modell, das macht das, das ist ein deutlich
kleineres Modell und die heißen embeddings Modelle.
Und diese embannings Modelle erstellen mir einen, na man
nennt das Vector, also eigentlich nur ein langes Array
aus positiven und negativen. Zahlen, was die Informationen,
die das AI Modell gesehen hat, in ganz, ganz, ganz ganz, ganz
viele verschiedene Kategorien Ranked und einordnet.
Das heißt, ich zeige diesem embedance Modell jede einzelne
meiner Podcastfolgen, vielleicht mit Transkript, mit
Beschreibung, mit Bild und so weiter und was ich dann
rausbekomme aus diesem embedance Modell ist ein ein langes langes
Array, ein sogenannter Vektor, der in ganz ganz vielen
Kategorien, Kategorien, Wertungen vergibt, Punkte
vergibt, über diese Folge. Klassisches Beispiel, wenn ich
jetzt einfach Äpfel und Birnen da reingeben würde.
Würde in der Kategorie Farbe der Apfel einen bestimmten Wert
bekommen, der vielleicht bei der Kategorie Birne, bei bei der
Birne in der gleichen Kategorie Farbe N ganz anderen Wert
bekommt, weil sie unterschiedliche Farben haben?
Aber in der Kategorie Obst zum Beispiel würden die gleichen,
würden die beiden wahrscheinlich einen sehr ähnlichen Wert
erreichen. Und so gibt es nicht nur Farbe
und Obst, sondern es gibt Tausende verschiedene
Kategorien, in denen für uns gar nicht so ganz verständlich
verschiedene Werte einfach vergeben werden.
Das heißt, ich zeige diesem embeddings Modell dieser AI
jetzt einfach alle meine Dokumente, alle meine Datenbank
Einträge und lasse für jedes einzelne dieser Dinge einen
sogenannten Vektor erstellen, also dieses lange Array mit den
ganzen Einordnungen der wie das AI die Welt sieht und speichere
diese Vektoren. Dann in einer Vektordatenbank
das sind extra dafür designte und erstellte Datenbanken.
Und wenn jetzt der User mir ne Frage stellt, zum Beispiel, was
ist denn die spannendste Podcast Folge?
Dann mach ich, bevor ich diese Frage beantworte und bevor ich
diese Frage an mein Large language Modell schicke, schicke
ich auch diese gleiche Frage. Was ist die spannendste Podcast
Folge an dasselbe embedance Modell, was mir auch alle
anderen Podcastfolgen eingeordnet oder Geranked hat,
das heißt ich zeige demselben embassdings Modell Life in dem
Moment wo die Frage reinkommt, die Frage und Sage erstellen wir
auch für diese Frage einen Vektor und da bekomme ich auch
ein ein Array zurück wie das wie das Modell diese Informationen
in der großen weiten Welt anordnet.
Der Array der Vector ist genauso lang, hat also auch die gleichen
Kategorien. Nicht und hat dann da
irgendwelche Werte drin in diesem Array?
Und jetzt kann ich hingehen und in meiner Vektordatenbank mit
diesem Vektor, den ich gerade für meine Frage bekommen habe,
eine sogenannte similarity Search, also eine Suche nach
Ähnlichkeit machen und sagen, zeig mir alle Informationen, die
du in der Vektordatenbank hast, die einen hinreichend ähnliches
Array, also einen hinreichenden ähnlichen Vektor.
Haben wie meine Frage und wenn meine Frage jetzt in dieser Welt
eingeordnet ist, was ist die spannendste Podcast Folge, dann
werden uns dieser Vektordatenbank einige Podcast
folgen Rauspurzeln, die das embedance Model irgendwie in der
Kategorie spannend, wahrscheinlich relativ weit
oben. Eingeordnet hat, das heißt, ich
vergleiche die Frage oder dass das Verständnis was das AI
Modell von meiner Frage hat, nämlich den Vektor mit der
Verständnis, mit dem Verständnis was das AI Modell von allen
meinen Informationen hat, ebenfalls Vektoren in der
Vektordatenbank und wenn ich jetzt sage, dann nehme ich jetzt
einfach die Top 3 Treffer und diese 3 Podcast folgen diese 3
Treffer die da aus der Datenbank raus kamen und die die Reihen
ähnlichsten zu dieser Frage sind, das sind dann meine
Kandidaten die ich in dem prompt mit Reinfüttert, das heißt der
prompt den ich dann an das Large Language Modell stelle ist.
Hale Liebeslarge language Modell.
Was was war die erfolgreichste Podcast Folge by the Way als
Daten möchtest du vielleicht diese 3 Podcast folgen
Mitberücksichtigen und dann geht das Modell hin und sucht aus
seinem ganzen Wissen von der ganzen Welt plus diesen 3
Podcast folgen, denen es durch den System prompt jetzt vom
Developer mit Reingereicht bekommen hat und kann dann die
Frage beantworten. Das heißt ich kann dann auch
einem öffentlich zugänglichen Modell von mir aus durch den
prompt Informationen mit Reingeben, den ich gerade erst
aus meinen Datenbanken herausgezogen habe, weil das die
relevanten Ergebnisse. Zur Beantwortung meiner Frage
waren und dieses Pattern, das ist RAG, das ist Retrieval
Augmented Generation. Also ich zeige meinem Modell
vorher meine Daten, lasse die Invektoren einordnen, wenn eine
Frage reinkommt, zeige ich demselben Modell, das ist ganz
wichtig, die Frage lass auch die Frage in dem Vektor einordnen,
mach dann diese diese ähnlichkeitssuche sage okay was
sind die Daten, die du hast, die am ähnlichsten zu dieser Frage
passen, basierend auf den Einordnungen, die du vorher
gemacht hast und nur diese Ergebnisse.
Die füge ich dann in meinen prompt ein, so dass mein System
prompt, den ich anders als Modell dann schicke.
Meine Frage beinhaltet Plus die wahrscheinlich relevanten Daten
zur Beantwortung der Frage. Du hattest vorhin mehrfach das
Thema Vektoren genannt, das heißt, ich erstelle mir solche
Vektoren aus meinen Einträgen. Brauche ich jetzt dafür eine
spezielle Vektordatenbank oder kann ich da mein klassisches
Datenbankmanagementsystem verwenden und dort zusätzliche
Einträge erstellen, das heißt, brauche ich dann zusätzlich noch
neue Technologien, die ich dann einführe, oder kann ich dann
basierend auf meinem bisherigen System das Ganze aufbauen?
Beraterantwort mit Depends in der Regel ja.
Brauche ich eigentlich ne Vektordatenbank?
Klar, am Ende ist der Vektor ein großes Array von integer zahlen
kann ich eigentlich speichern wo ich will, Vektordatenbanken sind
aber spannend, weil sie darauf ausgelegt wurden, diese Frage
nach dieser ähnlichkeitssuche Performance zu beantworten.
Jetzt ist aber deswegen Independence, weil es gibt ganz
viele neue Vektordatenbanken, die da irgendwie gerade in der
Open Source Welt sehr populär werden.
Quadrant ist zum Beispiel da ein eine Open Source Beispiel, es
gibt aber auch ganz viele Hersteller von bereits
renommierten Datenbanken, die ein eigenes Vektor Plugin zum
Beispiel anbieten, also zum Beispiel kann ich mit PG Vector
eine postgresql Datenbank dann als Vektordatenbank verwenden
oder es gibt von Mongo DB ebenfalls eine Variante wie ich
meine Mongo DB als Vektordatenbank umfunktionieren
oder um diese Funktionalität erweitern kann, das heißt ich
brauche nicht unbedingt eine neue Datenbanktechnologie, wenn
ich vielleicht schon mit Postgress und mongo was wir so
fast schon mit den beiden populärsten.
Kann ich das Halt verwenden? Viele Cloud Provider, wie zum
Beispiel in der Microsoft Azure Welt heißt es mit Azure Azure I
Search hat fertig quasi eine Suchtechnologie, die unten
drunter auch eine Vektordatenbank verwendet, die
ich dann auch für so ein Rack Pattern verwenden würde
mitgebracht, das heißt da gibt es natürlich so fertige
gemanagte Lösungen, aber auch die bestehenden Datenbanken
haben da Lösungen oder ich nehme mir eben wirklich eine ganz neue
technische Technologie wie ZB Quadrant.
Mhm bedeutet aber auch, dass diese Daten ja durchaus.
Auch veraltet sein können. Das heißt, ich muss ja
regelmäßig mir diese Vektoren neu aufbauen, wenn sich meine
zugrundeliegenden Daten verändern, aber das geht
natürlich viel schneller, als wenn ich so ein Model Feintuning
vornehmen würde, das heißt, ich habe da durchaus einmal einen
Vorbereitungsschritt, um die Daten aufzubereiten, damit ich
sie in meiner Anfrage an das AI Modell verwenden kann, aber das
ist viel schneller, effizienter und dementsprechend auch
günstiger als wenn ich das Ganze über einen Model Feintuning
mache was? Immer so ein bisschen
irritierend ist, dass häufig bestimmte Themen miteinander
vermischt werden. Zum einen das, was du gerade
beschrieben hattest, als Rack pattern mit solchen Search
pattern, die halt ne klassische Suche machen über Suchsysteme
kann ne Datenbank sein oder kann ne Search engine sein, liegt
halt daran, dass diese Dinge halt meistens miteinander
kombiniert werden oder es kann das eine oder das andere oder
beides gemeinsam verwendet werden verwendet werden und der
Begriff Retrieval Augmented könnte ja, wenn man es wörtlich
interpretiert, auch diese suchbasierenden Dinge.
Bedeuten aber allein in der Begrifflichkeit sind diese Dinge
ja voneinander getrennt zu betrachten.
Das heißt, ich hab einmal das Reck Pattern, was halt auf
solchen Vektoren aufsetzt, auf solche Vektordatenbanken, die
ich erstelle und auf der anderen Seite so ein search base
pattern, wo ich halt in Echtzeit eine Suchabfrage mache über.
Ein Search Tool, was Dokumente durchsuchen kann, was Internet
Informationen durchsuchen kann. Was meine interne Datenbank
durchsuchen kann und dann wirklich in Echtzeit diese
Informationen rausholt und dann als Text oder Dokument dann in
meinen Large Language Model als prompt bestanden.
Bestandteil mit Reingibt, also so wie wir es gerade beschrieben
hatten über diese Search Extension in Chat GPS, die ja
kein klassisches Rack pattern ist, sondern wirklich so ein
Semantic Search Pattern, wo da eine Internetsuche ausgeführt
wird und dann werden halt die Informationen, die Ergebnisse
dieser Internetsuche werden dann Teil des prompt und damit kann
dann das Dutch Language Model auf zusätzliche Informationen
zurückgreifen und das wird natürlich gerade auch in der
Softwareentwicklung ganz viel verwendet.
Ich meine, wenn man sich so etwas wie.
Source craft Cody anschaut oder die neuen Sachen, die jetzt mit
Copilot Enterprise kommen, wo dann ich als Developer eine
Frage stellen kann in dem Chat und dann wird im Hintergrund
eine Codesuche durchgeführt, da werden alle meine.
Repositories, die ich dort freigegeben habe als Grundlage
einer Suche verwendet und das Ergebnis dieser Suche wird dann
als Teil des Prompts an das AI Modell gegeben und damit bekommt
dann halt so ein Chat, der in meiner IDE läuft plötzlich.
Einen Zugriff auf meine gesamte Codebasis, die ich im
Unternehmen habe, ohne dass ich ein Model Fine Tuning gemacht
habe und ohne dass ich zunächst eine Art von Training dieser
dieser Vektoren durchgeführt habe.
Das heißt, diese Dinge kann ich getrennt voneinander verwenden
oder gemeinsam, weil ich glaube, wenn ich sie gemeinsam verwende,
dann ist natürlich die Information.
Die Anzahl der Informationen, die halt mein Modell bekommt am
größten, aber das ist natürlich dann auch die komplexeste Art
und Weise, das zu tun. Genau, und da muss ich natürlich
sehr auf mein Use Case achten, weil also die Frage, die auch
häufig kommt ist, warum lasse ich denn meinen LLM nicht
einfach ne SQL query zum Beispiel generieren oder wie du
halt gesagt hast warum nimmt warum lasse ich denn nicht
traditionell suchen und das ist das Augmented in diesem Retreat.
Generation Pattern da sich ja, wenn ich jetzt die Frage
bekomme, was ist denn die spannendste Podcast Folge vom to
do cast. Wenn ich da jetzt eine
klassische Textsuche machen würde, dann würde ich
wahrscheinlich ein Ergebnis bekommen, wo wir vielleicht mal
in der Podcast Beschreibung geschrieben haben.
Heute geht es um ein spannendes Thema oder wo wir das Wort
spannend am häufigsten im Transkript gesagt haben, aber
das muss ja nicht zwangsläufig die spannendste Folge sein, denn
was wir haben wollen ist, dass die NAI mit dem Verständnis von
der Welt uns sagt, was die spannendste Folge ist.
Und dazu müssen wir eben nicht, oder dazu können wir eigentlich
nicht rein, auf Textsuche gehen, sondern müssen halt das
Verständnis was die entwickelt hat von dieser Folge das.
Sicher durchsuchen und das genau ist ja dieses dieses Embedding
und das ich glaube, da muss ich dann eben auf meinen Use Case so
ein bisschen achten, denn die zweite Frage ist, wenn jetzt
jemand fragt, was ist denn die spannendste Podcast Folge, ja,
wie will ich denn das in der SQL Query umwandeln?
Da kann ich vielleicht höchstens.
Also erstmal muss ich überhaupt interpretieren, was denn da an
an Info reinkam. Also ich muss ohnehin jetzt
erstmal irgendwas haben, was aus diesem Freitext, was die
spannendste Podcastfolge, irgendwelche Informationen raus
extrahiert, die für ne Queery spannend sein könnten, zum
Beispiel rank ich die vielleicht nach wie viele Leute haben bis
zum Ende zugehört, was ist die Folge, wo die meisten Leute bis
zum Ende zugehört haben, aber das sind Informationen, die ich
erstmal irgendwie dann da rauskriegen muss und so kann ich
einfach die Frage wie sie ist, auch ins Verständnis der
gleichen Welt oder ins gleiche Verständnis der Welt
reinschmeißen und die dann vergleichen.
Und was so gemanagte Services wie, ich kenne es jetzt von
Azure mit diesem Azure I Search machen, ist nämlich genau das,
was du gerade gesagt hast zu kombinieren.
Die kombinieren eine semantische klassische Suche mit diesem Rack
Pattern. Mit dieser AI suche und können
mir dann vielleicht die besten Ergebnisse anzeigen können sagen
Hey guck mal das sind Sachen die ich durch traditionelle Suche,
vielleicht sogar durch, vielleicht sogar durch so eine
Websuche, ich hab's ja mal bei Google eingegeben, plus das sind
die Ergebnisse aus vielleicht deinen privaten Daten, weil
vielleicht sind ja solche die Transkripte der Folgen, die
machen wir ja gar nicht öffentlich, die haben wir jetzt
vielleicht bei uns in irgendwelchen Textdateien liegen
und vielleicht gebe ich ja die rein.
Die sind aber gar nicht öffentlich.
Die Informationen kann es aber kombinieren mit einer
öffentlichen Suche, um vielleicht festzustellen, was
den Menschen generell spannend finden an Podcastfolgen und
sowas. Also das kann man natürlich auch
noch mal kombinieren, aber ich versuche ja, das Verständnis der
Welt von dem AI Model mit dem Verständnis der Welt von dem AR
Model, von der Frage die ich zu bekommen habe zu vergleichen.
Ja, und ich glaube, am Ende ist die große Kunst, dass man je
nach Use Case entscheidet, was die beste Technik ist, um das
Ergebnis zu erzeugen. Und da sehe ich halt immer mehr,
dass halt unterschiedliche AI Modelle miteinander kombiniert
werden, basierend darauf wie groß ist das Modell, wie schnell
ist das Modell, wie groß sind auch die Kosten, die mit so
einem Abruf des Modells verbunden sind.
Ganz viele von uns werden vielleicht eine Kombination in
Zukunft verwenden von Modellen die Teil der Applikation sind,
die quasi selfhosted sind, das sind ganz kleine
leichtgewichtige. Spezialisierte Models, die zum
Beispiel für so ein bisschen. Das ganze Reviewing der
Antworten oder Fragen verwendet werden oder intend Recognition
und basierend auf einer Intent Erkennung kann ich dann
entscheiden was die beste Technologie ist um das Wissen
abzurufen gehe ich jetzt hier in Richtung.
Wreck oder gehe ich in Richtung einer semantischen Suche?
Das heißt, wenn jetzt du dem Sprachmodell irgendwie sagst,
Hey, gib mir die die letzten 10 Folgen des Podcasts basierend
auf der Bewertung auf Spotify, dann reicht es vielleicht
einfach eine Internetsuche zu machen oder meine interne
Datenbank abzufragen, dann die Ergebnisse in mein großes
Sprachmodell zu geben, um halt eine schön formulierte Antwort
zu bekommen und das Ganze dann an den User zurückzugeben oder
in der Anwendung anzuzeigen, das heißt?
Jeweils entscheiden, was ist der beste Weg, um diese
Informationen in so ein sprachmodell Reinzubekommen?
Und was ist auch am Ende der der der kostengünstigste Weg, weil
sobald ich halt anfange die Modelle bei den großen Cloud
Providern zu nutzen, wo halt irgendwie teilweise Token
basiert abgerechnet wird und ich dann auch nicht den kompletten
Token Space verwenden kann jedes Mal, weil natürlich damit Kosten
verbunden sind, da muss ich mir schon sehr genaue Gedanken dazu
machen wieviel. Letzten Endes in so ein prompt
rein und ich glaub auch der Ansatz wie vielleicht am Anfang
Chat GPT entwickelt wurde wurde halt auch ohne Berücksichtigung
dieser Kosten gemacht, weil halt der Anbieter gesagt hat wir
wollen das erstmal groß machen. Wir gehen jetzt erstmal n
relativ simplen Ansatz und dann packen wir immer die komplette
Chat Historie irgendwie wieder in den prompt rein damit der
Chat entsprechend die Informationen hat, aber das kann
ich in meiner eigenen Anwendung nicht machen wenn ich jetzt auf
so ein GPT 4 Modell gehe und dort das komplette.
Token Windows Ausnutze und alle sagen ich will mehr in den
Kontext reinpacken. Ich brauche ein größeres Token
Windows, aber wenn ich mich jetzt dann mal mit der
Kostentabelle auseinandersetze, wie dann diese API Calls, egal
ob ich jetzt irgendwie mit Open AI oder mit Google oder
Microsoft oder was auch immer spreche, da muss ich mir
anschauen auf welchem Modell sind welche Kosten pro Token
entsprechend verbunden und wenn ich dann jetzt hingehe und ein
immer größer werdendes Token Limit für das AI Modell komplett
mit Informationen. Personenfülle dann werden
gegebenenfalls meine Informationen nicht besser, weil
das AI Modell natürlich dann viel stärker filtern muss.
Ich geb viel rein, was ist das Relevante, da muss ich mich
schon konzentrieren, aber zum anderen werden natürlich die
Kosten dann massiv in die Höhe getrieben.
Wenn ich jetzt einfach möglichst viele Informationen da
reinschmeiße, weil ich mir vielleicht nicht die Mühe machen
will oder nicht über das Wissen verfüge, um das schon
vorzufiltern, damit ich da die richtigen Ergebnisse bekomme.
Und da ist es natürlich wertvoll, solche.
Verschiedenen Techniken zu beherrschen, sich da einen
Überblick zu schaffen und dann in Kombination verschiedener
Sprachmodelle immer das Richtige zu wählen.
Mit der richtigen Technik, um die eigenen Daten dort auch
reinzugeben. Genau jetzt gibt es natürlich.
Jetzt gibt es natürlich auch im Break Pattern noch ein paar
Herausforderungen, also die Herausforderung, dass ja darf
der User da die Frage stellt denn überhaupt die Dokumente
sehen, die ich jetzt hier aus meiner Vektordatenbank
rausbekommen habe, also ein Berechtigungsproblem?
Das bleibt nach wie vor, da kann man sich dann auch, ja kann man
sich überlegen, ob man dann irgendwie die Berechtigungen mit
in die Vektordatenbank mit reinschreibt oder ob man erst
nachdem die Ergebnisse rausgekommen sind dann n Filter
macht, ob überhaupt diese Ergebnisse überhaupt welche
sind, die der User sehen kann. Aber ich kann es eben lösen, ich
kann es eben adressieren. Klar, die meisten wissen es,
aber ich beschäftige mich eh viel mit Berechtigungen, weil
wir mit Spaceblogs da ja was was gebaut haben, was auch genau
dieses Problem in Reck pattern. Also was auch genau dieses
Problem eben adressiert und sich vornimmt.
Aber jetzt hab ich wenigstens ne Möglichkeit zu lösen, weil ja
die Informationen nicht in das Modell mit Eingebacken sind,
sondern weil ich sie ja dann irgendwie rausziehe und dann
kann ich halt eben entweder überlegen, nachdem ich sie
rausgezogen habe, welche ob die Dokumente überhaupt für den User
geeignet oder gedacht sind. Oder ich kann halt vielleicht
schon clever bei der Frage oder beim Erstellen dieses Embeddings
oder beim Speichern der Vektordatenbank mitgeben, dass
dann auch nur die bei dieser Ähnlichkeitssuche nachher
berücksichtigt werden, die dann überhaupt relevant sind für das
Ding. Avila am Ende schon gesagt hast.
Ich glaube in richtig coolen Anwendungen ist es am Ende so,
dass es immer ne Kombination aus ganz vielen Sachen sein wird.
Das heißt ne Frage oder n Befehl des Users wird wahrscheinlich
durch ne Kombination von Calls gegen verschiedene Modelle.
Beantwortet werden oder durch, wie du gerade gesagt hast, ne
websuche. Vielleicht muss ne API gecallt
werden, vielleicht muss n Link aufgerufen werden, vielleicht
muss ich ne Datenbank was abfragen, vielleicht muss ich
mit Rack Pattern relevante Dokumente und Daten finden, die
ich in den prompt mit rein gebe, vielleicht muss ich irgendwo so
ne Memory Funktion haben wo ich schaue was hab ich denn bisher
mit dem User überhaupt alles gemacht?
Das heißt es ist am Ende wirklich eine Kombination aus
verschiedenen Sachen, da helfen eben so Frameworks relangchain
und samantic Kernel bei und darauf wird es am Ende
wahrscheinlich hinauslaufen wenn ich jetzt mehr als nur einen
simplen Chatbot in meine Anwendung einbauen möchte.
Mhm, was natürlich n großer Vorteil ist, dass heutzutage
viele der Cloud Provider, auf denen wir ohnehin unsere
Anwendung hosten, egal ob es jetzt irgendwie Adobe, US,
Google, Microsoft oder wer auch immer ist.
Gemanagte Services für dieses Rack Pattern auch bereitstellen.
Das heißt, wir haben dort Dienste, die schon Konnektoren
mitbringen zu diversen Datenquellen.
Natürlich werden die eigenen Storage Dienste dieser Cloud
Provider unterstützt, aber auch Cross Plattform einfach nur als
Beispiel bei Etabliss kann ich zum Beispiel eine Connection zu
Microsoft sharepoint machen, weil sie halt wissen, dass für
Unternehmen interne Anwendungen häufig Daten vielleicht von
einem sharepoint kommen und so gibt es halt ähnliche Dienste
auch bei den anderen Cloud Providern und dementsprechend
muss ich halt das Wissen haben, wie solche Technologien
funktionieren, ich muss sie aber gegebenenfalls gar nicht selber
implementieren und gar nicht selber so eine Vektordatenbank
aufbauen, weil natürlich von den Cloud Providern das entsprechend
als Managed Service bereitgestellt wird und mir da
über die Konnektoren die Möglichkeit bietet das relativ
einfach. Zu verknüpfen.
Genau das heißt also, als Developer ist es wichtig, diese
Patterns zu kennen, aber gar nicht unbedingt über die ganze
Infrastruktur dahinter aufzusetzen, wie er so oft.
Wie ist denn bei euch? Baut ihr gerade in eure
Anwendungen AI ein? Ist das ein Thema für euch?
Lasst uns das doch gern mal wissen, wir haben ja in der
Umfrage festgestellt, nicht alle hören uns auf Spotify, aber auf
Spotify kann man halt wunderbar auch irgendwie Kommentare
hinterlassen, deswegen wenn ihr uns auf Spotify hört, lasst das
doch mal unten in der in dem Kommentar da, wenn ihr uns
woanders hört, schreibt uns auch gerne eine E-Mail, also ihr
findet unten in der Beschreibung vom Podcast auch immer eine
E-Mail wo ihr es mal schreiben könnt, uns würde das einfach
interessieren, so ihr als unsere Community wo steht.
Also ist das denn überhaupt? Ist das ne Anforderung die Real
ist? Hat euer Manager jetzt gerade
über Silvester vielleicht irgendwie mit den anderen
Managern zusammen Fondue oder Raclette gegessen und sich
unterhalten, dass er eigentlich ganz dringend einbauen müssen,
sonst sind wir weg vom Fenster in 5 Jahren?
Oder ist das eigentlich noch sehr weit weg für euch?
Das wird uns einfach mal in interessieren, also lasst uns da
gerne n Feedback da. Und damit sind wir auch am Ende
dieser Folge angekommen. Ich hoffe, es war spannend, ich
habe auf jeden Fall wieder was Neues dazugelernt, ich glaube,
man hat immer so ein gewisses Grundlagenwissen über das, was
man in den Nachrichten so verfolgt, aber da noch mal
tiefer reinzugehen, hilft mir auf jeden Fall, ich hoffe, es
war für euch genauso, ansonsten würden wir uns wie immer freuen,
wenn euch diese Folge gefallen hat, wenn ihr uns positives
Feedback da lasst auf Spotify oder auf Apple Podcast hilft uns
natürlich auch in den Charts weiter nach oben zu klettern.
Dann bleibt uns nichts anderes übrig, als euch eine gute Zeit
zu wünschen. Bis in 2 Wochen, denn wir sehen
uns in 2 Wochen wieder. Der TODO Cars erscheint alle 2
Wochen, wir freuen uns über euer Feedback, vielen Dank fürs
Zuhören, habt eine gute Zeit und schreibt ganz viel Code.
Bis dahin. Tschüss.