Haystack im Test

Lesen Sie, ob sich ein Haystack-Deep-Dive lohnt.
sirtravelalot | shutterstock.com







Mit dem Open-Source-Framework Haystack können Unternehmen Applikationen auf Basis von Large Language Models (LLMs) entwickeln – beispielsweise intelligente Suchsysteme für große Dokumentensammlungen. Zurzeit ist Haystack ausschließlich in Python implementiert.



In Sachen Integration ist Haystack breit aufgestellt: Modelle von Plattformen wie Hugging Face, Open AI oder Cohere können ebenso eingebunden werden, wie solche von Amazon Sagemaker, Microsoft Azure oder Google Vertex AI. Darüber hinaus funktioniert Haystack auch mit Vektor- und Dokumenten-Stores wie Elasticsearch, OpenSearch, Pinecone oder Qdrant. Über die umfassende Community des Projekts haben außerdem weitere Integrationen Einzug gehalten, beispielsweise für Tools aus den Bereichen Modellevaluation, Monitoring und Data Ingestion.



Zu den Anwendungsfällen von Haystack gehört unter anderem:




Retrieval Augmented Generation (RAG) umsetzen,



Agenten (Copiloten) realisieren,



Multi-modale Fragen beantworten oder



Informationen aus Dokumenten extrahieren.




Dabei bietet das Framework zahlreiche Funktionen, die LLM-Projekte in ihrer Gesamtheit abdecken und ermöglicht zudem, Datenquellen zu integrieren, Daten zu bereinigen und vorzuverarbeiten.



Die wesentlichen Konkurrenzprodukte für Haystack sind die Open-Source-Frameworks:




LlamaIndex,



LangChain und



Semantic Kernel.




Wir haben uns Haystack im Rahmen eines Tests näher angesehen und verraten Ihnen, ob sich das Framework lohnt und wie es im Vergleich zu seinen Konkurrenten performt.



Was Haystack auszeichnet



Geht es um First-Party-Integrationen, fällt Haystack im Vergleich – beispielsweise mit LangChain – ab. Dafür werden sämtliche 34 Integrationen, die derzeit existieren, vollständig unterstützt. Dazu kommen weitere 28 Integrationsmöglichkeiten, die durch die Community geschaffen wurden. Sie sorgen dafür, dass das quelloffene Framework auch mit weniger populären Daten- und Dokumentenspeichern, Modellen, Tools und APIs verbunden werden kann.



Dabei legt Haystack Wert darauf, explizit und nicht implizit zu sein. Soll heißen: Wenn Sie erstmals eine neue Pipeline erstellen, kann es sein, dass Sie dafür mehr Code schreiben müssen. Dafür haben Sie es im Anschluss allerdings wesentlich einfacher, wenn Sie Ihre Pipeline debuggen, aktualisieren oder warten wollen.



Die vier wesentlichen Ziele, die das Open-Source-Projekt realisieren will, werden in der README des Github-Repositories zum Projekt erklärt:




Technologieunabhängig: Benutzer sollen flexibel entscheiden können, welchen Anbieter und welche Technologie sie einsetzen wollen und dazu jede Komponente gegen eine andere austauschen können.



Explizit: Haystack will transparent machen, wie seine verschiedenen, beweglichen Teile miteinander kommunizieren. Das soll es den Anwendern erleichtern, ihren Tech-Stack und Anwendungsfall anzupassen.



Flexibel: Das Open-Source-Framework bietet alle Tools an einem Ort – zum Beispiel für Datenbankzugriff, Dateikonvertierung, Datenbereinigung, Modelltraining oder -bewertung. Darüber hinaus können benutzerdefinierte Komponenten bei Bedarf einfach erstellt werden.



Erweiterbar: Haystack will einen einheitlichen und einfachen Weg für Community und Dritte bieten, um ihre eigenen Komponenten zu erstellen und setzt dazu auf ein offenes Ökosystem.




Darüber hinaus können Haystack-Anwendungen sowohl Standardmodelle als auch benutzerdefinierte, fein abgestimmte Modelle verwenden. Im Fall von multimodalen KI-Modellen lässt sich das quelloffene Framework auch einsetzen, um beispielsweise Bilder, Untertitel oder Audiotranskriptionen zu erstellen.



Die Haystack-Architektur



Im Kern eröffnet Haystack eine Möglichkeit, benutzerdefinierte RAG-Pipelines mit Large Language Models und Vektor-Stores zu erstellen. Die Architektur der Open-Source-Lösung gliedert sich dabei in:




Pipeline-Komponenten,



Dokumentenspeicher,



Datenklassen und



Pipelines.




Im Folgenden betrachten wir diese Bereiche näher.



Komponenten



