Zum Inhalt springen

Werk:AI mit Arnie/KI Agent mit mehreren Experten erstellen

aus AufEinWort, der freien Forschung

Apps, ChatBots & KI-Agenten

📽️ 🎓
◀ Kurs AI mit Arnie (KI Revolution) LLMs meistern
6 KI Agent mit mehreren Experten erstellen (21:32)
KI Agent mit mehreren Experten erstellen
▲ Bot Deployment
▶ KI Agent mit mehreren Experten erstellen
▼ Der KI Agent erklärt

In diesem Video bauen wir unseren ersten richtigen KI-Agenten. Wir werden in eine einzelne Applikation mehrere GPTs reinholen, die sozusagen Experten sind. Wir werden einen GPT haben, der Entscheidungen trifft, und ein anderer GPT wird die Aufgaben ausführen. Das ist das generelle Konzept von KI-Agenten: Mehrere Agenten zusammen entscheiden, was passieren soll.

Wir brauchen dafür Funktionen, Tools, verschiedene LLMs, und wir können alles in unserem Drag-and-Drop-Tool machen. Erinnere dich daran: Wir machen im Groben alles wie bei Google Colab. Es ist sogar noch etwas einfacher, wir brauchen selbst keinen Code schreiben. Wir können diese Drag-and-Drop-Tools verwenden und API-Keys einfügen, wenn die Kredite von unserem Tool fertig sind. Sobald VectorShift unsere Kredite aufgebraucht hat, können wir den API-Key hinzufügen und danach immer noch arbeiten, jedoch nur in einem Chatflow.

Was ich jetzt zeigen will, ist Folgendes: Wir starten in einem komplett leeren Chatflow. Noch mal, was machen wir? Wir gehen zu „Generell“. Wir brauchen natürlich immer Input und Output, das ändert sich nicht, denn Input und Output – was sollte man denn sonst schließlich auch machen? Jetzt fangen wir an, hier unsere Felder hinzuzufügen. Du wirst das sehen: Wir bauen hier eine relativ coole App, und es ist einfacher, als du denkst.

Um das zu machen, braucht unser Bot natürlich eine gewisse Logik, und das sehen wir auch da oben, „Logic“. Danach haben wir hier „Condition“, und die „Condition“ können wir hier reinziehen. Tatsächlich, mit diesen Conditions können wir viele, viele Spielereien machen, tatsächlich und du siehst, was diese Conditions machen, was diese Logik macht. Wir bekommen immer das: „If – then“. Also, wenn etwas passiert, was passiert danach in der Reaktion darauf? Wir werden das jetzt erstmal verbinden. Das werden wir danach wohl wieder lösen müssen. Ich will nur ein paar Dinge erklären.

Also, wenn der Input startet, natürlich „If Condition“. Was ist die Condition? Die Condition können wir hier festlegen, zweimal tatsächlich. „Ist gleich“, danach können wir in Anführungszeichen ein Wort packen. Ich verwende jetzt einfach mal „Token“, weil es hier in diesem Chatbot natürlich auch um LLMs gehen sollte. Ich kann die Dinge natürlich auch alle klein schreiben, das macht hier keinen Unterschied.

Also: „If Condition Token“. Wenn dieser User irgendwann mal „Token“ sagen sollte in seinem Prompt, dann sollte irgendwas passieren. Also: „If – then“. Und was sollte eben passieren? Wenn der Typ „Token“ sagt, dann wollen wir das tatsächlich in einen gewissen Pfad drücken, z. B. in den, nennen wir das „LLM Path“. Wir könnten sogar das Triggerwort hier tatsächlich „LLM“ machen, und danach wird das ganz einfach, wird das Wort „LLM“ reingedrückt in den „LLM Pfad“. Und danach haben wir natürlich „If – then“. Also, wenn dieser Typ „LLM“ sagt, dann geht es in den „LLM Pfad“. Und wir haben natürlich, wenn das nicht passiert, auch eine Möglichkeit, und wir könnten hier natürlich dazuschreiben ch weiß es nicht: „Ich weiß es nicht.“

