Knowledge Science - Alles über KI, ML und NLP

Episode 95 - Ansätze zur Kontrolle von Sprachmodellen

September 23, 2023 Sigurd Schacht, Carsten Lanquillon Season 1 Episode 95
Knowledge Science - Alles über KI, ML und NLP
Episode 95 - Ansätze zur Kontrolle von Sprachmodellen
Show Notes Transcript Chapter Markers

Können Sie sich vorstellen, die Kontrolle über den Output von Sprachmodellen zu haben? Versprechen Sie uns Ihre Aufmerksamkeit für eine halbe Stunden und wir verspreche Ihnen, Sie in die faszinierende Welt der Outputkontrolle von Sprachmodellen zu führen. Wir stecken in einer komplexen Debatte, die weit über das hinausgeht, was wir lesen und hören. Das Gespräch dreht sich um die Automatisierung menschlicher kognitiver Leistung und die Herausforderungen, die sich daraus ergeben. Es geht um die Formulierung von Prompts und die Frage, ob es eine Garantie dafür gibt, dass sich Sprachmodelle daran halten.

In dieser Episode werden wir Ihnen zeigen, wie Sie generierte Elemente in den eigentlichen Prompt einbauen und einen komplexen, mehrschichtigen Aufruf durchführen können. Und wir tun das nicht allein. Mit uns auf dieser Reise sind Frameworks von OpenAI und Microsoft, die uns helfen, den Output zu kontrollieren. Wir diskutieren auch die Bedeutung von Echtzeituntersuchungen und wie wir diese in unsere Arbeit integrieren können.

Schließlich beschäftigen wir uns mit wissenschaftlichen Ansätzen zur Outputkontrolle.  Wir werden auch darüber sprechen, welche anderen Ansätze in der Wissenschaft existieren und wie sie genutzt werden können. Und das ist noch nicht alles. Wir werden auch überlegen, wie wir mächtige Frameworks nutzen können, um Fehlersuchen zu unterstützen. Begleiten Sie uns auf dieser spannenden Reise in die Welt der Sprachmodelle!

Der Podcast ist gesponsert von XL2:
XL2 ist ein Joint Venture zwischen dem Premium-Automobilhersteller Audi und dem globalen IT-Beratungsunternehmen Capgemini. Das Unternehmen wurde im Jahr 2020 gegründet und treibt die digitale Transformation für Audi, die Volkswagen-Gruppe und Automotive Leaders voran. XL2 konzipiert und implementiert maßgeschneiderte Lösungen für Logistik- und Produktionsprozesse mit den neuesten Technologien aus den Bereichen SAP, Cloud und Analytics. 

Support the show

Sigurd Schacht:

Hallo und herzlich willkommen. In der heutigen Sendung sprechen wir darüber, wie wir den Output von Latch Language Modellen besser kontrollieren können und warum dies wichtig ist. Bleiben Sie dran. Auch diese Sendung wird von Excel 2 gesponsert. Excel 2 ist ein schoner Adventure von Audi und Capgemini, das die digitale Transformation in der Automobilindustrie vorantreibt. Das Unternehmen erarbeitet innovative End-to-End Prozesse und implementiert maßgeschneiderte IT-Lösung für seine Kunden. Hallo Carsten, hallo Siegurt. Ja, diese Woche wollen wir mal das Thema vielleicht nicht ganz weg von Evaluierung ziehen, sondern wir sind immer noch irgendwo ein bisschen da dran ein bisschen auf einen anderen Fokus richten, nämlich auf den Output von Sprachmodellen. Wir benutzen ja Sprachmodelle, um bestimmte Tas zu verwenden, geben dann den Prompt ein, hoffen, dass dann das rauskommt, was wir wollen, aber nicht verändern wir halt den Prompt ein bisschen, und die Frage ist, ob das halt der richtige Ansatz ist.

Carsten Lanquillon:

Ja, meine Frage ist mal wer ist der Empfänger? Ich meine, wenn wir Menschen den Prompt entgegennehmen und irgendwie das lesen und uns daran erfreuen oder auch nicht, und was ändern, mag das noch ganz gut gehen. Wenn wir aber das Ganze in, wenn wir verbinden mit Prozessen und Unternehmen, die halt eine gewisse Eingabe erwarten, dann kann das Riesenprobleme ergeben.

Sigurd Schacht:

Ja, vor allem, wenn du halt so sagst, richtig Prozesse und Unternehmen, vor allem, wenn wir halt das automatisiert verwenden wollen Und der Trend geht dir schon dahin den Nutzen der Sprachmodelle auch wir haben es ja schon so oft gesagt als Controller zu verwenden, sodass der Reasoning-Prozess, also die kognitive Leistung, die wir sonst als Mensch durchführen, automatisiert in den Prozessen durchgeführt werden kann.

Carsten Lanquillon:

Genau, wenn man da meine Wege, eine ganz spezielle Eingabe erwartet, meine Wege in Zahlen, format oder bestimmte Struktur und da ein Sprachmodell zu zwingen, das genauso zu machen, das kann mir geeignet Prompting zwar funktionieren, aber irgendwie eine Garantie kriegt man nicht.

Sigurd Schacht:

Aber daran die Prompten entgegenigen. Ins Spiel, würde ich mal sagen, oder.

Carsten Lanquillon:

Ja, zum Teil.

Carsten Lanquillon:

Also ich meine das klassische, ja, ich meine, klar kann man versuchen, den Prompt also wie ich es jetzt mal verstehe ein Prompt so zu formulieren. Man kann Beispiele angeben, und wie er sich aufworsicht auch daran halten möge. Aber es ist viel beim Menschen, der kann ich auch sagen bitte mach das und das, bearbeite die Aufgabe so in der Art und Weise, und dann kann man hoffen, dass der Mensch das macht oder auch nicht. Das sieht man immer wieder bei Prüfungsleistungen. Auch beantworten sie kurz und knapp, und manche schreiben trotzdem Roman. Also es hält sich nicht jeder dran, und das habe ich bei Sprachmodellen auch schon beobachtet, dass man natürlich Beispiele dieses Fuehrschottgeschichten, das ich da irgendwie Beispiele angebe, aber trotzdem ist es keine Garantie, dass das Sprachmodell auch sich wirklich daran hält. Man hat immer wieder Ausreißer, dass man irgendwie was anderes kommt.