Pipeline-Komponenten in Haystack sind Python-Klassen mit Methoden, die Sie direkt callen können. Sie implementieren eine Vielzahl von Funktionalitäten. Indem Sie die Haystack Component API verwenden, können Sie Ihrer Anwendung neue, benutzerdefinierte Komponentenklassen hinzufügen. Die Schnittstelle ermöglicht es auch, eine Verbindung zu Drittanbieter-APIs oder -Datenbanken aufzubauen. Haystack validiert die Verbindungen zwischen den Komponenten, bevor die Pipeline in Betrieb genommen wird.



Um Textantworten zu generieren, kommen bei Haystack „Generators“ zum Einsatz, die mit einem Prompt initiiert werden. Diese sind spezifisch für die LLMs, die sie callen und stehen in zwei verschiedenen Ausführungen zur Verfügung: Chat und Nicht-Chat. Erstere sind für Unterhaltungen gedacht und „erwarten“ eine Liste von Nachrichten als Kontext. Letztere eignen sich für simple Text-Tasks wie Zusammenfassungen oder Übersetzungen. 



„Retriever“ extrahieren bei Haystack Dokumente aus einem Dokumentenspeicher, die für eine Benutzeranfrage relevant sein könnten und geben diesen Kontext an die nächste Komponente in einer Pipeline weiter (im einfachsten Fall ein Generator). Retriever sind spezifisch für den Dokumentenspeicher, den sie verwenden.



Dokumentenspeicher



Document Stores sind Haystack-Objekte, die Dokumente speichern, um sie später abzurufen. Sie sind spezifisch für Vektordatenbanken – mit Ausnahme von InMemoryDocumentStore, das Dokumentenspeicherung, Vector Embedding und Retrieval im Alleingang implementiert. Diese Komponente ist für die Entwicklungsarbeit und Testing gedacht und skaliert nicht für die Produktion.



Document-Store-Komponenten unterstützen Methoden wie write_documents() und bm25_retrieval(). Sie können auch eine DocumentWriter-Komponente verwenden, um eine Liste von Dokumenten in einen Dokumentenspeicher Ihrer Wahl einzufügen. Diese werden typischerweise in einer Indizierungs-Pipeline verwendet.



Datenklassen



Datenklassen unterstützen die Haystack-Komponenten dabei, miteinander zu kommunizieren, so dass Daten durch Pipelines fließen können. Zu den Haystack-Datenklassen gehören:




ByteStream,



Answer sowie seine Subklassen ExtractedAnswer, ExtractedTableAnswer und GeneratedAnswer,



ChatMessage,



Document und



StreamingChunk.




Die Document-Klasse kann Text, Dataframes, Blobs, Metadaten, einen Score und einen Einbettungsvektor enthalten. StreamingChunk repräsentiert eine teilweise gestreamte LLM-Antwort.



Pipelines



Pipelines kombinieren in Haystack Komponenten, Dokumentenspeicher und Integrationen zu benutzerdefinierten Systemen. Das kann sich etwa in einer einfachen RAG-Pipeline, einer Vektordatenbank, die relevante Daten abfragt, oder einem beliebig komplexen (Multi-)Graphen manifestieren. Letztgenannte können simultane Datenflüsse, Standalone-Komponenten und Loops enthalten.



deepset Cloud und Studio



Haystack wird vom Berliner Enterprise-Softwareanbieter deepset betreut, der rund um das Open-Source-Framework auch zwei kommerzielle Produkte entwickelt hat:




deepset Cloud und



deepset Studio (derzeit in der Betaphase).




deepset Cloud



Bei deepset Cloud handelt es sich um eine SaaS-Plattform, um LLM-basierte Apps zu erstellen und über ihren gesamten Lebenszyklus hinweg zu managen – vom Prototyping bis hin zur Produktion. Man könnte das Produkt auch als Haystack in der Cloud bezeichnen – mit einem schöneren GUI, um eine REST-API für die Produktion zu entwickeln und zu testen.



Die SaaS-Lösung ermöglicht Anwendern zum Beispiel:




Daten vorzuverarbeiten und für die Suche vorzubereiten,



Pipelines zu entwerfen und auszuwerten,



Experimente zu fahren, um Performance-Metriken zu sammeln.




Pipelines können zu Demonstrations- und Testzwecken auch geteilt, aus Templates erstellt, in YAML spezifiziert oder über die API in Python kodiert werden. Zur SaaS-Lösung gehört neben „Prompt Studio“ (Prompt Engineering, automatische Skalierung von bereitgestellten Pipelines) auch deepset Studio.


Die „Home“-Ansicht von deepset Cloud.
IDG



deepset Studio



Der erst kürzlich angekündigte, visuelle Pipeline-Designer deepset Studio befindet sich derzeit in einer kontrollierten Beta-Phase und ist kostenlos erhältlich. Das Tool ist Bestandteil des SaaS-Angebots deepset Cloud, steht jedoch auch als eigenständiges Produkt zur Verfügung.