Das ist hier einfach so, wie wir es mal sehen wollen. Dann können wir natürlich diesen Pfad weiterhin verbinden. Also „If – then“ hier rüber zu unserem Output. Das ist jetzt nur ein Beispiel, denn ich will dir was zeigen. Wir wollen natürlich auch dieses „Ich weiß es nicht“ verbinden mit diesem Text. Und das machen wir jetzt. Und du siehst, dass das nicht funktioniert. Warum funktioniert das nicht? Natürlich, weil wir hier nur eine Sache anschließen können.

Vielleicht hast du es schon gesehen: Wir haben hier oben diesen „Merge“-Button. Das heißt, ich werde diese Verbindung noch mal kurz trennen. Natürlich brauchen wir den „Merge“-Button. Den „Merge“-Button kann ich hier rüberziehen, und der „Merge“-Button, der kann einfach verschiedene Inputs kombinieren. Und du hast es natürlich schon erahnt: Wir verbinden natürlich das da, das „If – then“, mit unserem „Merge“, und wir verbinden das „Ich weiß es nicht“ mit unserem „Merge“. Wir gehen hier rüber und verbinden das damit.

Ich will das mal ganz, ganz kurz testen. Dann sehen wir uns an, wie das funktioniert, wie es funktionieren sollte. Dementsprechend: Wir klicken hier darauf, gehen auf „Chatbot“. Und wenn ich hier bei „Chatbot“ jetzt... wir haben hier die Dinge von vorhin noch offen... Wir können natürlich „Clear Chat“ klicken. Und wenn ich jetzt „LLM“ eingebe, z. B., dann sollte natürlich der Output „LLM Path“ sein, den ich hier zurückbekomme. Und das haben wir bekommen. Das heißt, diese Note hat gefeuert, hat weitergeleitet, hat entschieden, dass hier „LLM Path“ mit dabei ist. Im Satz wird weitergeleitet, dementsprechend das hier oben getriggert. Und am Ende haben wir den Output.

Und wenn ich hier etwas anderes schreibe, z. B.: „Wie rasiere ich mein Gesicht?“ – dann werde ich höchstwahrscheinlich „Ich weiß es nicht“ bekommen. Ich schicke das mal ab. „Ich weiß es nicht“. Das sind einfach nur die Actions, die wir hier triggern, tatsächlich, wir haben dieses „If – then“. Wenn bei „If“ ein „LLM“ dabei ist, dann verwenden wir den „LLM Path“, und ich bekomme hier die Antwort vom „LLM Path“. Wenn das nicht dabei ist, dann bekomme ich das „Ich weiß es nicht“ raus.

Jetzt ist natürlich wichtig: Wir brauchen natürlich nicht nur diese vorprogrammierte Antwort „LLM Path“. Sondern dieser „LLM Path“, der muss was machen. Der muss z. B. trainiert sein an Knowledge. Und ein LLM muss das Knowledge durchsuchen und das Knowledge beantworten. Und zusätzlich brauche ich noch ein LLM, das erstmal schon klassifiziert, ob auch wirklich ein LLM mit dabei ist. Hier in dieser Antwort, denn eventuell meinen Leute hier ihr Sprachmodell, die werden eventuell was anderes sagen als LLM. Und unser LLM muss rausfinden, ob die Leute LLMs hier fragen wollen.

Das heißt, wir brauchen hier einen Agenten, der das klassifiziert. Danach hier einen Agenten, der danach antwortet, wenn er eben gefordert wird. Das heißt, der erste Agent, der macht Ordnung, wird der zweite Agent gebraucht? Ja, nein, vielleicht? Wenn der zweite Agent gebraucht wird, dann wird er auch antworten. Und der zweite Agent wird natürlich auch noch trainiert sein an Custom Knowledge. Und das machen wir jetzt.