Sigurd Schacht:

Ja sehr praktisch den, nicht der Determinismus, den du eigentlich in dem Kontext hast. Aber bevor wir da jetzt weitergehen und vielleicht auch, wie sagt mal, die Probleme und Lösungen diskutieren, würde ich ganz gerne das Thema Prompt-Engineering einfach nochmal aufgreifen, weil mir fällt auf, dass im Endeffekt alles irgendwie Prompt-Engineering ist. Jeder wird zum Prompt-Engineerer, jeder will da diese Richtung einschlagen, und für mich ist es ein bisschen so eine Abgrenzung. Ich weiß nicht, wie du das siehst. Prompt-Engineering hat für mich eine klare Definition oder zumindest eine klare Ausprägung, und das, was am meisten macht, also wenn ich am Bildschirm sitze und einen Playground offen habe oder einen Chat-Fenster von OpenAI und dann meine Prompt-Bastel, sag ich jetzt bewusst Bastel.

Carsten Lanquillon:

Basteln ist gut ja.

Sigurd Schacht:

Dann ist das für mich Prompt-Design oder Prompt-Hacking oder so.

Carsten Lanquillon:

Prompt-hacking hast du das auch mal genannt. Das finde ich ganz gut eigentlich. Ja, man experimentiert so ein bisschen. Man probiert, aber es ist nicht systematisch, strukturiert das dahinter mit keinerlei Vorgaben oder so, wie man also was systematisch macht.

Sigurd Schacht:

Ja, das ist halt im Endeffekt kannst du sagen, wenn ich in der Art arbeite, dann ist es halt schon Erfahrungswissen, weil man halt weiß, was man gut einbaut, wie man so einen Prompt aufbaut, dass man vielleicht, dass man die Rolle angebt, dass man ein paar Beispiele rein nimmt, dass man den Output definiert und so weiter. Das ist für mich Erfahrungswissen, das halt dann schon eine Rolle spielt und da reinläuft und vielleicht auch ein bisschen systematisch ist. Aber ich finde, diesen Begriff Engineering, der wurde ja gewählt, nicht weil man sagt, man sitzt jetzt da und hekt ein bisschen, sondern aus der originären Definition des Engineerings heraus, zumindest nach meinem Verständnis Und da habe ich extra ich bin ja kein Ingenieur, da bist du eher der Crack Aber ich habe extra mal nachgeschaut und habe eine schöne Definition gefunden zum Engineering Und in der Hesis Engineering ist das Entwerfen, testen und Bauen von Maschinen, strukturen und Prozessen mithilfe von Mathematik und Naturwissenschaften.

Carsten Lanquillon:

Das ist also ein strukturierter, nachvollziehbarer Vorgang, wenn man das jetzt Nein, ich will gar nicht widersprechen, aber du musst gar nicht so weit in den Elektrotechnikmaschinen auch reingehen. Es gibt auch ein Software Engineering.

Sigurd Schacht:

Ja, das stimmt, Und wenn man da reinrückt in unserem Kontext wird es ja bedeuten, das ist nicht nur bezogen auf den alleinigen Prompt, sondern das ist die gesamte LLM-Pipeline Strukturen, wie du das automatisierst, wie du den Output kontrollierst, wie man das systematisch durchführt, und in der Definition war es ja so schön drin Entwerfen okay, das ist mein Prompt-Design. Testen und Bauen von Maschinen. gut, bauen von Maschinen könnte man jetzt ein bisschen dieses Fein-Tunnel und so weiter mit reinnehmen. Aber ich finde, vor allem dieses systematische Testen und das systematische Entwerfen womöglich auch in einem gewissen Automatismus, also dass ich Prompt automatischer Stelle oder optimiere mit Reinforcement Learning oder ähnliches, können wir auch mal ein Ascent und dazu machen. Das geht für mich eher in die Richtung Prompt Engineering.

Carsten Lanquillon:

Vielleicht soll man am Ende mal sagen Prompt ist eine Anweisung, das ist ein Stück wie ein Stück Programm. Also insofern fällt es auch in dem Bereich des Software-Engineering.

Sigurd Schacht:

Ja, ich fand es auch ganz schön. Man stäubert ja immer wieder über diese Abgrenzung oder diese Diskussion Und ein ich weiß gar nicht, wo ich es geließen habe in irgendeinem Blogpost fand ich ganz schön. Da hat einer und das hat mir dann wirklich so ein bisschen aus dem Herz gesprochen hat eines verglichen mit einer Submaschinen-Eingabe nennen wir ja auch nicht Search Engineering, sondern das ist. Im Endeffekt ist es da. Alles, was wir in Prompt Design machen, ist eigentlich das Learning, wie man diese Werkzeuge wie ein Sprachmodell sehr gut anwenden kann Und wie man ihnen mit einem und das hast du vorhin schon angedeutet mit einem Schuss, mit einer Aufgabe ein sehr gutes Ergebnis ausbringen kann. Wir lernen sozusagen die Kompetenz, überhaupt mit den Werkzeugen arbeiten zu können. Aber im Engineering geht es halt einen Schritt weiter. Da geht es dann systematisch, dann automatisiert er rein.

Carsten Lanquillon:

Ja, zerlege ich ein Problem vielleicht auch in kleinere Probleme, Möchte ich mein Problem mit einer Amtfrage lösen, oder weiß ich halt? das ist ein bisschen komplex. Ich zerlege das, generiere mir Teillösungen, baue Anfragen dann auch aus diesen Teillösungen zusammen, um dann am Ende eine bessere Lösung zu erhalten. und alle diese ganzen Überlegungen und dann Unterstützung dabei. Da sind wir an der Ecke, wo wir ja heute uns näher zuwürfen damit beschäftigen möchten.

