In Fortsetzung des vorherigen Kapitels: Wie erstellt man einen Chatbot mit LlamaIndex?

LlamaIndex ist ein führendes Open-Source-Datenabruf-Framework, das verschiedene Anwendungen nutzen kann. Eine typische Anwendung ist der Aufbau von Chat-Robotern in Unternehmen.

Für Unternehmen wird die Dokumentenverwaltung immer schwieriger, da die Anzahl der Dokumente weiter zunimmt. Daher werden viele Unternehmen Chatbots auf der Grundlage interner Wissensdatenbanken erstellen. Während des Erstellungsprozesses müssen Sie auf drei wichtige Punkte achten: wie Daten ausgeschnitten werden, welche Metadaten gespeichert werden und wie Abfragen weitergeleitet werden.

01. Warum LlamaIndex zum Erstellen eines Chatbots verwenden?

Im vorherigen Artikel haben wir Zilliz Cloud (vollständig verwalteter Milvus-Cloud-Dienst) verwendet, um einen RAG- Chatbot (Basic Retrieval Enhancement Generation) ( https://zilliz.com/use-cases/llm-retrieval-augmented-generation ) zu erstellen. In diesem Tutorial können wir weiterhin die kostenlose Version von Zilliz Cloud verwenden. Sie können auch Ihre eigene Milvus-Instanz ( https://milvus.io/ ) verwenden, um Milvus Lite ( https://milvus.io/ ) schnell zu starten und zu verwenden. ) im Notizbuch. docs/milvus_lite.md ).

Im vorherigen Artikel haben wir den Artikel in viele kleine Textblöcke unterteilt. Wenn eine einfache Suche mit der Frage „Was ist ein großes Sprachmodell?“ durchgeführt wird, ist der zurückgegebene Text ein Textblock, der der Frage semantisch ähnlich ist, die Frage jedoch nicht beantwortet. Daher verwenden wir in diesem Projekt dieselbe Vektordatenbank wie das Backend, verwenden jedoch einen anderen Abrufprozess, um noch bessere Q&A-Ergebnisse zu erzielen. Im Projekt werden wir LlamaIndex verwenden, um einen effizienten Abruf zu erreichen.

LlamaIndex ( https://zilliz.com/product/integrations/Llamaindex ) ist ein Framework, das uns hilft, Daten auf Basis großer Sprachmodelle zu verarbeiten. Eine der Hauptabstraktionen von LlamaIndex ist der „Index“. Ein Index ist ein Modell der Datenverteilung. Auf dieser Basis bietet LlamaIndex auch die Möglichkeit, diese Indizes in Abfrage-Engines umzuwandeln, die große Sprachmodelle und Einbettungsmodelle nutzen, um effiziente Abfragen zu organisieren und relevante Ergebnisse abzurufen.

02. Die Rolle von LlamaIndex und Milvus im Chat Towards Data Science

Wie hilft uns LlamaIndex also bei der Koordinierung des Datenabrufs? Wie hilft Milvus beim Aufbau von Chatbots? Wir können Milvus als Backend für den persistenten Vektorspeicher von LlamaIndex verwenden . Mit einer Milvus- oder Zilliz-Cloud-Instanz können Sie von einer Python-nativen, unkoordinierten Anwendung zu einer LlamaIndex-gesteuerten Abrufanwendung wechseln.

Notebook einrichten, Zilliz und LlamaIndex verwenden

Wie im vorherigen Artikel erwähnt, wird für diese Projektreihe Chat Towards Data Science | Wie erstellt man einen RAG-Chatbot mithilfe einer Wissensdatenbank für persönliche Daten? (Oben) wählen wir Zilliz Cloud. Die Schritte zum Herstellen einer Verbindung mit Zilliz Cloud sind grundsätzlich dieselben wie zum Herstellen einer Verbindung mit Milvus. Informationen zum Herstellen einer Verbindung zu Milvus und zum Speichern von Milvus als lokaler Vektor finden Sie im Beispiel zum Vergleich von Vektoreinbettungen.

Im Notebook müssen wir drei Bibliotheken installieren, pip install llama-index python-dotenv openaisie über installieren und python-dotenvVerwaltungsumgebungsvariablen verwenden.

Nachdem Sie den Import erhalten haben, müssen Sie die Datei load_dotenv()laden . .envDie drei für dieses Projekt erforderlichen Umgebungsvariablen sind der OpenAI-API-Schlüssel, der URI des Zilliz Cloud-Clusters und das Token des Zilliz Cloud-Clusters.

! pip install llama-index python-dotenv openai
import osfrom dotenv import load_dotenv
import openai

load_dotenv()

openai.api_key = os.getenv("OPENAI_API_KEY")

zilliz_uri = os.getenv("ZILLIZ_URI")
zilliz_token = os.getenv("ZILLIZ_TOKEN")

Bringen Sie die vorhandene Sammlung in LlamaIndex ein

Es gibt einige kleinere Herausforderungen beim Einbinden einer vorhandenen Sammlung in LlamaIndex. LlamaIndex verfügt über eigene Strukturen zum Erstellen und Zugreifen auf Vektordatenbanksammlungen, die hier jedoch nicht direkt verwendet werden. Der Hauptunterschied zwischen der nativen LlamaIndex-Vektorspeicherschnittstelle und dem Einbringen Ihres eigenen Modells besteht darin, wie auf den Einbettungsvektor und die Metadaten zugegriffen wird. Um dieses Tutorial zu implementieren, habe ich auch etwas Code geschrieben und ihn zum LlamaIndex- Projekt ( https://github.com/run-llama/llama_index/commit/78ed06c95313e933cc255ac17bcd592e3f4b2be1 ) beigetragen!

LlamaIndex verwendet standardmäßig die Einbettung von OpenAI, wir haben die Einbettung jedoch mithilfe des HuggingFace-Modells generiert. Daher muss das richtige Einbettungsmodell übergeben werden. Darüber hinaus wird dieses Mal ein anderes Feld zum Speichern des Texts verwendet. Wir verwenden „Absatz“, während LlamaIndex standardmäßig „_node_content“ verwendet.

Für diesen Teil müssen vier Module von LlamaIndex importiert werden. Zuerst müssen Sie MilvusVectorStoreMilvus und LlamaIndex verwenden. Wir benötigen außerdem VectorStoreIndexModule, um Milvus als Vektorspeicherindex zu verwenden, und das ServiceContext-Modul, um die Dienste zu übergeben, die wir verwenden möchten. Importieren Sie abschließend HuggingFaceEmbeddingdas Modul, damit Sie das Open-Source-Einbettungsmodell von Hugging Face verwenden können.

Um das Einbettungsmodell zu erhalten, müssen wir lediglich ein HuggingFaceEmbedding-Objekt deklarieren und den Modellnamen übergeben. In diesem Tutorial wird das Modell MiniLM L12 verwendet. Erstellen Sie als Nächstes ein ServiceContext-Objekt, damit das Einbettungsmodell übergeben werden kann.

from llama_index.vector_stores import MilvusVectorStore
from llama_index import VectorStoreIndex, ServiceContext
from llama_index.embeddings import HuggingFaceEmbedding

embed_model = HuggingFaceEmbedding(model_name="sentence-transformers/all-MiniLM-L12-v2")
service_context = ServiceContext.from_defaults(embed_model=embed_model)

Natürlich müssen wir auch eine Verbindung zum Milvus-Vektorspeicher herstellen. In diesem Schritt übergeben wir 5 Parameter: den URI unserer Sammlung, das Token für den Zugriff auf unsere Sammlung, den verwendeten Sammlungsnamen (der Standardwert ist „Llamalection“), den verwendeten Ähnlichkeitstyp und den Schlüssel, der dem Metadatenfeld entspricht, in dem der Text gespeichert ist . .

vdb = MilvusVectorStore(
    uri = zilliz_uri,
    token = zilliz_token,
    collection_name = "tds_articles",
    similarity_metric = "L2",
    text_key="paragraph"
)

Fragen Sie die Milvus-Sammlung mit LlamaIndex ab

Nachdem wir nun eine Verbindung zur vorhandenen Milvus-Sammlung hergestellt und die erforderlichen Modelle abgerufen haben, sprechen wir über die Abfrage.

Erstellen Sie zunächst ein ServiceContext-Objekt, damit Sie die Milvus-Vektordatenbank übergeben können. Konvertieren Sie dann die Milvus-Sammlung in einen Vektorspeicherindex. Hier wird auch das Einbettungsmodell über das oben erstellte ServiceContext-Objekt übergeben.

Nachdem Sie ein Vektorspeicherindexobjekt initialisiert haben, müssen Sie nur noch as_query_engine()eine Funktion aufrufen, um es in eine Abfrage-Engine zu konvertieren. In diesem Tutorial vergleichen wir die direkte semantische Suche mit der Verwendung der LlamaIndex-Abfrage-Engine, indem wir dieselbe Frage wie zuvor verwenden: „Was ist ein großes Sprachmodell?“

vector_index = VectorStoreIndex.from_vector_store(vector_store=vdb, service_context=service_context)
query_engine = vector_index.as_query_engine()
response = query_engine.query("What is a large language model?")

Um die Ausgabe leichter lesbar zu machen, habe ich pprintsie importiert und zum Drucken der Antwort verwendet.

from pprint import pprint
pprint(response)

Unten ist die Antwort, die wir bei der Suche mit LlamaIndex erhalten haben, was viel besser ist als eine einfache semantische Suche:

03. Zusammenfassung

Dieses Mal haben wir LlamaIndex und die vorhandene Milvus-Sammlung verwendet, um den im vorherigen Artikel erstellten Chatbot zu verbessern. Die Vorgängerversion nutzte einfache semantische Ähnlichkeit, um Antworten über die Vektorsuche zu finden, die Ergebnisse waren jedoch nicht sehr gut. Im Vergleich dazu liefert die Verwendung von LlamaIndex zum Aufbau einer Abfrage-Engine bessere Ergebnisse.

Die größte Herausforderung dieses Projekts besteht darin, die bestehende Milvus-Sammlung einzubeziehen. Die vorhandene Sammlung verwendet weder Standardwerte zum Einbetten von Vektordimensionen noch Standardwerte für Metadatenfelder, die zum Speichern von Text verwendet werden. Die Lösung für diese beiden Punkte besteht darin, das spezifische Einbettungsmodell über den ServiceContext zu übergeben und beim Erstellen des Milvus Vector Store-Objekts das richtige Textfeld zu definieren.

Nachdem Sie das Vektorspeicherobjekt erstellt haben, konvertieren Sie es mithilfe der Hugging Face-Einbettung in einen Index und konvertieren Sie den Index dann in die Abfrage-Engine. Abfrage-Engines nutzen LLM, um Fragen zu verstehen, Antworten zu sammeln und bessere Antworten zurückzugeben.

Alibaba Cloud erlitt einen schwerwiegenden Ausfall und alle Produkte waren betroffen (wiederhergestellt). Tumblr hat das russische Betriebssystem Aurora OS 5.0 abgekühlt . Neue Benutzeroberfläche vorgestellt : Delphi 12 & C++ Builder 12, RAD Studio 12. Viele Internetunternehmen stellen dringend Hongmeng-Programmierer ein. UNIX-Zeit steht kurz vor dem Eintritt in die 1,7-Milliarden-Ära (bereits eingetreten). Meituan rekrutiert Truppen und plant die Entwicklung der Hongmeng-System-App. Amazon entwickelt ein Linux-basiertes Betriebssystem, um die Abhängigkeit von Android von .NET 8 unter Linux zu beseitigen. Die unabhängige Größe ist um 50 % reduziert. FFmpeg 6.1 „Heaviside“ ist erschienen
{{o.name}}
{{m.name}}

Supongo que te gusta

Origin my.oschina.net/u/4209276/blog/10140566
Recomendado
Clasificación