Und damit das noch etwas sinnvoller wird, werden wir noch einen zweiten Pfad hier hinzufügen. Das heißt, wir machen hier noch mal „Add Condition Path“. Natürlich, „Else“ ist hier „Ich weiß es nicht“. Das heißt, das kann ich hier kopieren und hier unten einfügen. Hier oben werde ich das Ganze löschen. Danach „Else if“, und denn, hier mache ich wieder. Natürlich das Gleiche: Wir brauchen die Condition, diesmal aber nicht „LLM“, diesmal z. B. „Fine-Tuning“. Denn wir werden zwei verschiedene Knowledge-Files hochladen. Danach werden wir hier den „Fine-Tuning Path“ einfügen, also „Fine Tuning Path“. Und jetzt müssen wir natürlich auch das da natürlich einstöpseln an unserem Modell.

Danach haben wir hier das Ganze noch etwas sinnvoller. Das heißt, fragen die Leute nach LLMs, dann werden sie weitergeleitet zu einem Experten zu LLMs. Fragen sie nach Dingen zu „Fine-Tuning“, dann werden sie weitergeleitet zum „Fine-Tuning“-Experten. Fragen sie nichts dergleichen, dann wird die Antwort sein „Ich weiß es nicht“. Und wie schon gesagt: Um das Ganze zu klassifizieren, brauchen wir hier natürlich LLMs.

Das Ganze können wir natürlich auch testen. Also testen wir das Ganze einfach mal. Wir starten hier erstmal mit „LLM“, dann sollten wir „LLM Path“ bekommen. Natürlich. Danach „Fine Tuning“, „Fine-Tuning“, wir sollten den „Fine Tuning Path“ bekommen. Sehr gut. Danach „Rasierer“, und wir sollten „Ich weiß es nicht“ bekommen. „Ich weiß es nicht“. Also, du siehst: Diese Pfade funktionieren alle. Aber die Logik ist natürlich dahinter, dass wir jedes Mal etwas triggern und nicht einfach nur diesen Pfad leer weitergeben. Und das werden wir jetzt machen.

Erstmal starten wir hier mit der Klassifizierung. Wir brauchen ein LLM für die Klassifizierung. Wir verwenden die OpenAI LLMs, weil die generell halt die besten sind. Die paar Cent machen es nicht aus. Und hier können wir sogar ein GPT-3.5-Turbo-Modell z. B. verwenden, das sehr, sehr günstig ist. Denn für diese Klassifizierung muss das Ding nicht viel können, tatsächlich.

Wir connecten oder disconnecten erstmal diese Verbindung. Danach soll der Input hier zum Prompt hoch. Wir müssen also starten, hoch zu unserem ersten KI-Agenten. Dieser KI-Agent macht jetzt Klassifizierungen. Und das sagen wir ihm natürlich auch im System-Prompt. Das Ganze könnte so aussehen: „Du bist ein Experte für die Klassifizierung von Anfragen zu LLMs. Die Aufgabe ist es herauszufinden, ob jemand Informationen zu LLMs haben möchte oder über das Fine Tuning.“ Natürlich, die Dinge gehören zusammen. Wir hätten das noch besser machen können.

Hast du z. B. einen Onlineshop, so könntest du hier klassifizieren zwischen Preisanfragen oder zu generellen Anfragen. Das ist ein simples Beispiel. Du musst das Beispiel ja sowieso so anpassen, wie es für dich perfekt ist. Aber jetzt weiter: Wenn die Frage speziell zu LLMs und deren Parametern ist, dann klassifiziere die Frage als „LLM“. Wenn die Frage breiter ist und ums Fine Tuning geht, klassifiziere sie als „Fine-Tuning“. Und jetzt verbinden wir natürlich ganz genau dieses kleine Modul mit unserem „If“. Und jetzt haben wir hier unseren ersten KI-Agenten sozusagen zwischengeschaltet. Und unser KI-Agent, der wird jetzt Klassifizierungen machen. Stelle ich mir zumindest vor. Und all das ohne API-Key. Wie gesagt, du kannst den auch hinzufügen.