Sigurd Schacht:

Ja, wir haben natürlich. Wenn wir jetzt sagen, wir besprechen jetzt hier wirklich mal im Fokus länger über das Thema Brown Engineering, dann bedeutet es systematisch es testen, vorangehen und so weiter und bedeutet natürlich auch, dass wir irgendwie uns in der Regel in so einem Kontext auch unterstützen lassen wollen, dass wir im Endeffekt Werkzeuge haben, die uns helfen, diesen Prozess zu implementieren. Und wenn wir jetzt mal so die Pipeline anschauen, dann haben wir schon mehrere Probleme. Das erste fängt natürlich an mit dem Design des Prompts Okay, liegt dem Prompt-Designing. Das zweite ist wird die Ausgabe immer das gleiche liefern? Also, wie du es vorhin schon gesagt hast Modelle tendieren dazu mit leichten Variationen. Ich brauche nur da kommen wir sicher auch noch dazu ein Leerzeichen hinten dran hängen an meinem Prompt, und schon kommt ein ganz anderes Ergebnis raus. Und dieses oder auch ich hab den gleichen Prompt und lasse den zehn mal laufen, und neun mal kommt das gleiche raus und einmal nicht. Wobei?

Carsten Lanquillon:

ich dazu sagen muss manchmal möchte man ja ganz bewusst auch das unterschiedliche Sachen rauskommen, wenn man halt so Ideenlisten haben will, wenn du nicht so eine Szene, mal das aufrufst und immer diese Idee rauskommt.

Sigurd Schacht:

Auch das ist ja auch genau, das ist im Design ja drin Hat natürlich dann auch was damit zu tun, wie die Token stekotiert werden, über die Temperaturen, so weiter. Aber es ist ja auch bewusst gewollt, genau. Und da ist es aber schon so, dass wir, sobald wir diese Modelle in Prozessen, an Abläufen einbetten wollen, dann wollen wir zumindest gewisse Strukturen haben, also zum Beispiel, dass der Output immer gesichert ist, also die Form des Outputs, oder dass der Ton immer gesichert ist, dass das Modell nicht plötzlich schimpft oder irgendwas, und das ist ja schon ein wichtiger Part, wo wir sein. Da darf dann schon die Variation im Inhalt sein. Also, wenn ich sage, das Modell soll immer in Form einer XML oder eines Strasens die Antwort zurückliefern, dann kann man ja gerne Variation im Inhalt haben, und die will man auch, aber auf keinen Fall in der Struktur, weil wir es ansonsten nicht mehr in einem weiteren Programm verwenden können oder den Output nicht weiterverarbeiten können.

Sigurd Schacht:

Was passiert momentan also zumindest, was bei einer Erfahrung ist? bei vielen Anwendungen, wo man Sprachmodelle verwendet und die dann in Applikationen weiterverwendet, nimmt man den Output und versucht dann, den Output durch andere Werkzeuge irgendwie zu formatieren, auszulesen. Also, wir haben eigentlich wieder unstrukturierte Daten und nützen wieder andere Werkzeuge, um diese unstrukturierten Daten in Form zu bringen, dass wir sie weiterverarbeiten können.

Carsten Lanquillon:

Ja, ob diese anderen Werkzeuge können sein ein Mensch oder aber wieder ein Sprachmodell, was das passt, und guckt, was da drin steht.

Sigurd Schacht:

Ja oder halt.

Carsten Lanquillon:

Den Hoffnung, dass dann dies in Daten umgewandelt wird, die man mit der Erbers anfangen können. Aber dann verlagern wir das Problem.

Sigurd Schacht:

ja, Ja, oder halt das Promdesign, das hat einfach das heißt von wegen, wie ich es vorhin schon gesagt am letzten Befehl im Promdesign, dann formatiere den Output in Form einer Liste oder mache immer einen Doppelpunkt oder tut den Code in drei Anführungsstrichen immer setzen, sodass man dann mit regularer expression oder mit einfachen Suchen oder mit einfachen Splits dann einfach den Teil, den man als Antwort haben möchte, aus dem aus dem Output raus liest und das dann darstellt. Ist natürlich nicht ganz so komplex in Applikationen, wo ich sage, ich habe eine Frage Antwort spiele, wo ich einfach den Output des Modells direkt wieder anzeige und sage, das ist halt jetzt der Output des Themas. Aber wenn ich jetzt zum Beispiel einen Autonom in Arrenten verwenden möchte, oder wenn man sich jetzt OpenAI anschaut mit seinem Analytics Plagin oder Erweiterung, wo er dann ein Code generiert und den ausführt, dann ist schon wichtig, dass ich bei diesem Teil also nicht den gesamten Output, house Caesar, nur den Code zum Beispiel oder nur die Fehler melde oder was auch immer.

Carsten Lanquillon:

Genau, man kann ja, natürlich, man kann jetzt anfangen zu überlegen man nimmt diese Ausgabe, hast du einen Tool dahinter? man wegen Parasau oder Extrihierster mit regularer Ausdrücken ziehst, du dir den Teil daraus hin und haben willst, denn ist natürlich immer noch die Möglichkeit, dass es fehlschlägt. Also, im einfachsten Fall muss man einfach ein paar zusätzlich überschüssige Zeichen entfernen, dass du da mal wegen zuflüssiges JSON-Objekte oder eine normale Liste hast, was vielleicht noch ein paar Autos hast. Nach einer Ausgabe hast du eine Liste, und dann schreibt er, hat er noch Tokens übrig? und schreibt er dann nachher noch irgendwas weiter, weil er halt irgendwie man kann ja auch sagen, manchmal hörst du auf nach dem letzten Liste Element, und dann sagst du halt, wenn dann nach einer Leerzeile kommt, dann hör mal auf, aber dann noch einmal schreibt dann nach der Liste noch irgendwo weiter ohne Leerzeichen. Und ich habe da schon so viele Sachen gesehen, die passieren können.

