Wie ich bereits im letzten Beitrag erwähnt habe, erwies sich die Entwicklung der KI von Fabrice als weitaus komplexer als erwartet und zwang mich dazu, viele verschiedene Ansätze zu erforschen.
Die erste Annäherung: Llama Index – Vektorsuche
Mein erster Versuch, die Suchfähigkeiten von Fabrice AI zu verbessern, bestand darin, den Llama-Index für die Vektorsuche zu verwenden. Das Konzept war einfach: Ich nahm den Inhalt meines Blogs, wandelte ihn in Langchain-Dokumente um und diese dann in Llama-Dokumente. Diese Llama-Dokumente würden dann in einem Vektorindex gespeichert, so dass ich diesen Index nach relevanten Informationen abfragen könnte.
Als ich begann, das System zu testen, wurde jedoch deutlich, dass dieser Ansatz nicht die Ergebnisse lieferte, die ich mir erhofft hatte. Als ich das System mit kontextlastigen Fragen wie “Was sind die größten Fehler von Marktplatzgründern? Anstatt den differenzierten Inhalt abzurufen, von dem ich wusste, dass er in den Daten enthalten war, lieferte sie irrelevante oder unvollständige Antworten.
Dieser anfängliche Misserfolg veranlasste mich, meinen Ansatz zu überdenken. Ich erkannte, dass es nicht ausreichte, Inhalte einfach in einem Vektorindex zu speichern. Der Abrufmechanismus musste den Kontext und die Nuancen der gestellten Fragen verstehen. Diese Erkenntnis war die erste von vielen Lektionen, die die Entwicklung von Fabrice AI prägen sollten.
Wissen speichern: MongoDB – Speicherung und Abruf von Dokumenten
Mit den Einschränkungen des Llama-Index-Ansatzes im Hinterkopf, habe ich als nächstes die Speicherung der Llama-Dokumente in MongoDB untersucht. Das flexible Schema und die dokumentenorientierte Struktur von MongoDB schienen mir eine vielversprechende Lösung für die Verwaltung der verschiedenen Arten von Inhalten zu sein, die ich im Laufe der Jahre angesammelt hatte.
Der Plan war, ein dynamischeres und reaktionsschnelleres Sucherlebnis zu schaffen. Dieser Ansatz stieß jedoch schnell auf Probleme. Die Suchfunktion, von der ich erwartet hatte, dass sie robuster sein würde, funktionierte nicht wie erwartet. Abfragen, die relevante Dokumente hätten liefern sollen, ergaben keine Ergebnisse oder irrelevante Inhalte.
Dieser Rückschlag war frustrierend, aber er unterstrich auch eine wichtige Lektion: Die Speichermethode ist genauso wichtig wie die Abrufstrategie. Ich begann, andere Optionen in Betracht zu ziehen, z. B. die Verwendung von MongoDB Atlas für Vektorsuchen, die möglicherweise die Präzision und Skalierbarkeit bieten könnten, die ich benötigte. Bevor ich mich jedoch auf diese Alternative festlegte, wollte ich andere Ansätze untersuchen, um festzustellen, ob es vielleicht eine effektivere Lösung gibt.
Metadaten-Retriever und Vektorspeicher: Auf der Suche nach Spezifität
Eine der nächsten Möglichkeiten, die ich untersuchte, war die Verwendung eines Metadatenabrufs in Kombination mit einem Vektorspeicher. Die Idee hinter diesem Ansatz war, die riesige Menge an Informationen in der Fabrice-KI zu kategorisieren und dann Antworten auf der Grundlage dieser Kategorien abzurufen. Durch die Strukturierung der Daten mit Metadaten hoffte ich, die Fähigkeit der KI zu verbessern, spezifische, gezielte Antworten zu geben.
Doch auch diese Methode hatte ihre Grenzen. Obwohl sie oberflächlich betrachtet vielversprechend zu sein schien, hatte die KI Schwierigkeiten, auf alle Arten von Abfragen genaue Antworten zu geben. Als ich zum Beispiel fragte: “Ist der Autor optimistisch?” Das System schaffte es nicht, die Frage im Zusammenhang mit dem relevanten Inhalt zu interpretieren. Anstatt eine aufschlussreiche Analyse auf der Grundlage der Metadaten zu liefern, gab es entweder vage Antworten oder gar keine.
Dieser Ansatz lehrte mich eine wertvolle Lektion über die Bedeutung des Kontexts in der KI. Es reicht nicht aus, Informationen einfach nur zu kategorisieren. Die KI muss auch verstehen, wie diese Kategorien zusammenwirken und sich überschneiden, um ein zusammenhängendes Verständnis des Inhalts zu erhalten. Ohne dieses tiefe Verständnis können selbst die ausgeklügeltsten Suchmethoden versagen.
Wissen strukturieren: Der SummaryTreeIndex
Als ich die KI von Fabrice weiter verfeinerte, experimentierte ich mit der Erstellung eines SummaryTreeIndex. Dieser Ansatz zielt darauf ab, alle Dokumente in einem Baumformat zusammenzufassen, so dass die KI durch diese Zusammenfassungen navigieren und relevante Informationen auf der Grundlage der Struktur des Inhalts abrufen kann.
Die Idee war, dass die KI durch die Zusammenfassung der Dokumente schnell die wichtigsten Punkte erkennen und auf Anfragen mit prägnanten, genauen Informationen antworten könnte. Doch auch diese Methode war mit erheblichen Herausforderungen verbunden. Die KI hatte Schwierigkeiten, aussagekräftige Antworten auf komplexe Fragen zu geben, z. B. “Wie trifft man wichtige Entscheidungen im Leben?” Anstatt aus dem reichhaltigen, nuancierten Inhalt der Zusammenfassungen zu schöpfen, waren die Antworten der KI oft oberflächlich oder unvollständig.
Diese Erfahrung unterstreicht die Schwierigkeit, in der KI ein Gleichgewicht zwischen Breite und Tiefe zu finden. Während Zusammenfassungen einen Überblick auf hohem Niveau bieten können, fehlt ihnen oft der detaillierte Kontext, der für die Beantwortung komplexerer Fragen erforderlich ist. Mir wurde klar, dass eine effektive Lösung sowohl detaillierte Inhalte als auch Zusammenfassungen auf hoher Ebene integrieren muss, damit die KI bei Bedarf auf beides zurückgreifen kann.
Aus diesem Grund habe ich die KI in der aktuellen Version von Fabrice AI dazu veranlasst, zunächst eine Zusammenfassung der Antwort zu geben, bevor sie auf weitere Details eingeht.
Horizonte erweitern: Knowledge Graph Index
Da ich die Grenzen der bisherigen Methoden erkannte, wandte ich mich einem anspruchsvolleren Ansatz zu: dem Knowledge Graph Index. Bei diesem Ansatz wird aus unstrukturiertem Text ein Wissensgraph erstellt, der es der KI ermöglicht, entitätsbasierte Abfragen durchzuführen. Ziel war es, ein dynamischeres und vernetzteres Verständnis des Inhalts zu schaffen, so dass die KI von Fabrice komplexe, kontextlastige Fragen effektiver beantworten kann.
Trotz seiner vielversprechenden Eigenschaften hatte der Knowledge Graph Index auch mit erheblichen Hürden zu kämpfen. Die KI hatte Schwierigkeiten, genaue Ergebnisse zu liefern, insbesondere bei Abfragen, die ein tiefes Verständnis des Kontexts erfordern. Auf die Frage “Was sind faire Seed- und Series A-Bewertungen?” konnte die KI zum Beispiel keine relevante Antwort geben, was die Schwierigkeit verdeutlicht, unstrukturierten Text in einen kohärenten Knowledge Graph zu integrieren.
Dieser Ansatz war zwar letztlich erfolglos, lieferte aber wichtige Erkenntnisse über die Herausforderungen bei der Verwendung von Wissensgraphen in der KI. Die Komplexität der Daten und die Notwendigkeit eines präzisen Kontexts bedeuteten, dass selbst ein gut konstruierter Wissensgraph Schwierigkeiten haben konnte, die gewünschten Ergebnisse zu liefern. Ein weiterer Nachteil des Knowledge Graph Index war seine langsame Geschwindigkeit. Die Antwortzeit, um verwandte Dokumente zu erhalten, war im Vergleich zu einem Vektorspeicherindex sehr hoch.
Neuauswertung der Daten: Zwillinge
Nach mehreren Rückschlägen beschloss ich, einen anderen Ansatz zu wählen, indem ich die KI von Google, Gemini, nutzte. Die Idee war, Datensätze aus JSON-CSV-Dateien zu erstellen und dann ein benutzerdefiniertes LLM-Modell mit diesen Daten zu trainieren. Ich hoffte, dass ich durch die Verwendung strukturierter Daten und eines robusten Trainingsmodells einige der Probleme überwinden könnte, die bei früheren Versuchen aufgetreten waren.
Allerdings stieß auch dieser Ansatz auf Schwierigkeiten. Der Trainingsprozess wurde aufgrund einer falschen Datenformatierung unterbrochen, wodurch das Modell nicht effektiv trainiert werden konnte. Dieser Rückschlag unterstreicht die Bedeutung der Datenintegrität beim KI-Training. Ohne korrekt formatierte und strukturierte Daten können selbst die fortschrittlichsten Modelle nicht die erwartete Leistung erbringen.
Diese Erfahrung brachte mich auf die Idee, BigQuery zum Speichern von JSON-Daten zu verwenden, um eine skalierbarere und zuverlässigere Plattform für die Verwaltung der großen Datensätze zu schaffen, die für ein effektives Training von Fabrice AI erforderlich sind.
Stärken vereinen: Langchain-Dokumente mit Pinecone
Trotz der bisherigen Herausforderungen war ich fest entschlossen, eine Lösung zu finden, die es Fabrice AI ermöglichen würde, Wissen effektiv zu speichern und abzurufen. Diese Entschlossenheit brachte mich dazu, mit Langchain-Dokumenten und Pinecone zu experimentieren. Der Ansatz bestand darin, einen Pinecone-Vektorspeicher mit Langchain-Dokumenten und OpenAI-Einbettungen zu erstellen und dann die ähnlichsten Dokumente auf der Grundlage der Abfrage abzurufen.
Diese Methode erwies sich als vielversprechend, insbesondere wenn die Abfrage den Titel des Dokuments enthielt. Auf die Frage “Was ist der Schlüssel zum Glück?” konnte die KI beispielsweise den relevanten Inhalt genau abrufen und zusammenfassen. Allerdings gab es immer noch Einschränkungen, insbesondere wenn die Abfrage keine spezifischen Schlüsselwörter oder Titel enthielt.
Dieser Ansatz zeigte das Potenzial der Kombination verschiedener Technologien zur Verbesserung der KI-Leistung. Durch die Integration von Langchain-Dokumenten mit dem Vektorspeicher von Pinecone konnte ich die Relevanz und Genauigkeit der KI-Antworten verbessern, wenn auch mit einigen Einschränkungen.
Konsistenz erreichen: GPT Builder OpenAI
Nachdem ich verschiedene Methoden und Technologien untersucht hatte, wandte ich mich an den GPT Builder von Open AI, um das in Fabrice AI gespeicherte Wissen zu konsolidieren und zu verfeinern. Durch das Hochladen aller Inhalte in eine GPT-Wissensdatenbank wollte ich eine konsistentere und zuverlässigere Plattform für den Abruf und die Interaktion mit meinem Wissen schaffen.
Dieser Ansatz erwies sich als einer der erfolgreichsten, da die KI bei einer Reihe von Abfragen bessere Ergebnisse liefern konnte. Der Schlüssel zu diesem Erfolg war die Integration des gesamten Wissens in ein einziges, zusammenhängendes System, das es der KI ermöglichte, bei der Beantwortung von Fragen auf die gesamte Breite des Inhalts zurückzugreifen.
Wie in meinem vorherigen Beitrag erwähnt, konnte ich es nicht auf meiner Website zum Laufen bringen, und es war nur für bezahlte Abonnenten von Chat GPT verfügbar, was ich als zu einschränkend empfand. Auch wenn es besser war, gefiel mir die Qualität der Antworten immer noch nicht und ich fühlte mich nicht wohl dabei, es für die Öffentlichkeit freizugeben.
Letzte Verfeinerung: GPT-Assistenten mit Modell 4o
Das letzte Puzzlestück bei der Entwicklung von Fabrice AI war die Einführung der GPT-Assistenten mit dem Modell 4o. Dieser Ansatz war die Krönung all dessen, was ich während des Projekts gelernt hatte. Durch die Verwendung einer Vektordatenbank und die Verfeinerung der Eingabeaufforderungen wollte ich ein Höchstmaß an Genauigkeit und kontextbezogenem Verständnis bei den Antworten der KI erreichen.
Bei dieser Methode wurde das gesamte Wissen, das ich angesammelt hatte, in eine Vektordatenbank hochgeladen, die dann als Grundlage für die Interaktionen der KI diente. Die Vektordatenbank ermöglichte es der KI, anspruchsvollere Suchvorgänge durchzuführen und Informationen auf der Grundlage der semantischen Bedeutung von Anfragen abzurufen, anstatt sich nur auf den Abgleich von Schlüsselwörtern zu verlassen. Dies war ein bedeutender Fortschritt gegenüber früheren Ansätzen und ermöglichte es der KI, komplexe, nuancierte Fragen besser zu verstehen und zu beantworten.
Eine der wichtigsten Innovationen dieses Ansatzes war die sorgfältige Verfeinerung der Eingabeaufforderungen.
Durch die sorgfältige Ausarbeitung und das Testen verschiedener Eingabeaufforderungen konnte ich die KI dazu bringen, genauere und relevantere Antworten zu geben.
Dazu musste nicht nur der Wortlaut der Aufforderungen angepasst werden, sondern es wurde auch mit verschiedenen Möglichkeiten der Strukturierung der Fragen experimentiert, um die bestmöglichen Antworten zu erhalten.
Die Ergebnisse waren beeindruckend.
Die KI war nun in der Lage, eine breite Palette von Anfragen mit hoher Genauigkeit zu bearbeiten, selbst wenn die Fragen offen waren oder ein tiefes Verständnis des Kontextes erforderten.
Zum Beispiel auf die Frage: “Wie treffen Sie die wichtigsten Entscheidungen in Ihrem Leben?
Die KI lieferte eine umfassende und aufschlussreiche Antwort, die auf eine Vielzahl von Quellen und Perspektiven zurückgriff, um eine abgerundete Antwort zu liefern.
Dieser Erfolg war der Höhepunkt von Hunderten von Arbeitsstunden und unzähligen Experimenten. Er zeigte, dass es mit der richtigen Kombination aus Technologie und Raffinesse möglich war, eine KI zu entwickeln, die Informationen nicht nur effektiv speichern und abrufen, sondern auch auf sinnvolle Weise mit ihnen umgehen kann. Die Entwicklung der GPT-Assistenten unter Verwendung des Modells 4o markierte den Punkt, an dem die KI von Fabrice wirklich zu ihrem Recht kam und den Grad an Raffinesse und Genauigkeit erreichte, den ich mir von Anfang an vorgestellt hatte. Die GPT-Assistenten-API wurde dann in meinen Blog integriert, damit die Endnutzer mit Fabrice AI so interagieren können, wie Sie es jetzt auf dem Blog sehen.
Über die Reise nachdenken
Der Prozess der Entwicklung von Fabrice AI hat mir die Komplexität der Arbeit mit KI vor Augen geführt, insbesondere wenn es um das Verständnis und die Kontextualisierung von Informationen geht. Ich habe gelernt, dass es bei der KI-Entwicklung keine Abkürzungen gibt – jeder Schritt, jede Iteration und jedes Experiment ist ein notwendiger Teil der Reise, um etwas wirklich Effektives zu schaffen.
Mit Blick auf die Zukunft freue ich mich darauf, Fabrice AI weiter zu verfeinern und zu erweitern. Wie im letzten Beitrag erwähnt, werde ich die gestellten Fragen überprüfen, um die Wissensbasis dort zu vervollständigen, wo es Lücken gibt. Außerdem hoffe ich, dass ich irgendwann eine interaktive Version herausbringen kann, die aussieht und klingt wie ich und mit der Sie sprechen können.