Ich will das jetzt erstmal testen. Ich mache den Chat hier noch mal klar. Und ich will jetzt sowas fragen wie: „Welche großen Sprachmodelle gibt es?“ Ich bin jetzt gespannt, ob ChatGPT bereits rausfindet, dass wir LLMs meinen und dass wir jetzt den „LLM Path“ hier als Antwort gerne hätten. „LLM Path“ wurde perfekt getriggert. Gibt es Wege, um die Modelle fein abzustimmen? Und wir haben den „Fine Tuning Path“. Jetzt, du siehst, wir können hier zwischen diesen drei Path wechseln. Wenn ich irgendwas Komisches fragen würde, dann würde ich wahrscheinlich „Ich weiß es nicht“ bekommen. Und ich muss dazu gestehen: Hier muss man ein klein wenig rumspielen.

Jetzt müssen diese Pfade aber natürlich auch noch was machen, damit es alles sinnvoll ist. Und darum werden wir uns jetzt kümmern. Das heißt, wir haben unseren ersten KI-Agenten, der erstmal Klassifizierungen macht. Die Klassifizierungen werden danach eingeteilt unter „LLM“ oder „Fine-Tuning“. Und jetzt müssen wir hier natürlich weitere KI-Agenten einbauen, damit das Ganze auch sinnvoll ist.

So, jetzt brauchen wir natürlich ein klein wenig Platz hier, denn wir müssen den „LLM Path“ angeben und den zweiten Path. Das heißt, diese zwei Pfade, die können wir hier natürlich auch löschen, den ersten Pfad, den zweiten Pfad – nur den „Ich weiß es nicht“-Pfad will ich hier mit drinnen lassen. Ich will beim „LLM Path“ starten. Dafür habe ich eine CSV-Datei. Beziehungsweise… bzw. eine …wo habe ich die jetzt? Das Ding ist es… Sehr gut. Das heißt, hier habe ich eine CSV-Datei gemacht. Hier habe ich LLM-Parameter, Token-Limit und das Jahr. Das heißt, wir können fragen, in welchem Jahr welches LLM rausgekommen ist, wie viele Parameter es hat und wie groß das Token-Limit ist.

Das Standard-GPT-4-Modell ist z. B. 2023 rausgekommen, 8000 Token, 1 Billion Parameter. Und weiter runter: 2020 kam z. B. „JukeBox“ mit 5 Billionen Parametern und einem Kontextfenster von 4000 Token. Dementsprechend brauchen wir jetzt natürlich unseren Experten für den „LLM Path“. Und den werden wir jetzt anlegen. Wir brauchen einen Data-Loader, und natürlich brauchen wir den „CSV Loader“, weil es natürlich auch eine CSV-Datei ist.

Und wir müssen natürlich eine CSV-Datei erstmal einfügen. Hier, jetzt, das ist die Stelle. Und hier können wir die Files natürlich hochladen. Dafür klicke ich auf „Upload File“. Die Liste der besten LLMs ist hochgeladen, und jetzt kann ich die zwei Dinge auch verbinden. Das heißt: Files zu „CSV File“. Wir brauchen ja unseren nächsten Agenten, und ich würde sagen, wir verwenden wieder einen OpenAI-Agenten. Den will ich hier verbinden mit diesem Query. Danach haben wir hier das generelle Grundgerüst natürlich schon stehen.

Und das Ding braucht jetzt einen guten System-Prompt, und der könnte so aussehen: „Du bist Experte für spezifische Formate. Die Tabelle hat vier Zeilen: LLM, Parameter, Token-Limit und Jahr. Du wirst Fragen bekommen zu Dingen und musst sie richtig beantworten. Wenn du eine Frage bekommst wie: ‚Wie viele Parameter hat GPT-4?‘, antwortest du: ‚GPT-4 ist ein LLM und hat 4000 Token.‘“ Hier, diese 4000 Token– die sind noch nicht mal richtig, denn ich will dir zeigen, dass das Ding auch selbst nachsuchen kann. GPT-4 hat eigentlich natürlich über 8000 Token. Es geht hier nur darum, dass die Klassifizierung auch richtig gemacht wird, dass es ein LLM ist. Denn die CSV-Datei wird es sich danach natürlich selbst durchsuchen.