Carsten Lanquillon:

Gibt es mal wegen so ein paar Tricks. Willst du eine Liste mit fünf Elementen haben, dann sagst du bewusst erzeuge sechs Elemente und in der Form von ersten, zweitens, drittens, und wenn sechs Punkt kommt, das ist ein Stopp-Kriterium. Also solche Tricks, weil es wirkt irgendwie eher wie so ein ja. Also ich finde es nicht als Logik nicht so schön. Andererseits Pogamiersprachen. Man hat eine Schleifer, sagen wir mal, die iteration sagst der auch nicht von eins bis, und wenn der Zähler irgendwie größer ist als das Abbruch-Kriterium, wirst du auch. Also so viel anders ist es auch nicht, aber es wirkt irgendwo gekünstelt und nicht so schön. Aber es sind Möglichkeiten in der irgendwie ja, es geht schon ein Stück in Richtung stärker in Engineering, dass man halt weiß, wie sich bestimmte Systeme verhalten und darauf entsprechend einzugehen.

Sigurd Schacht:

Ja, das heißt eigentlich, wir haben eigentlich die Probleme einerseits in der Stellung des Promts, also wie gehen wir damit um? Ist es ein Promt, sind das mehrere, die wir mehrfach verwenden? Also, wir haben ja oft auch das Thema, dass wir den Promt erzeugen, den Output nehmen, den wieder ein bisschen umformatieren, wie zum Beispiel so ein Refine Chain. also Langchain ist ein Framework, das sehr stark auf solche Promtketten aufbaut, wo man dann den Input wieder nimmt, wieder einspielt und so lange, bis man zum eigentlichen Ergebnis kommt. Das sind ja alles Themen, wo man sagt wie Ja, wie design ich. das sind die, sind das sind ja dann eigentlich schon wirklich Applikationen und Kontroll. eigentlich kann man sagen Kontrollflüsse Und wie design man es? also, dass die erste Frage, wie können wir Kontrollflüsse in den Prompt Engineering sinnvoll einbetten? Und das andere Problem ist haben wir jetzt ja auch schon angedeutet das Paarsten des Outputs, so dass wir gewährleistet können, dass der Output die Form, die Struktur, vielleicht auch den Inhalt in einem gewissen Rahmen hat, den wir erwarten würden für die Applikation, wofür wir das Sprachmodell nutzen.

Carsten Lanquillon:

Ja, das ist schön mit dem Kontrollfluss, das gefällt mir, weil du hast ja wirklich so hierarchisch aufgebaute Sachen, wo dir das langsam ergänzt, und die große Designschandung wird dann unter anderem auch sein. habe ich diesen Steuerung in meiner originären Programmiersprache und bette da die Aufrufe der Sprachmodelle ein, oder betrachte ich das Ganze quasi als ein Kontext, so als großen String, und bette in diesen Text quasi Kontrollstrukturen ein, die ich dann aber auch noch bei der Bearbeitung oder Betrachtung des Textes irgendwie wieder erkennen und auswerten muss, um dann entsprechend meinen Sprachmodell dem das fortzuhalten, das aufzurufen oder bestimmte Kontrollanweisungen auszuführen. Und letztes habe ich häufiger gesehen, fühle mich aber nicht so richtig wohl, damit muss ich zugeben.

Sigurd Schacht:

Ja, jetzt können wir vielleicht mal wunderbar hinter dem Markt das ist noch nicht so groß, es gibt nicht so viele Frameworks in dem Kontext, aber doch etlicher. Man muss natürlich sagen, eine ganz große Hilfe, dass man regeln kann, wie der Output der Sprachmodelle aussieht. das bei OpenAI vor allem das Function Calling, was eine Funktionalität ist, wo ich dann über definierte Funktionen, also programmierte Funktionen, definieren kann, wie der Output aussehen soll und was er denn machen soll, oder dass ich auch Weiterverarbeitungen durch solche Functions durchführen kann. Damit kann ich bei OpenAI, also GBT oder auch in GBT4, halt kontrollieren und steuern. Das ist sicher ein prominenter Part. Jetzt ist es aber natürlich so, dass wir nicht nur OpenAI als Modelle haben, sondern andere auch und würden vielleicht sowas ganz gerne worden, das auch benutzen, dass wir den Output kontrollieren. Und da gibt es halt verschiedene Frameworks.

Sigurd Schacht:

Und eins, was eigentlich sehr schön ist, was aber momentan so ein bisschen in der Schwebe hängt, ist von Microsoft Research entwickelt worden Guidance. Das ist im Endeffekt eigentlich die Idee, dass man sagt, prompt engineering oder generell das Arbeiten mit Sprachmodellen ist mehr fokussiert in Form von Programmieren, also dass man das wie eine Programmierspare verwendet. Vor Nachteile besprechen wir es an sich gleich. Ein anderes ist LMNQL, das ist von der ITH Zürich entwickelt worden. Gleiche Idee, das ist im Endeffekt die Nenne des.

Sigurd Schacht:

die Programmiersprache der großen Sprachmodelle hat auch zum Ziel, prompt engineering, diesen Kontrollfluss zu unterstützen, automatisierter ranzugehen, systematischer ranzugehen und den Output zu passen. Und dann kann man sagen, gibt es noch ein Drittes, das ist relativ neu, das ist vom MIT entwickelt worden, das ist Ask IT nennt sich das, das ist eine Design Structure Language fürs Kontrollieren und passen von Sprachmodell Prompts und Outputs. Und die haben halt auch vor allem diesen Fokus drauf gelegt, zu sagen, dieses Funktion Calling von OpenAI ist eine tolle Möglichkeit, kontrolle zu übernehmen, und das hätten wir aber gerne in der vollen Breite. also gerade das Thema, wie erstell ich die Prompt zu diesem Kontrollfluss? und auch das passen ist bei dem Modell drin.

