In den letzten Wochen konnten wir bei einer Vielzahl von Kunden RAG-Lösungen implementieren. Dank der neuesten Entwicklungen bei Azure AI ist die Umsetzung dieser Lösungen schneller als je zuvor möglich. Trotz aller Fortschritte ist jedoch bei speziellen Anwendungsfällen Vorsicht geboten. In diesem Blogpost erkläre ich Ihnen, was RAG-Lösungen sind, wie sie leicht implementiert werden können und worauf man dennoch achten sollte.
Was sind RAG-Lösungen?
RAG-Lösungen (Retrieval-Augmented Generation) sind Technologien, die es ermöglichen, grosse Mengen eigener Dokumente in ChatGPT ähnlichen Lösungen zur Verfügung zu stellen.
Bevor wir zum Vorgehen bei der konkreten Umsetzung kommen, wollen wir kurz erklären, wie eine ChatGPT Lösung auf lokalen Daten aufgebaut ist:
Im Zentrum der Lösung steht eine kognitive Suche, welche anhand der Fragestellung die zu verwendenden Basisdokumente herausfiltert und diese einem Large Language Model (Azure OpenAI) zur Beantwortung übergibt.
Vorgehen
- In einem ersten Schritt werden die Basisdokumente (Bsp. PDFs) in einzelne Chunks à 500 bis 1000 Zeichen unterteilt.
- Die Chunks werden in Vektoren, mit Hilfe eines entsprechenden LLM Modells, umgewandelt. In den meisten Fällen verwenden wir das Modell "text-embedding-ada-002" von Open AI. Die Vektoren resp. Embeddings werden anschliessend in einer Vektordatenbank abgelegt (Bsp wir Azure Cognitive Search).
- Die Frage des Benutzers wird in Freitextform innerhalb eines Chats erfasst. Die Frage "Habe ich am 1. August frei" wird ebenfalls mit dem "text-embedding-ada-002" Modell in einen Vektor umgerechnet und in der folgenden Vektorsuche weiterverwendet.
- Mit dem eben erstellten Vektor wird in den Vektoren innerhalb Azure Cognitive Search gesucht. Dabei werden die 3 besten Resultate resp. die passendsten PDFs gefunden und an das Large Language Model (Azure OpenAI) zusammen mit der Frage und dem Systemprompt zur Beantwortung übergeben.
- Azure OpenAI übernimmt die Beantwortung der Frage und gibt das Resultat aus. In unserem Beispiel wurde basierend auf dem Mitarbeiterhandbuch die Frage mit Ja beantwortet. Der gesamte Verlauf der Frage bis hin zur Beantwortung, wird bei einer Folgefrage wiederum an das LLM übergeben, wodurch es möglich ist, kontextbasierte Folgefragen zu stellen.
Früher war es erforderlich, jeden Schritt mühsam durch Programmcode zu realisieren. Dank der Integrated Vectorized Strategy und Prompt Flow können Proof of Concepts jetzt schnell und einfach erstellt werden, was mehr Raum für umfassendes Feintuning lässt.
Und so geht’s!
Schritt 1: Erstellen des Such Indexes in Azure AI Search
Erstellen sie einen Azure Search Service in ihrer Ressource Gruppe. Neu finden sie im erstellten Search Service den Menüpunkt «Import and vectorize data»:
Innerhalb eines Wizards kann angegeben werden
- welche Dokumente indexiert werden sollen
- wo diese liegen
- welches embedding Modell verwendet werden soll
- ob die Bilder in den Dokumenten ebenfalls vektorisiert und erkannt werden sollen
- weitere Einstellungen für die Suche
Wurden alle Parameter korrekt erfasst, werden beim Ausführen der Indexierung die Dokumente automatisch in Chunks unterteilt, vektorisiert und im Index von Azure Search abgelegt.
Ein erster Test kann im Search Explorer durchgeführt werden, um sicherzustellen, dass die Daten korrekt indexiert wurden:
Wie das obige Beispiel zeigt, werden die Chunks welche zur Frage passen gefunden und mit ihren Vektoren (Embeddings) dargestellt.
Nachdem wir die Indexierung durchgeführt haben, benötigen wir nun die Orchestrierung des Chats.
Prompt Flow
Prompt Flow innerhalb von Microsoft AI ist ein Werkzeug zur Orchestrierung von Chat-Interaktionen. Mit Prompt Flow können Benutzer sicherstellen, dass ihre Daten korrekt verarbeitet und in Azure Search gefunden werden. Es bietet zudem die Möglichkeit, Embeddingmodelle und andere Einstellungen für eine präzise und optimierte Suche festzulegen.
Damit die Erstellung eines Prompt Flow einfacher erfolgen kann, bietet AI Studio verschiedene Templates die verwendet werden können.
Beim Zugriff auf einen bereits erstellten Index, drängt sich das Template «Q&A on your Data» oder alternativ das Template Multi Round Q&auf verwenden.
Bei diesem sehr einfachen Template müssen im Grunde nur die Informationen des Suchindexes ergänzt werden:
In einem ersten Schritt «Input» wird die Frage im Chat erfasst.
Diese Frage wird mittels «text-embedding-ada-002 «in einen Vector gewandelt und an die Suche übergeben. Die Top 2 Sucherresultate (Chunks) werden zur Formatierung an den nächsten Schritt übergeben (generate_prompt_context). Bsp. Entfernen der Scores bei den Resultaten der Suche.
Im Schritt «Prompt_variants» können zu Testzwecken mehrere Systemprompts erfasst werden. Spasseshalber haben wir bspw einen Prompt erfasst, bei welchem die Resultate in Reimform ausgegeben werden sollen.
Der Prompt Flow kann für Testzwecke nun mit «Start compute session» gestartet werden. Da kein Chat-Interface eingerichtet wurde, wird die Unterhaltung automatisch mit allen «Variants» ausgeführt.
Das Resultat kann anschliessend in einem Trace begutachtet werden.
Jeder Schritt kann zudem direkt in Prompt Flow kontrolliert werden, wodurch Abfragen und Verhaltensweisen sehr genau und problemlos angepasst werden können.
Ein herausragender Vorteil des AI-Studios ist die Möglichkeit, alle Schritte interaktiv anzupassen und zu optimieren. Dazu gehören Systemvorgaben, Temperatur, Suchergebnisse, Formatierungen und vieles mehr.
Liefert der Prompt Flow die korrekten Resultate, kann dieser in einen sogenannten «Endpoint» deployed werden.
Deployment
Mittels «Deploy» wird ein Endpoint generiert, welcher wiederum von einem Chat angebunden werden kann.
Nach dem Deployment kann der Endpunkt abermals in einem Testfenster getestet werden:
Sind auch diese Resultate korrekt, kann das API in eine Chatlösung eingebunden werden.
Der Einfachheit halber, haben wir untenstehend den Aufruf aus Postman ausgeführt.
Wie hier gezeigt, gibt das API sowohl die verwendeten Chunks als auch die eigentliche Antwort («Reply») im JSON-Format zurück.
Konklusion
Azure AI macht bemerkenswerte Fortschritte. Besonders hervorzuheben ist dabei die «Integrated Vectorized Strategy», die die Erstellung von RAG-Solutions erheblich vereinfacht, da das manuelle Chunking und das Erstellen der Embeddings wegfallen. Trotz dieser Erleichterung bleibt es notwendig, beispielsweise Dokumentenstrukturen mithilfe des Document Intelligence Services manuell zu erkennen und anzupassen, da das Chunking weiterhin einen erheblichen Einfluss auf die Lösungen hat. Die Grösse der Chunks kann jedoch durch Parametrierung angepasst werden.
Prompt Flow ist ein leistungsstarkes Tool, das es ermöglicht, KI-Anwendungen interaktiv zu testen und weiterzuentwickeln. Die verschiedenen Orchestrierungsschritte lassen sich einfach anpassen, und auch die Integration von Code ist problemlos möglich. Dennoch werden produktive Lösungen weiterhin durch Codierung erstellt, um höchste Qualität und bessere Leistung zu gewährleisten. AI Studio betrachten wir als äusserst fähige Arbeitsplattform, die uns bei der Parametrisierung von KI-Lösungen nachhaltig unterstützt und die Entwicklung erheblich vereinfacht.
Gerne präsentieren wir Ihnen die Möglichkeiten in einer Live-Demo! Vereinbaren Sie einfach einen Termin mit mir oder kontaktieren Sie mich per E-Mail oder Telefon.
Jörg Bieri
Chief Technology Officer, Mitglied der Geschäftsleitungjoerg.bieri@garaio.com
+41 58 310 70 60