Du nimmst dein Wissen aus den hochgeladenen Dateien, und die Rechtschreibung ist hier natürlich nicht wichtig. Und jetzt wird es noch mal interessant: Ich muss hier noch etwas mehr Platz machen für uns. Denn wir können diese Pfade, die waren vorhin zum Testen da, die können wir jetzt löschen. Und hier schreiben wir jetzt „Input“ dazu. Und auch hier unten kann ich „Input“ dazu schreiben. Und hier passiert jetzt etwas Witziges: Ich kann diesen Input-Pfad natürlich verbinden mit diesem Prompt. Und dieses Input-Feld ist hier neu, und das kann ich verbinden mit diesem Input-Feld.

Das sollte danach in etwa so alles aussehen. Also, wie funktioniert das jetzt? Wenn jemand eine Frage stellt, wird die Frage erstmal natürlich weitergeleitet zu diesem LLM. Dieses LLM macht eine Klassifizierung, ob es „LLM“ ist oder „Fine-Tuning“. Wenn es „LLM“ ist, dann wird es hier weitergeleitet zu „Input“. Und wenn es „Input“ ist, hier, beziehungsweise „LLM“, und „Input“ wird weitergeleitet zu diesem Experten. Dieser Experte wird danach unsere CSV-Files durchsuchen mit dem CSV-File-Loader und wird die Antwort generieren. Und dasselbe machen wir danach natürlich auch noch mit dem „Fine-Tuning Path“.

Und wir können das jetzt natürlich zusammenflicken. Wir brauchen hier natürlich unseren „Merge Loader“. Dieser Output muss in den „Merge Loader“ rein. Und wir können jetzt schon das Ganze auch mal testen, wenn wir wollen. Also, so sieht unser KI-Agent bis jetzt aus. Und wir können uns natürlich mal ansehen, was hier so bei rauskommt. Das heißt, wir klicken einfach mal hier bei „Play“. Ich lösche das Ganze, und wir testen, ob unser Input weitergeleitet wird, klassifiziert – richtig klassifiziert – im Optimalfall als „LLM“, danach von unserem Experten hier verarbeitet wird und danach natürlich die Informationen rausgesucht werden, die korrekt sind.

Wir könnten jetzt sowas fragen wie: „Gibt es ein LLM mit mehr als 8000 Token-Limit und vielen Parametern?“ Wir schicken die Frage los. Jetzt wird erstmal klassifiziert. Die Frage sollte eine „LLM“-Frage sein. Unser KI-Agent wird das CSV-File durchsuchen, wird höchstwahrscheinlich rausfinden, dass GPT-4 sehr wohl viele Token hat und viele Parameter. Und wir sollten hoffentlich die richtige Antwort bekommen: „Ja, GPT-4 ist ein LLM mit einem Token-Limit von 8192 und über 1 Trillionen Parameter.“ Es gibt auch andere LLMs mit einem Token-Limit von über 8000, darunter Lambda mit 8000, Palm mit über 8000, Gemini mit über 8000 und GShard.

Ich muss gestehen: Diese CSV-Datei, die ich hier habe, die ist natürlich... Moment, wo ist das Ding?... nur mit ChatGPT generiert. Ich weiß nicht, ob die Token korrekt ist. Aber es wird mir wirklich angezeigt, beziehungsweise die Dinge, die mir hier gesagt werden, werden hier auch angezeigt. 8192 Token-Limit zum Beispiel von GPT-4. Ja, diese Tabelle ist ein kleines Chaos, aber die Dinge werden hier richtig angezeigt. Und natürlich auch hier unten sehe ich gerade: „Gemini, Token-Limit: 8192 Token.“ Also, es scheint perfekt zu funktionieren – zumindest bis jetzt.

Und jetzt brauchen wir unseren zweiten Experten, und zwar den „Fine-Tuning“-Experten. Was brauche ich jetzt? Ja, natürlich: Ich brauche eine Knowledge Base. Das heißt, ich klicke auf „Knowledge“, „Knowledge-Based Reader“. Ich kann das verbinden mit meinem „Fine-Tuning Path“. Natürlich muss ich jetzt Dinge hier hochladen. Ich zoome noch mal etwas ran. Das heißt, „Create Knowledge Base“. Der Name ist einfach mal „Fine Tuning“. Description auch „Fine Tuning“, meinetwegen. „Advanced Settings“: Die Chunk-Size, die mache ich wieder etwas hoch. Ein kleines Overlap hier auch mit rein. Und „Confirm“.