Sigurd Schacht:

Und zu guter Letzt zumindest die, die wir jetzt für diesen Podcast sehr ausgesucht haben haben wir noch irgendwie eine Kategorie, die ein bisschen spezieller ist. Ich würde mal sagen, das sind sogenannte Validatoren, die im Endeffekt nicht die gesamte Kette betrachten, sondern die im Endeffekt nur ein Output Passer sind, die dann im Endeffekt hergeben und sagen, den Output eines Modells nehmen wir, und nach definierten Regeln also man liegt dann so Policies fest und nach definierten Regeln prüfe ich, ob der Output-Theme entspricht, was wir erwarten würden, und wenn nicht, dann ist es ein Fehler, und der Fehler wird zurückgespielt an das Modell, also bei dem Neuer-Prompt, mit dem Hinweis Achtung, du hast dich nicht an unserer Absprache gehalten, mach doch mal bitte das, was wir dir gesagt haben. Und es geht halt dann so lange, bis halt man diesen Validierungstest durchläuft. Und ein Modell oder ein Framework in dem Bereich ist Guard Rails AI, die im Endeffekt genau so vorgehen, aber dieses Rückspielen mit dem Achtung, das läuft, das vorwärts nicht richtig geschieht, auch automatisiert, so dass er das selbst dann irgendwie aufruft.

Carsten Lanquillon:

So ist das Weil? dann hat man ja jetzt endlich ja auch wieder eine Form von Kontrollfluss mit dem Sprachmodell, wie bei den anderen, die jetzt ein bisschen umfassender sind, auch wieder.

Sigurd Schacht:

Richtig, wobei hier natürlich der Fokus eher ist, dass man der Kontrollfluss eher auf den wie steu ich das Modell, das er den Output liefert, also diesen Output, den ich einmal definiert habe, währenddessen die anderen Modelle oder Frameworks, ja vor allem die ich unterstützen soll beim Kontrollfluss für deine Applikation. Also, es ist ja den Unterschied, ob ich mich auf den Use Case Fokus hier oder einfach nur Kontrollfluss für den Output generiere.

Carsten Lanquillon:

Also, es wird eine Anfrage mit einem Output, den ich potenziell mehrfach generiere, bis ich irgendwas habe, bis ich was haben möchte, und das andere, wo ich halt auch ganz, ganz dieses Zerlegen meines Problems und Einzelaufgaben und das dann zusammen basteln und so, was halt nicht so stark unterstütze. Aber letztendlich validatoren haben die anderen. ich habe jetzt nicht alle im Detail anschauen können, aber ein Teil davon Richtig. Nein, das ist auch.

Sigurd Schacht:

deswegen zeige ich die ersten genannten, also Guidance, lmql und Ask IT, würde ich eher so als holistisch ganzheitliche Unterstützungsframeworks betrachten, die wirklich so ein bisschen den Anspruch haben zu sagen wenn du mit Sprachmodellen unterwegs bist, dann mach nicht einfach nur einen String mit einem Prompt und Bastel da drin rum also es ist ein Prompt-Design sondern geh systematisch ran, verhalt ich wie ein Programmierer, baue Klassen auf, baue Strukturen auf, baue Kontrollflüsse auf, erzeuge deine Applikationen mithilfe des Sprachmodells, und wir passen das Ganze und stellen sicher, dass es auch noch passt.

Carsten Lanquillon:

Da sieht man aber dabei, wenn man so was nutzt. Das Beispiel mal Guidance. Das ganze Struktur ist ja quasi in einem großen String drin. Und man hat da ja irgendwie keinerlei Unterstützung. Wenn ich jetzt vorher mal natürlich habe ein Python-Editor, das macht das ganze mal ein Ding mit Python, dann kriege ich ja irgendwie, wenn ich mich da irgendwie die syntax nicht passe, kriege ich ja gleich Hinweise, dadurch das ganze jetzt eigentlich nur noch mal im Programm ist. In einem großen Text habe ich da ja aktuell zumindest noch keinerlei Unterstützung.

Sigurd Schacht:

Ja, das ist ganz interessant. wir hatten ja gestern schon mal darüber diskutiert. Ich finde, wir sind natürlich relativ… nah an der Entwicklung. Also, wenn man Ask IT anschaut 29. Okustis, da das Paper veröffentlicht worden, sind es drei Wochen. Guidance ist schon ein bisschen älter. Ich glaube, das ist Oktober letzten Jahres gewesen, wenn ich es richtig im Kopf habe. Nee, wobei es muss ein bisschen später gewesen sein, muss März gewesen sein. Das müsste ich nachschauen, weiß ich jetzt leider nicht genau. Aber es ist trotzdem alles recht neu, und meine Ansicht nach fehlt natürlich schon so ein bisschen auch in den IDIs, also in den Programmierendwicklungen. Also, man hat den Anspruch, dass man jetzt im Endeffekt Sprachmodelle und Prompt Engineering betreibt, wie jetzt, wenn man Software Engineering betreibt, aber die Toolunterstützung in den IDIs und so weiter ist noch nicht da. Das heißt, wir haben keinen Zintagshighlighting, wir haben keine Autovervollständigung, wir haben keine Fehlererkennung oder ähnliches. Also, ich denke, da wird sich noch einiges tun, dass man im Endeffekt diese Frameworks in Form eines Interpreters oder ähnliches auch hat, Ja, wird dann kommen.

Carsten Lanquillon:

