Co-Autoren:
- Jerry Liu (Mitbegründer/CEO von LlamaIndex)
- Erika Cardenas (Entwickleranwältin, Weaviate)
Während große Sprachmodelle (LLMs) wie GPT-4 über beeindruckende Fähigkeiten bei der Generierung und Argumentation verfügen, weisen sie Einschränkungen hinsichtlich ihrer Fähigkeit auf, auf bestimmte Fakten, Zahlen oder kontextrelevante Informationen zuzugreifen und diese abzurufen. Eine beliebte Lösung für dieses Downside ist die Einrichtung eines RAG-Methods (Retrieval-Augmented Technology): Kombinieren Sie das Sprachmodell mit einem externen Speicheranbieter und erstellen Sie ein Gesamtsoftwaresystem, das die Interaktionen mit und zwischen diesen Komponenten orchestrieren kann, um ein zu erstellen „Chatten Sie mit Ihren Daten“-Erlebnis.
Die Kombination von Weaviate und LlamaIndex bietet die entscheidenden Komponenten, die zum einfachen Aufbau eines leistungsstarken und zuverlässigen RAG-Stacks erforderlich sind, sodass Sie problemlos leistungsstarke LLM-fähige Erlebnisse für Ihre Daten bereitstellen können, z. B. Suchmaschinen, Chatbots und mehr. Erstens können wir Weaviate als Vektordatenbank verwenden, die als externer Speicheranbieter fungiert. Als nächstes können wir ein leistungsstarkes Datenframework wie LlamaIndex verwenden, um beim Erstellen der LLM-App bei der Datenverwaltung und Orchestrierung rund um Weaviate zu helfen.
In diesem Blogbeitrag geben wir einen Überblick über LlamaIndex und einige der wichtigsten Datenverwaltungs- und Abfragemodule. Anschließend gehen wir ein erstes Demo-Pocket book durch.
Wir starten eine neue Serie, die Ihnen zeigt, wie Sie LlamaIndex und Weaviate für Ihre LLM-Anwendungen verwenden.
LlamaIndex ist ein Datenframework zum Erstellen von LLM-Anwendungen. Es bietet ein umfassendes Toolkit für die Aufnahme, Verwaltung und Abfrage Ihrer externen Daten, sodass Sie diese mit Ihrer LLM-App verwenden können.
Datenaufnahme
Zur Datenaufnahme bietet LlamaIndex Konnektoren zu über 100 Datenquellen, von verschiedenen Dateiformaten (.pdf, .docx, .pptx) über APIs (Notion, Slack, Discord usw.) bis hin zu Internet Scrapern (Stunning Soup, Readability usw.). .). Diese Datenkonnektoren werden hauptsächlich auf gehostet [LlamaHub](https://llamahub.ai/). Dies erleichtert Benutzern die Integration von Daten aus ihren vorhandenen Dateien und Anwendungen.
Datenindizierung
Sobald die Daten geladen sind, bietet LlamaIndex die Möglichkeit, diese Daten mit einer Vielzahl von Datenstrukturen und Speicherintegrationsoptionen (einschließlich Weaviate) zu indizieren. LlamaIndex unterstützt die Indizierung unstrukturierter, halbstrukturierter und strukturierter Daten. Eine Standardmethode zur Indizierung unstrukturierter Daten besteht darin, die Quelldokumente in Textblöcke aufzuteilen, jeden Block einzubetten und jeden Block/jede Einbettung in einer Vektordatenbank zu speichern.
Datenabfrage
Sobald Ihre Daten erfasst/gespeichert sind, stellt LlamaIndex die Instruments zur Definition einer erweiterten Abruf-/Abfrage-„Engine“ für Ihre Daten bereit. Mit unseren Retriever-Konstrukten können Sie bei einer Eingabeaufforderung Daten aus Ihrer Wissensdatenbank abrufen. Mit einem Abfrage-Engine-Konstrukt können Sie eine Schnittstelle definieren, die eine Eingabeaufforderung aufnehmen und eine wissenserweiterte Antwort ausgeben kann. Unter der Haube können Retrieval- und Synthese-Module (LLM) verwendet werden.
Nachfolgend finden Sie einige Beispiele für „Aufgaben“ der Abfragemaschine, grob geordnet von einfach bis fortgeschritten:
- Semantische Suche: Rufen Sie die High-k-ähnlichsten Elemente aus dem Wissenskorpus ab, indem Sie Ähnlichkeiten in die Abfrage einbetten, und synthetisieren Sie eine Antwort über diese Kontexte.
- Strukturierte Analysen: Konvertieren Sie natürliche Sprache in eine ausführbare SQL-Abfrage
- Abfragezerlegung über Dokumente: Zerlegen Sie eine Abfrage in Unterfragen, jede über eine Teilmenge der zugrunde liegenden Dokumente. Jede Unterfrage kann mit einer eigenen Abfrage-Engine ausgeführt werden.
Lassen Sie uns ein einfaches Beispiel durchgehen, wie LlamaIndex mit Weaviate verwendet werden kann, um ein einfaches Frage-Antwort-System (QA) über den Weaviate-Blogs aufzubauen!
Den vollständigen Code finden Sie im Weaviate-Rezepte-Repo.
Der erste Schritt besteht darin, Ihren Weaviate-Consumer einzurichten. In diesem Beispiel stellen wir über den Port eine Verbindung zu einer lokalen Weaviate-Instanz her http://localhost:8080
:
import weaviate
# connect with your weaviate occasion
consumer = weaviate.Consumer("http://localhost:8080")
Der nächste Schritt besteht darin, die Weaviate-Dokumentation aufzunehmen und die Dokumente in Blöcke zu zerlegen. Sie können einen unserer vielen Webseiten-Reader verwenden, um jede Web site selbst zu durchsuchen – aber glücklicherweise sind die heruntergeladenen Dateien bereits im Rezept-Repo verfügbar.
from llama_index.node_parser import SimpleNodeParser
# load the blogs in utilizing the reader
blogs = SimpleDirectoryReader('./information').load_data()
# chunk up the weblog posts into nodes
parser = SimpleNodeParser()
nodes = parser.get_nodes_from_documents(blogs)
Hier verwenden wir den SimpleDirectoryReader, um alle Dokumente aus einem bestimmten Verzeichnis zu laden. Wir nutzen dann unsere SimpleNodeParser
um die Quelldokumente in Knotenobjekte (Textblöcke) aufzuteilen.
Der nächste Schritt besteht darin, 1) a zu definieren WeaviateVectorStore
und 2) mit LlamaIndex einen Vektorindex über diesem Vektorspeicher erstellen.
# assemble vector retailer
vector_store = WeaviateVectorStore(weaviate_client = consumer, index_name="BlogPost", text_key="content material")
# organising the storage for the embeddings
storage_context = StorageContext.from_defaults(vector_store = vector_store)
# arrange the index
index = VectorStoreIndex(nodes, storage_context = storage_context)
Unsere WeaviateVectorStore-Abstraktion schafft eine zentrale Schnittstelle zwischen unseren Datenabstraktionen und dem Weaviate-Dienst. Notiere dass der VectorStoreIndex
wird sowohl von den Knoten als auch vom Speicherkontextobjekt initialisiert, das den Weaviate-Vektorspeicher enthält. Während der Initialisierungsphase werden die Knoten in den Vektorspeicher geladen.
Schließlich können wir zusätzlich zu unserem Index eine Abfrage-Engine definieren. Diese Abfragemaschine führt eine semantische Suche und Antwortsynthese durch und gibt eine Antwort aus.
query_engine = index.as_query_engine()
response = query_engine.question("What's the intersection between LLMs and search?")
print(response)
Sie sollten eine Antwort wie die folgende erhalten:
The intersection between LLMs and search is the power to make use of LLMs to enhance search capabilities, equivalent to retrieval-augmented era, question understanding, index development, LLMs in re-ranking, and search end result compression. LLMs can be used to handle doc updates, rank search outcomes, and compress search outcomes. LLMs can be utilized to immediate the language mannequin to extract or formulate a query based mostly on the immediate after which ship that query to the search engine, or to immediate the mannequin with an outline of the search engine instrument and how one can use it with a particular `[SEARCH]` token. LLMs can be used to immediate the language mannequin to rank search outcomes in response to their relevance with the question, and to categorise the more than likely reply span given a query and textual content passage as enter.
In diesem Blogbeitrag wurde ein erster Überblick über die Integration von LlamaIndex und Weaviate gegeben. Wir haben eine Einführung in die in LlamaIndex angebotenen Toolkits und ein Notizbuch zum Aufbau einer einfachen QA-Engine anhand der Blogbeiträge von Weaviate gegeben. Da wir nun über ein grundlegendes Verständnis verfügen, werden wir darauf aufbauen und bald weiterführende Leitfäden veröffentlichen. Bleiben Sie dran!
Was kommt als nächstes
Kasse Erste Schritte mit Weaviateund beginnen Sie mit der Entwicklung fantastischer Apps mit Weaviate.
Sie erreichen uns unter Locker oder Twitteroder Treten Sie dem Community-Forum bei.
Weaviate ist Open Supply und Sie können das Projekt weiterverfolgen GitHub. Vergessen Sie nicht, uns ein ⭐️ zu geben, während Sie dort sind!