Und jetzt sehen wir hier Folgendes: Wir haben zu viel „Vector Store“ verbraucht für die Gratis-Subscription. Ich denke, ich werde mir die Subscription mal eben kurz gönnen, damit du siehst, wie das Ganze funktioniert. Das heißt, ich klicke hier „Confirm“. Ich muss „Upgrade“ klicken. Also, „Create Knowledge Base“ noch mal, „Fine Tuning“. Auch hier noch mal „Fine Tuning“. Die „Advanced Settings“: Chunk-Size etwas hoch, den Overlap etwas hoch. Ich klicke „Confirm“. Ich musste übrigens gerade ein Abo hier tatsächlich abschließen, damit ich noch eine Vector-Datenbank bekomme.

Danach natürlich: „Edit Knowledge Base“, „Add Document File“, „Select File“. Das wird natürlich das Ding sein, das ich vorhin schon verwendet habe. Und dann hier sind natürlich unsere „Fine-Tuning“-Dinge mit drinnen, alle. Ich klicke auf „Add“. Das Ding wurde hochgeladen. Es ist natürlich relativ groß. Dennoch klicke ich hier auf „Save“. Wurde alles schon gespeichert. Ich kann es also schließen. Und natürlich brauchen wir jetzt unseren dritten KI-Agenten. Wieder LLM, natürlich wieder von OpenAI, weil das Ding halt eben das Beste ist. Wieder ein GPT-4 Turbo-Modell.

Du bist ein Experte für „Fine Tuning“ und Spezialfragen von LLMs. Durchsuche dein Wissen und antworte nur, wenn du die Antwort kennst. Jetzt natürlich der Prompt: Hier machen wir sowas wie „Kontext: Doppelpunkt, eine Variable“. Das nennen wir jetzt einfach auch mal „Kontext“. „Kontext“. Jetzt können wir das verbinden, hier „Result“ mit „Kontext“. Damit wir das verbinden können, können wir natürlich noch was hier dazu machen, und zwar: „Question: Doppelpunkt“, natürlich wieder eine kleine Variable dazu. Und diese Variable nennen wir jetzt natürlich auch „Question“. Das haben wir natürlich gemacht, damit wir hier unser neues Teil bekommen, um die Dinge einzustöpseln.

Und natürlich: Der Output vom Port „Condition“, das muss natürlich auch in das LLM mit rein, damit das LLM hier zusammenarbeiten kann mit dem Ding. So sieht das Ganze doch gut aus. Und damit es auch ein Chatbot wird, können wir natürlich auch noch die „Conversation History“ dazu schreiben. „Conversation History“, eine Variable natürlich noch mal. Die nennen wir jetzt „History“. Und hier bekommen wir natürlich die History dazu, indem wir auf „Chat“ klicken. Wir können „Chat Memory“ verwenden. „Chat Memory“ sollten wir danach natürlich auch noch natürlich verbinden mit unserer Historie.

Ja, ich weiß, das wird etwas komplex hier. Aber wir brauchen einfach diese ganzen Dinge, wenn das wirklich, wirklich viele verschiedene KI-Agenten werden sollen. Und natürlich muss der Output jetzt in diesen „Merge“ hier rein. Das heißt, schwups, danach sind die Dinge eigentlich genauso verbunden, wie sie verbunden sein sollen.

Und ich denke, jetzt haben wir hier unseren Chatbot fertig. Und der Chatbot sollte so funktionieren. Ich denke, im nächsten Video will ich noch mal das Ganze zusammenfassen und einen Test machen. Denn in diesem Video haben wir ganz, ganz technisch die ganzen Dinge verbunden.

Wie gesagt, im nächsten Video gebe ich noch mal eine Zusammenfassung und wir testen den Bot erstmal aus, ob er auch funktioniert oder nicht.