Also, ehrlich gesagt, ich fühle mich, als ich da angefangen habe, das zu verwenden, so wie früher mit SQL Statements. Man kann natürlich direkt in einer Datemang irgendwie sein SQL Statement schreiben, kriegt da auch Unterstützung, was da richtig und falsch ist, und dann fängt man ja an, das stärker von außer einer Programmiersprache herauszunutzen. Und wenn da die Statements quasi als String formuliert sind, angibst, Na ja, klar kannst du es vorher irgendwo testen. Aber manchmal schreib man es direkt dahin, und dann, ob es klappt oder auch nicht, kam dann oft erst beim Aufrufen. So ähnlich ist es hier auch. Das ist dann halt. Also fühlte mich irgendwie wieder um gefühlt im Jahrhunderte zurück versetzt.

Sigurd Schacht:

Ja, vielleicht mit einem mächtigeren Backend-Engine. Aber vom Tuner bin ich da voll bei dir. Es ist aber schon so, dass die Frameworks sehr gut dich bei dem Fehler suchen, unterstützen. Also, wenn du bei dir, aber du musst bisher wirklich so, wie man das handwerklich eins an kennt, mit wem entwickelt du wie auch immer und schreibt und führt aus und schaut sich den Fehler an. Also die Unterstützung, die Echtzeit-Unterschriftung beim Schreiben ist halt nicht da.

Carsten Lanquillon:

Aber auch beim Ausführen ich ich. Anfangs lief es bei mir nicht, bis ich festgestellt habe, ich hatte, ja, ich hatte die Open AI, und ich hatte den den, den den Key, quasi keine Ahnung falsch auf der falschen Ebene. Ich habe halt nicht mitgekriegt, dass er den nicht nicht gefunden und nicht genommen hat, aber ich krieg die nicht in die Feder-Emeldung, wie hier Abbiehzugang geht, nicht sonst irgendwas, sondern er hat einfach nichts gemacht und gab auch keine Feder-Emeldung. Und das, ich meine, wenn ich jetzt ein falsches Modell ausgewählt habe, was für einen Namen her nicht bekannt ist. Da kam sofort ein Feder, das war kein Thema. Aber da hat er einfach da hätte ich jetzt schon erwartet, dass das irgendwie kommt wie Zugriff verboten, passt nicht sonst irgendwie. Nein, gar nichts. Und ich dachte mir, was ist denn das Komisch gibt überhaupt keine richtige Antwort raus. Ja, also da klar ist, es ist Entwicklung, es sind Ideen, da darf man vielleicht an der Phase noch nicht zu viel erwarten. Aber trotzdem habe ich das schon ganz schön gestört am Anfang.

Sigurd Schacht:

Ich würde nicht sagen, nicht zu viel erwarten, ist der falsche Austrockn, weil ich finde, die sind enorm mächtig. Und wir haben Guidance jetzt zum Beispiel schon in zwei, drei, vier Projekten verwendet, wo wir sagen, das ist echt. Also, wir finden es wahnsinnig schön, man kann viel strukturieren. Das Spannende ist vor allem, wenn ich Braumzbau in Guidance, dass ich praktisch in dem eigentlichen Braumz. Also, wenn man sich jetzt überlegt, ich schreibe jetzt einen Text und möchte vielleicht was, was ich eine Liste der Top 10 Befehle, die in Dino so oder irgendwie verwendet werden, mit einer Beide, und möchte dann ein Quiz aufbauen, dass ich sage, ich gebe dir 10 Befehle, und du sollst mir sagen, was die machen, dann hätte ich sozusagen so einen zweistufigen Prozess. Ich bräuchte erstmal die Top 10 Befehle und müsste dann im Endeffekt dann hergehen und sagen, jetzt nimm die und mach dann den Quiz draus.

Sigurd Schacht:

Und das ist das Schöne, was in Guidance wirklich wahnsinnig toll geht, weil man so generierende Elemente in den eigentlichen Brompt mit einbauen kann. Das heißt, ich habe einen Brompt und kann in dem Brompt den verschachtelten Brompt einbauen, der mir dann diese Teile generiert. Und das macht ja genau diesen Kontrollfluss aus, wo wir sagen, wir benutzen nicht nur eine Anfrage an das Sprachmodell, sondern vielleicht mehrere, oder wir benutzen, sozusagen das Generieren, um den Output des vorher verschachtelten Aufrufs nochmal zu überprüfen und dann nochmal zu verbessern und dann wieder weiterzugehen. Also, es gibt einfach eine wahnsinnig große Möglichkeit, die ja hoch komplexe, mehrere hintereinander verschachtelte Aufrufe durchzuführen.

Carsten Lanquillon:

Was ich mit dem zu viel erwarten meinte, war auch nicht von dem, was ich insgesamt als Leistung des Tools erreichen kann, sondern bei der Unterstützung, wie ich es verwende, aktuell, weil es halt so frisch ist, wobei ich da ich meine, ja, ich habe das mir auch angeschaut, und das ist natürlich schön, dass ich quasi so immer diese Zwischenergebnisse generieren kann und dann wieder verwende, wobei man da sagen muss, das lässt sich auch problemlos in zwei Stufen so formulieren, dass ich halt ersten Sprachmodell nutze, um mir Ideen zu generieren, und dann nehme ich die Ausgabe und stecke sie wieder in den nächsten Schritt rein, aber klar, es ist in einem Rutsch. Das Interessante ist ja dann aber auch dabei, dass das ja letztendlich die Vorgeschichte, also das, was bislang erzeugt wurde, ja auch immer wieder als Kontext und somit als Eingabe für die nächsten Aufrufe reingesteckt wird. Und so fände sich das ja mit dieser ganzen, und das ist für mich so ein bisschen der Vorteil, dass ich so dieses Handling des Kontextes und aufbauen, was stecke ich rein, und darum muss ich mich halt nicht kümmern, dass das halt einfach vom Tool im Hintergrund gemacht wird. Wenn wir jetzt aber an einer Ecke sind, dass ich sage naja, ich generell mir mal die zehn häufigsten Befehle, und dann möchte ich aber die nicht mehr in dem Kontext drin haben, sondern mein wegen nur noch jetzt nehmen wir jetzt die ersten drei und mache da draußen Quiz und möchte sie im Kontext nicht mehr drin haben. Das kommt ja auch vor.