Mit deepset Studio können Sie über eine Drag-and-Drop-Benutzeroberfläche auf die Haystack-Bibliothek mit Komponenten und Integrationen zugreifen. Sämtliche Komponenten und ihre Eigenschaften können in Pipelines kombiniert werden. Zusätzlich ermöglicht deepset Studio, Architekturen zu visualisieren und das finale Setup als YAML-Datei zur Verwendung in verschiedenen Umgebungen zu exportieren.


Deepset Studio in der Deepset Cloud: Diese Pipeline ist eine relativ simple RAG-Implementierung.
IDG


Pipeline Templates ermöglichen einen schnellen Einstieg mit Haystack in der Deepset Cloud. Einmal erstellt, können Sie die Pipeline auch auf ihre eigene Applikation anpassen.
IDG



Erste Schritte mit Haystack



Wie in der Haystack- Dokumentation beschrieben, installieren Sie das Open-Source-Framework mit folgendem Befehl:



pip install haystack-ai



Anschließend sollten Sie ein Haystack-Secret setzen – oder eine OPENAI_API_KEY-Umgebungsvariable mit dem Wert Ihres OpenAI-Keys. Nun kopieren Sie die simple RAG-Starteranwendung aus der Haystack-Dokumentation und fügen diesen in einen Editor ein – beispielsweise Visual Studio Code.



Wie vorgesehen, erwartet der Python-Code in Zeile 31 ein Haystack Secret. Wenn Sie stattdessen eine Umgebungsvariable setzen möchten, ist es am einfachsten, die Zeile 31 zu ändern, indem Sie den Hauptteil des Funktionsaufrufs entfernen:



llm = OpenAIGenerator()



Dadurch wird die Secret-Klasse mit der ersten Umgebungsvariablen initialisiert, die sie findet. Wenn Sie spezifischer sein wollen, können Sie api_key=Secret.from_env(„OPENAI_API_KEY“) innerhalb des OpenAIGenerator()-Calls verwenden.



Führen Sie dann das Programm aus – Sie sollten folgenden Output auf dem Terminal sehen:



['Jean lives in Paris.']



Für den Code, auf den Sie in der Dokumentation zugreifen können, liefert Haystack Pop-up-Erklärungen, wenn Sie auf das Feld unter dem Code mit der Aufschrift „2.0 RAG Pipeline“ klicken. Viel lernen können Sie außerdem, wenn Sie den Code debuggen und jeden Function Call von Haystack zurückverfolgen, um zu sehen, wie er funktioniert. Wie Sie Ihre eigenen benutzerdefinierten Daten mithilfe von Dokumentenspeichern hinzufügen können, lesen Sie ebenfalls in der Dokumentation.


Ein Haystack-Quickstart mit Python-Code in Visual Studio Code.
IDG



Tiefere Haystack-Einblicke erwarten Sie unter anderem hier:




Haystack-Dokumentation



Haystack-API-Referenz



Haystack-Tutorials und -Walkthroughs



Haystack-Blog



Haystack Cookbook



Haystack Discord-Server



Github Repository



Onlinekurs bei DeepLearning.AI




Haystack – Testfazit



Insgesamt ist Haystack ein sehr gutes Open-Source-Framework, um LLM- respektive Generative-AI-Anwendungen zu erstellen. Das wird durch das kommerzielle SaaS-Angebot von deepset hervorragend ergänzt. Auch deepset Studio kann bereits in der Betaphase überzeugen.



Den Vergleich mit der Konkurrenz muss Haystack keinesfalls scheuen: Wie LlamaIndex, LangChain und Semantic Kernel erfüllt auch Haystack die Voraussetzungen für die allermeisten LLM-Anwendungsfälle. Die Frameworks unterscheiden sich im Wesentlichen hinsichtlich der unterstützten Programmiersprachen, ihrer Debugging-Tools sowie der Art und Weise, wie ihre Cloud-Versionen implementiert sind.



Welches Open-Source-Framework dabei für Sie das Richtige ist, sollten Sie idealerweise selbst herausfinden: Da sämtliche Frameworks quelloffen sind, können Sie sie kostenlos testen – idealerweise mit einem relativ simplen, aber klaren Use Case.



Die Vor- und Nachteile von Haystack im Überblick:  



Pro:




quelloffenes Framework, um produktionsreife LLM-Anwendungen zu entwickeln;



in Python implementiert;



überzeugende SaaS-Implementierung;



gute Integration mit Modellen, Vektorsuche und Tools;



unterstützt Monitoring mit Chainlit und Traceloop;




Kontra:




keine Implementierung in anderen Programmiersprachen als Python;




(fm)



Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox!