Starten Sie Ihr lokales RAG-Setup: Eine Anleitung für Anfänger zur Verwendung von Llama 3 LangChain mit Ollama und Milvus
Mit dem Aufkommen von Open-Source-LLMs wie Llama 3, Mistral, Gemma und anderen ist es offensichtlich geworden, dass große Sprachmodelle (LLMs) auch dann nützlich sein können, wenn sie lokal ausgeführt werden. Dieser Ansatz ist nicht nur praktisch, sondern auch wichtig, da die Kosten bei der Skalierung mit kommerziellen LLMs wie GPT-3 oder GPT-4 in die Höhe schnellen können.
In dieser praktischen Anleitung wird gezeigt, wie man einen Retrieval Augmented Generation (RAG) einsetzt, um einen Frage-Antwort-Chatbot zu erstellen, der Fragen zu bestimmten Informationen beantworten kann. In diesem Setup werden auch Ollama und Llama 3, powered by Milvus als Vektorspeicher verwendet. Eine typische Implementierung beinhaltet die Einrichtung einer Textgenerierungspipeline für Llama 3.
Zu den verschiedenen Werkzeugen, die für die Erstellung dieses Retrieval Augmented Generation (rag) Setup verwendet werden, gehören:
Ollama: Ollama ist ein Open-Source-Tool, das die Verwaltung von Llama 3 auf lokalen Rechnern ermöglicht. Es bringt die Leistung von LLMs auf Ihren Laptop und vereinfacht den lokalen Betrieb.
LangChain: LangChain ist ein Framework, das die Entwicklung von LLM-gestützten Anwendungen vereinfacht. Es ist das, was wir verwenden, um einen Agenten zu erstellen und mit unseren Daten zu interagieren.
ist die Vektordatenbank, die wir verwenden, um Ihre relevanten Daten effizient zu speichern und abzurufen.
[Llama 3] (https://llama.meta.com/llama-downloads) ist ein Open-Source Large Language Model, das von Meta entwickelt wurde und die neueste Iteration einer Reihe von LLMs ist. Es bietet ein komplexes Eingabeaufforderungsformat für Benutzerinteraktionen und unterstützt mehrere Benutzerrollen wie "System", "Benutzer" und "Assistent".
Q&A mit RAG
Wir werden einen hochentwickelten Frage-Antwort-Chatbot (Q&A) mit RAG (Retrieval Augmented Generation) entwickeln. Damit können wir Fragen zu bestimmten Informationen beantworten.
Was genau ist Retrieval Augmented Generation?
RAG, oder Retrieval Augmented Generation, ist eine Technik, die LLMs durch die Integration zusätzlicher Datenquellen verbessert. Eine typische RAG-Anwendung beinhaltet:
- Indizierung - eine Pipeline zur Aufnahme von Daten aus einer Quelle und deren Indizierung, die in der Regel aus dem Laden, Aufteilen und Speichern der Daten in Milvus besteht. Die in Milvus gespeicherten Daten sind die Darstellung der Daten in Form von [Vektoreinbettungen] (https://zilliz.com/glossary/vector-embeddings). Einbettungen erfassen das Wesentliche des Inhalts und ermöglichen im Vergleich zur Stichwortsuche relevantere Suchergebnisse.
Retrieval und Generierung - Retrieval Augmented Generation Systeme verbessern die Qualität der Antworten, indem sie relevanten Kontext aus einer Vektordatenbank abrufen und diesen an ein LLM weitergeben, bevor sie Antworten generieren. Wenn der Kontext gegeben ist, vermeidet das LLM die Erzeugung von Halluzinationen. Genauer gesagt, verarbeitet RAG zur Laufzeit die Anfrage des Benutzers, holt relevante Daten aus dem in Milvus gespeicherten Index und der LLM generiert eine Antwort auf der Grundlage dieses angereicherten Kontexts.
Dieser Leitfaden ist praxisorientiert und zeigt Ihnen, wie lokale LLMs zur Einrichtung einer RAG-Anwendung verwendet werden können. Er ist nicht nur für Experten gedacht - auch Anfänger können einsteigen und ihren eigenen Q&A-Chatbot erstellen. Legen wir los!
Voraussetzungen
Bevor Sie mit der Einrichtung der verschiedenen Komponenten unseres Tutorials beginnen, stellen Sie sicher, dass Ihr System über die folgenden Voraussetzungen verfügt:
- Docker & Docker-Compose - Stellen Sie sicher, dass Docker und Docker-Compose auf Ihrem System installiert sind. Milvus Standalone - Für unsere Zwecke werden wir Milvus Standalone verwenden, das einfach über Docker-Compose verwaltet werden kann; lesen Sie in unserer [Dokumentation] (https://milvus.io/docs/install_standalone-docker-compose.md) nach, wie Sie es installieren. Ollama - Installieren Sie Ollama auf Ihrem System; besuchen Sie deren Website für die neueste Installationsanleitung.
##Langchain-Einrichtung
Sobald Sie alle Voraussetzungen installiert haben, sind Sie bereit, Ihre RAG-Anwendung einzurichten:
- Starten Sie eine Milvus Standalone Instanz mit:
docker-compose up -d. - Dieser Befehl startet Ihre Milvus-Instanz im losgelösten Modus, der leise im Hintergrund läuft.
- Holen Sie ein LLM-Modell mit:
ollama pull <Name_des_Modells>- Anzeigen der Liste der verfügbaren Modelle über ihre Bibliothek
- z.B.
ollama pull llama3
- Dieser Befehl lädt die Standardversion (normalerweise die neueste und kleinste) des Modells herunter.
- Um direkt mit einem Modell von der Kommandozeile aus zu chatten, verwenden Sie
ollama run <Name-des-Modells>
Abhängigkeiten für Vektorspeicher installieren
Um diese Anwendung auszuführen, müssen Sie die Python-Bibliotheken installieren. Sie können entweder Poetry verwenden, wenn Sie den Code auf Github direkt verwenden, oder sie mit pip installieren, wenn Sie dies bevorzugen.
pip install langchain pymilvus ollama pypdf langchainhub langchain-community langchain-experimental
RAG-Anwendung für llm-basierte Anwendungen
Wie bereits erwähnt, ist eine Hauptkomponente von RAG die Indizierung der Daten.
- Beginnen Sie mit dem Einlesen der Daten aus Ihrem PDF mit PyPDFLoader
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader(
"https://d18rn0p25nwr6d.cloudfront.net/CIK-0001813756/975b3e9b-268e-4798-a9e4-2a9a7c92dc10.pdf"
)
Daten = loader.load()
- Aufteilung der Daten
Zerlegen der geladenen Daten in handhabbare Teile unter Verwendung des RecursiveCharacterTextSplitter.
from langchain.text_splitter import RekursiverZeichenTextSplitter
text_splitter = RekursiverZeichenTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)
- Abrufen der Einbettungen und Speichern der Daten in Milvus
Als Nächstes werden die Textdaten mit [Jina AI's Small English embeddings] (https://huggingface.co/jinaai/jina-embeddings-v2-small-en) in Vektoreinbettungen umgewandelt und in Milvus gespeichert.
from langchain_community.embeddings.jina import JinaEmbeddings
from langchain.vectorstores.milvus import Milvus
embeddings = JinaEmbeddings(
jina_api_key=JINA_AI_API_KEY, model_name="jina-embeddings-v2-small-de"
)
vector_store = Milvus.from_documents(documents=all_splits, embedding=embeddings)
- Laden Sie Ihr LLM
Ollama macht es einfach, einen LLM zu laden und lokal zu verwenden. In unserem Beispiel werden wir Llama 3 von Meta verwenden, hier ist, wie man es lädt:
from langchain_community.llms import Ollama
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
llm = Ollama(
model="llama3",
callback_manager=CallbackManager(
[StreamingStdOutCallbackHandler()]
),
stop=["<|eot_id|>"],
)
- Erstellen Sie Ihre QA-Kette mit Langchain
Bauen Sie schließlich Ihre QA-Kette auf, um Benutzeranfragen zu verarbeiten und zu beantworten:
from langchain importiere Hub
from langchain.chains import RetrievalQA
query = input("\nQuery: ")
prompt = hub.pull("rlm/rag-prompt")
qa_chain = RetrievalQA.from_chain_type(
llm, retriever=vectorstore.as_retriever(), chain_type_kwargs={"prompt": prompt}
)
ergebnis = qa_chain({"abfrage": abfrage})
print(result)
Starten Sie Ihre Anwendung
Führen Sie Ihre RAG-Anwendung anhand der letzten Zelle mit der Ergebnisvariablen aus.
Führen Sie Ihre RAG-Anwendung aus, indem Sie sie ausführen:
python rag_ollama.py
Beispiel für eine QA-Interaktion:
Abfrage: Worum geht es in diesem Dokument?
Bei dem Dokument scheint es sich um eine 104 Cover Page Interactive Data File für eine SEC-Einreichung zu handeln. Es enthält Informationen über die Jahresabschlüsse und Zertifizierungen des Unternehmens.{'query': 'What is this document about?', 'result': "Das Dokument scheint eine interaktive 104-Deckblatt-Datendatei für eine SEC-Einreichung zu sein. Es enthält Informationen über die Jahresabschlüsse und Zertifizierungen des Unternehmens."}
Und da haben Sie es! Sie haben soeben ein ausgeklügeltes lokales LLM unter Verwendung von Ollama mit Llama 3, Langchain und Milvus eingerichtet. Dieser Aufbau ermöglicht nicht nur die effiziente Bearbeitung großer Datenmengen, sondern auch ein sehr reaktionsschnelles lokales Frage-Antwort-System.
Schauen Sie sich [Milvus] (https://zilliz.com/what-is-milvus) und den Code auf [Github] (https://github.com/stephen37/ollama_local_rag) an, und teilen Sie Ihre Erfahrungen mit der Community, indem Sie unserem [Discord] (https://discord.gg/FG6hMJStWu) beitreten.
Rekapitulation des abgerufenen Kontexts
Dieser Leitfaden bietet einen Leitfaden für die Einrichtung einer Retrieval Augmented Generation (RAG)-Anwendung unter Verwendung lokaler Large Language Models (LLMs). Durch den Einsatz von Tools wie Ollama, Llama 3, LangChain und Milvus haben wir gezeigt, wie man einen leistungsstarken Frage-Antwort-Chatbot erstellt, der in der Lage ist, spezifische Informationsanfragen mit abgerufenem Kontext aus einem Vektorspeicher zu bearbeiten.
Zu den wichtigsten Erkenntnissen gehören:
Überblick über RAG: RAG erweitert die LLM-Fähigkeiten durch die Integration externer Datenquellen. Es umfasst die Indizierung von Daten in Vektoreinbettungen mit Milvus und die Abfrage von relevantem Kontext während der Abfrageverarbeitung, um genaue und fundierte Antworten zu generieren.
Highlights der Werkzeuge:
Ollama vereinfacht die lokale Verwaltung und Ausführung von Llama 3-Modellen.
LangChain bietet einen intuitiven Rahmen für die Entwicklung von LLM-basierten Anwendungen.
Milvus als Vektorspeicher speichert und ruft [vektorisierte Daten] (https://zilliz.com/learn/an-ultimate-guide-to-vectorizing-structured-data) effizient ab und ermöglicht eine präzise Abfrageverarbeitung.
Llama 3, entwickelt von Meta, unterstützt fortgeschrittene Funktionalität mit Funktionen wie Multi-Rollen-Interaktionen und anpassbare Systemaufforderungen.
Der Einrichtungsprozess umfasste wesentliche Schritte:
Voraussetzungen: Installation von Docker, Milvus Standalone, Ollama und den erforderlichen Python-Bibliotheken.
Indexierung von Daten: Verwendung von Tools wie PyPDFLoader und RecursiveCharacterTextSplitter zum Laden, Aufteilen und Vektorisieren von Daten.
Einbettungsspeicher: Konvertierung von [Text in Einbettungen] (https://zilliz.com/ai-models/text-embedding-3-small) mit dem Jina AI-Modell und Speicherung im Milvus-Vektorspeicher.
Aufbau einer QA-Kette: Integration des Vektorspeichers mit Llama 3 über LangChain, Konfiguration eines maßgeschneiderten Systemprompts zur Verarbeitung und Beantwortung von Benutzeranfragen.
Wenn die Anwendung ausgeführt wird, können die Benutzer mit ihrem lokalen Chatbot interagieren, um genaue, kontextbezogene Antworten aus bestimmten Datensätzen abzurufen. Sobald die relevanten Dokumente abgerufen sind, werden sie an den LLM weitergeleitet, um Antworten zu generieren - eine bewährte und effektive Methode. In dem Leitfaden wurde besonderer Wert auf Praktikabilität gelegt, so dass er sowohl für Anfänger als auch für Experten zugänglich ist. Denken Sie daran, dass für eine optimale Abfrage die Parameter je nach den Besonderheiten der Anwendung feinabgestimmt werden müssen.
Angesichts der wachsenden Bedeutung von Open-Source-LLMs zeigt dieses Setup, wie lokalisierte Implementierungen die Kosten senken, die Sicherheit verbessern und skalierbare Lösungen für [Information Retrieval] (https://zilliz.com/learn/what-is-information-retrieval) und die Generierung von Informationen bieten. Erkunden Sie das GitHub-Repository und treten Sie unserer Discord-Community bei, um Ihre Erfahrungen und Erkenntnisse zu teilen!
Weiterlesen

How to Build an Enterprise-Ready RAG Pipeline on AWS with Bedrock, Zilliz Cloud, and LangChain
Build production-ready enterprise RAG with AWS Bedrock, Nova models, Zilliz Cloud, and LangChain. Complete tutorial with deployable code.

Build for the Boom: Why AI Agent Startups Should Build Scalable Infrastructure Early
Explore strategies for developing AI agents that can handle rapid growth. Don't let inadequate systems undermine your success during critical breakthrough moments.

Vector Databases vs. NoSQL Databases
Use a vector database for AI-powered similarity search; use NoSQL databases for flexibility, scalability, and diverse non-relational data storage needs.