Carsten Lanquillon:

Da gibt es ja spezielle Anweisungen, wie das ja das verstecken soll, so ein Heid gleich true, so, und dann wird das halt weggeblendet, und spätestens dann kann ich mir natürlich auch überlegen naja, da hätte ich auch vorher eine Anfrage machen können, generiere mir das und stecke die hinterher in meinem Prompt rein.

Sigurd Schacht:

Ja, du kannst natürlich alles händisch der Reihe nach durchlaufen und dann schleifen im Programmien und so weiter. Das ist ja eigentlich der Aspekt von so einem Framework, dass er dir da unterstützen soll, dass du halt nicht alles händisch nochmal machen musst. Und das ist schon was. Und das sind ja so Aspekte auch drin. Wie zum Beispiel so nennt ja ich sag mal Tokenheeling Also das Problem, in die in so einem Modell auftauchen, dass die dann durch so ein Framework einfach schon standardisiert mitbedachtet werden und mit berücksichtigt werden.

Carsten Lanquillon:

Oder schon einfaches Formatieren, so ja überschüssige Spaces vorher hinterher irgendwo mit entfernen, dass es halt einfach schöner aussieht. Das Tokenheeling, einfach mal, das mal aufgreifen, das fand ich ja. Also ich muss zugeben, ja, wir haben schon mal angesprochen, das gibt ja, am ganz am Anfang steht jetzt mal der Tokenheiser dass ich meinen Text zerlege in, sagen wir mal, wortfetzen. Da sind ja manchmal es ganze Wörter, manchmal sind es Teile, es werden aber auch Sonderzeichen oder White Spaces mit berücksichtigt. Und was mir erinnert hat, nicht ganz so bewusst war, wie es sich auswirkt, ist, dass man oft Teile von Wörtern oder bleiben wir mal bei Wörtern hat, mit und ohne Space Leerzeichen am Anfang, und dass das teilweise dann zwei oder mehr Tokens sind. Und das hat mich schon extrem schockiert. Das hatte ich mir nicht ganz so stark bewusst gemacht.

Carsten Lanquillon:

Und in sofern, wenn ich jetzt mal einen Wort sage, mal mal, ich habe, was weiß ich, artikel, der die das und nicht nur so, denn auch mal großgeschrieben, kleingeschrieben, mit und ohne Space davor. Da habe ich ja allein schon vom Artikel der mein wegen vier Varianten, wenn ich ja noch andere Sonderzeichen habe, denn da haben wir eigentlich inhaltlich mal eine Sache mit, mit mit entsprechenden Satz markierung, diese extrem aufgebläht so, und das heißt aber auch, manche davon sind häufiger, manche weniger häufig. Also, wenn ich jetzt Ein Artikel habe, klein geschrieben, mit dem space davor ist häufiger als ohne war um was muss da vorher irgendwo stehen. Und wenn ich jetzt je nachdem, wie ich mein, prompt ende, ich habe, was für schöne aussieht, oder wenn ich halt direkt mit dem Buch am Ende oder noch ein leer Zeichner nach eingebe, denn beeinflusst das schon die Art und Weise, jetzt ein Sprachmodell, das fortführen, weil halt dieses Zeichen ja mit mit als schon als bestehen, der Text irgendwie verwendet wird und die Fortsetzung steuert, und das macht ein Riesenunterschied.

Carsten Lanquillon:

Und letztendlich, wie es, wie es halt kommt, man könnte sagen, ist eigentlich egal wird aber das nächste Wort generiert nach dem Space, macht ja nichts, wie das, wie das der Token funktioniert. Und das sind ja so typischerweise so, so gierige Ansätze, die halt erstmal so viel von den verfügbaren oder erkannten Zeichen Nutzen, die halt da sind, was halt geht, und wenn er nichts, nichts mehr findet also die Token sind festgelegt nach der Erstellungsphase Und wenn er dann so lange halt noch Zeichen findet, die zu einem bekannten Token passen, im Ende auch konsumiert und verwendet, und das führt halt zu Problemen.

Sigurd Schacht:

Es führt halt vor allem zu nicht dem Deterministischen Output. Also mal ist es dann so, mal so, und es ist genau in diesen Problem, was wir sagen, wenn wir es in einer Applikation weiter verwenden wollen, den Output, dann ist das echt ein Problem. Und diese frameworks helfen dir halt wie die diese Probleme halt abzufangen, dass also diese Tokens vorbereinigt werden oder geheilt werden Und man dann dann nicht in so ein Problem rein läuft. Und den anderen Aspekt, den ich bei Geidens hatte gesagt, dass man könnte das einfach in eine Kette hängen, und man könnte ja auch das mehrfach aufrufen der Schleife drum oben bauen, in der Programmierspare, dann baue ich ja nicht so ein Framework.

Sigurd Schacht:

Was aber dann das Problem ist und das wird jeder, der schon mal mit Arrenden gearbeitet hat Wir haben eine Influenzzeit, und die läuft uns dann irgendwann davon. Also, wenn wir in einem Chat sind oder in einer Interaktion mit einem Individuum, und das Modell macht 20 Aufrufe, dann haben wir einfach eine enorm lange Influenzzeit, weil die Sequenze hintereinander aufgerufen werden. Und was diese Geidens oder auch die anderen Frameworks machen, die parallelisieren auch die Aufrufe, also die optimieren sozusagen dann diese Fragmente und rufen dann die Sprachmodelle parallelisiert auf und können damit dann im Endeffekt die Geschwindigkeit der Antwort oder die Glattenz reduzieren, und das ist halt all diese Schritte, die ich natürlich auch alles selber programmieren kann Sonst bräuchten also hätte man das ja gar nicht programmieren können sondern zu einem Sacherdruck kann das alles direkt dem Paar auch parallelisieren, ja klar.

Sigurd Schacht:

Logisch, sonst hätte man das Framework ja nicht entwickeln können. Aber dann muss man dann immer wieder machen. Und das ist ja, das ist ja gerade die Definition von dem Framework, dass er die erstanderte Arbeit abnimmt. Wenn ich mir sie bei Torch oder so für die Erzeugung der die Mörning Modelle. Ja, du kannst auch alles bei Hand programmieren ja, aber überleg mal, das ist schon richtig.

Carsten Lanquillon:

Darum geht es auch nicht, sondern es geht die Art und Weise. Wo gebe ich das an? Und stelle mal vor, du hättest jetzt bei Torch, würdest aber alles, alles, was ein normales Netz ist, nicht irgendwie mit mit eigenem Python Code definieren, sondern das immer als eine spezielle neuronal netze, beschreibung, sprache und die du dann einfach noch mal als als Parameter mit übergibst und in dem das halt wieder passt und nochmal wieder erarbeitet ist. Und so ist es jetzt endlich hier, dass ich ja, dass ich alles, was ich machen möchte, und die ganzen Kohlstrukturen ich habe eine ganze eigene Sprache nochmal wieder ganz, sehr, sehr. Und das ist das alles in einen Text reinhängen.

Sigurd Schacht:

Ja, das ist das, was dir nicht gefällt, das ist sozusagen handelbar wird verwendet, als sind das eine Template Sprache, weil diese ganzen Konstrukte wie ich bitte, ich schleifen und so weiter die sind. das sind alles. ja, ich sage mal Template Fragmente in dem klassischen Text, so wie du es beschreibst, was ich jetzt machen muss. ich habe mein Python und habe einen String, und in dem String habe ich Template Fragmente drin, und die muss ich jetzt wieder irgendwie lernen, was aber eigentlich wieder eine eigene Boramie Sprache ist, und das ist das, was dir nicht gefällt und verstehe ich total, weil das Problem an Guidance momentan ist.

Sigurd Schacht:

Zwei Aspekte Nummer eins der Hauptentwickler hat von Microsoft zu Google die Mein gewechselt. Im Moment ist das so ein bisschen. So einen Stillstand habe ich so das Gefühl. Also gibt auch paar Diskussionen im Repo, ob das jetzt weiterentwickelt wird oder nicht.

Sigurd Schacht:

Das ist das eine, und das andere ist, die Dokumentation ist dementsprechend noch nicht so Gut, dass man sagen kann ach, primar, jetzt habe ich in den Programmsyntax und ich lande jetzt komplett, sondern Man muss sich so ein bisschen über die Examples und über die Fragmente, die in der in dem Repoto drin sind, in Zusammenarbeit, und das macht es einfach nicht so schön, und ich denke mal vielleicht, wir sollten dann nächste Woche noch mal das aufgreifen, weil es gibt ja noch andere Ansätze wie Lmql und der Ith Zürich, wie schon erwähnt, die sich bewusst nicht auf so eine Tutorial Sprache konzentriert haben oder Template Sprache, nicht Tutorial Sprache, template Sprache, sondern gesagt haben, wir versuchen, uns in der Peisenssyntax zu halten, und die haben auch in der Struktur, wie man dann das Modell anspricht, eher dann so ein bisschen so ein SQL gedacht, so die Morte, was möchte ich machen, wo hole ich es, also wie ich das Sprachmodell spreche ich ab und mit welchem Bedingungen bei der Klosung, und vielleicht sollten wir da tiefer reingehen und das nochmal ein bisschen darstellen, was die Lmql sind, der Stellenmacher, und auch nochmal die anderen Guardrails und Askei, die nochmal aufgreifen und das nochmal im Detail aufzeigen, weil ich glaube schon das ist der Weg ist, wie das Prompt Engineering systematischer in Kombination mit der Evolution, das darf man nicht vergessen dann zu einem mehr Engineering Orientierten vorgehen kommt und weniger zu einem Design Orientiert.

Carsten Lanquillon:

Ja. Also das und und halt das muss stärker mit der klassischen Programmierung zusammenwachsen. Und ich bin auch der Meinung, dass man jetzt nicht jedes Problem mit dem Sprachmodell lösen muss, sondern es gibt halt auch einfache Schritte und Aufgaben, die man halt auch durch einen klassischen Funktionsaufruf irgendwo berechnen und einfach ausgeben kann. Und da halt die richtige Balance zu finden und das so zusammen zu bringen, dass es einfach wirklich ist, ich hab, ich hab ja auch, muss man sagen, ich hab ja auch in einem Programmiert Sprache im Hintergrund meinen Speicher, wo ich irgendwie auf Variablen wieder zurückgreifen kann, und so ähnlich ist es da vielleicht ja auch mal, dass ich dann mein Kontext im Hintergrund habe, den ich, wenn ich ein Sprachmodell aufrufe, dann mal wieder mitgebe. Insofern, ja, das darf nicht so aufwendig sein, dass ich da mir mir vorher immer noch mal eine riesen Kontext zusammen basteln muss, den ich als Prompt mitgebe. Das muss schon irgendwo automatisiert funktionieren. Aber ich glaube, es wird andere Möglichkeiten weggegeben, und das wird spannend.

Sigurd Schacht:

Ja, in dem Sinn. Vielen Dank fürs zuhören. Wieder ist mein bisschen länger, und dann nächste Woche steigen wir dann nochmal ein und gehen vielleicht auch auf andere Ansätze ein, die in der Wissenschaft da sind. Wie man den Output kontrollieren kann, gibt ja noch andere Sachen. Man kann ja auch am Dekoder und Token also noch ein bisschen drehen. Jetzt verrat doch nicht alles also von daher vielen Dank fürs zuhören. Eine schöne Woche mit Schüchern bis dahin ciao.

Die Kontrolle Des Outputs Von Sprachmodellen
Kontrollfluss Und Output-Kontrolle Von Sprachmodell Prompts
Mächtiges Backend-Engine Und Framework