Erstellen einer RAG-Anwendung mit Milvus und Databricks DBRX
Einführung
Large Language Models (LLMs) entwickeln sich weiterhin schnell, und regelmäßig werden neue Modelle mit verbesserten Fähigkeiten im Vergleich zu früheren Versionen veröffentlicht. Im März 2024 veröffentlichte Databricks, eine führende Datenplattform, sein erstes Open-Source-Modell, DBRX, ein neues hochmodernes Modell mit einer feingranularen Mixture-of-Experts (MoE)-Architektur. Dieses transformerbasierte Decoder-only-Modell hat mehrere Benchmarks wie MMLU, Programming (HumanEval) und Math (GSM8K) übertroffen.
Die Integration von DBRX in reale Anwendungen hat neue Möglichkeiten für den Aufbau leistungsstarker GenAI-Apps eröffnet, wie etwa Retrieval Augmented Generation (RAG)-Systeme. Diese Systeme kombinieren das kontextuelle Verständnis von LLMs mit effizienten Mechanismen zum Informationsabruf, um selbst bei komplexen Anfragen hochpräzise und kontextuell relevante Antworten zu liefern.
In diesem Tutorial werden wir untersuchen, wie man eine robuste RAG-Anwendung erstellt, indem man die Fähigkeiten von Milvus, einer skalierbaren Vektordatenbank, die für Ähnlichkeitssuche optimiert ist, und DBRX kombiniert. Milvus ermöglicht die effiziente Handhabung und Abfrage großskaliger Embeddings, während DBRX modernste Fähigkeiten in der Verarbeitung natürlicher Sprache (NLP) bereitstellt. Gemeinsam schaffen sie eine Synergie, die ideal für Anwendungen wie Wissensmanagement, Kundensupport und personalisierte Empfehlungen ist.
Springen Sie zu dem, was Sie am meisten interessiert:
RAG verstehen
Einführung in Milvus
Einführung in Databricks DBRX
Einführung in die MoE-Architektur
RAG mit Milvus und DBRX erstellen: Eine Schritt-für-Schritt-Anleitung
Retrieval Augmented Generation (RAG) verstehen
Retrieval Augmented Generation (RAG) ist ein hybrider Ansatz, der die Leistung von LLMs verbessert, indem externe Informationsabrufsysteme integriert werden. Traditionelle LLMs verlassen sich ausschließlich auf ihr vortrainiertes Wissen und Fine-Tuning, um Antworten zu generieren, was ihre Wirksamkeit einschränken kann, wenn sie mit Anfragen konfrontiert werden, die aktuelle oder domänenspezifische Informationen erfordern. RAG adressiert diese Einschränkung, indem es während der Inferenz einen Abrufmechanismus einbindet, der relevanten Kontext oder Daten aus einer externen Quelle abruft, beispielsweise aus einer Vektordatenbank oder einem Dokumenten-Repository.
Ein RAG-System besteht typischerweise aus zwei Schlüsselkomponenten:
Retriever: Diese Komponente ist dafür verantwortlich, relevante Informationen aus einem großen Korpus oder einer Datenbank basierend auf der Anfrage oder Eingabe abzurufen. Durch die Umwandlung textueller Daten in Embeddings ermöglicht der Retriever semantische Suche, nutzt Vektordatenbanken, wie Milvus oder Zilliz, als Speichersysteme für Wissensdatenbanken und identifiziert effizient die relevantesten Informationsteile.
Generator: Unter Verwendung des abgerufenen Kontexts als Eingabe generiert das LLM eine Antwort, die sowohl durch die externen Daten informiert als auch mit der Eingabeanfrage kohärent ist. Dadurch wird sichergestellt, dass die Antworten nicht nur präzise sind, sondern auch auf den relevantesten und aktuellsten Informationen basieren.
RAG-Architektur
Abbildung 1: RAG-Architektur
Durch die Kombination von Retrieval und Generierung können RAG-Systeme Antworten erzeugen, die genauer, kontextbewusster und faktisch fundierter sind, was sie in Anwendungsfällen wie den folgenden äußerst wertvoll macht:
Abfragen von Wissensdatenbanken: Bereitstellung detaillierter und präziser Antworten aus großen, unstrukturierten Datensätzen.
Kundensupport: Lieferung personalisierter und präziser Antworten durch Bezugnahme auf spezifische Wissensdatenbanken.
Content-Erstellung: Unterstützung beim kreativen oder technischen Schreiben durch Beschaffung kontextuell relevanter Informationen.
Wissenschaftliche Forschung: Zusammenfassung von Forschungsergebnissen oder Beantwortung domänenspezifischer Anfragen durch Abruf aus wissenschaftlichen Arbeiten oder Datenbanken.
Milvus Vector Database
Milvus ist eine Open-Source-Vektordatenbank, die darauf ausgelegt ist, großskalige Vektor-Embeddings effizient zu verwalten, zu speichern und abzufragen. Sie wird häufig in Anwendungen eingesetzt, die Ähnlichkeitssuche und semantisches Retrieval erfordern, wie etwa Retrieval-Augmented-Generation-(RAG)-Pipelines, Empfehlungssysteme, Chatbots, semantische Suchmaschinen usw.
Warum ist Milvus ideal für RAG-Systeme?
In RAG-Systemen fungiert eine Vektordatenbank wie Milvus als Rückgrat der Retriever-Komponente. So fügt sie sich in die Architektur ein:
Effiziente Speicherung: Milvus kann hochdimensionale Embeddings im Milliardenmaßstab speichern, die aus textuellen oder multimodalen Daten generiert wurden, und ermöglicht so eine kompakte und effiziente Darstellung riesiger Wissensdatenbanken.
Schnelles Retrieval: Wenn eine Anfrage in das System eingegeben wird, führt Milvus eine semantische Suche durch, um die relevantesten Embeddings abzurufen, die anschließend verwendet werden, um dem Generator-Modell Kontext bereitzustellen.
Skalierbarkeit: Milvus stellt sicher, dass der Retrieval-Prozess auch bei wachsender Größe der Wissensdatenbank leistungsfähig bleibt, sodass RAG-Systeme auf Unternehmensanforderungen skalieren können.
Einführung in DBRX
DBRX ist das neue LLM von Databricks, das im März 2024 als erster Open-Source-Beitrag des Unternehmens zum wachsenden Ökosystem fortschrittlicher KI-Technologien veröffentlicht wurde. Es ist in zwei Versionen erhältlich: dem Basismodell (DBRX Base) und dem feinabgestimmten Modell (DBRX Instruct). DBRX basiert auf einer transformerbasierten Decoder-only-Architektur und nutzt ein feingranulares Mixture-of-Experts-(MoE)-Design, das es von vielen bestehenden Modellen abhebt. Diese innovative Architektur ermöglicht es DBRX, Rechenressourcen dynamisch verschiedenen Aufgaben oder Anfragen zuzuweisen, wodurch es äußerst effizient und anpassungsfähig für verschiedene Anwendungsfälle ist. Bevor wir tiefer in DBRX eintauchen, lernen wir einige Grundlagen der Mixture of Expert (MoE) Architektur kennen.
Mixture-of-Experts-(MoE)-Architektur
Die Mixture of Experts ist eine neural network-Architektur, die Rechenlasten auf mehrere spezialisierte Teilmodelle oder „Experten“ verteilt. Im Gegensatz zu traditionellen Modellen, die während der Inferenz alle Schichten und Parameter einheitlich aktivieren, wählt und aktiviert MoE dynamisch nur eine Teilmenge der Experten, die für eine gegebene Eingabe am relevantesten sind. Diese selektive Aktivierung führt sowohl zu Effizienz als auch zu Spezialisierung.
Die MoE-Architektur umfasst die folgenden Schlüsselkomponenten:
Expertennetzwerke: Mehrere neuronale Netzwerkmodule, die jeweils darauf trainiert sind, sich auf unterschiedliche Arten von Eingaben oder Aufgaben zu spezialisieren. Diese Experten entwickeln einzigartige Fähigkeiten zur Verarbeitung bestimmter Datendomänen oder zur Lösung bestimmter Problemtypen.
Router-Mechanismus: Ein ausgeklügelter Gating-Mechanismus wählt und aktiviert dynamisch die am besten geeigneten Experten für eine gegebene Eingabe. Dieses Routing-System verwendet lernbare Parameter, um zu bestimmen, welche Experten für eine gegebene Aufgabe am relevantesten sind.
Sparse Aktivierung: Aktiviert nur eine Teilmenge von Experten für jede Eingabe, wodurch die Rechenkomplexität drastisch reduziert wird, während eine hohe Leistung erhalten bleibt. Dieser Ansatz stellt sicher, dass nicht alle Modellparameter gleichzeitig einbezogen werden.
Abbildung 2: Mixture-of-Experts-(MoE)-Schicht
Abbildung 2: Mixture-of-Experts-(MoE)-Schicht | Quelle
Die MoE-Architektur hat verschiedene Vorteile, darunter:
Recheneffizienz: Aktiviert nur eine Teilmenge von Experten für jede Eingabe und reduziert so die gesamten Rechenanforderungen.
Tiefe Spezialisierung: Ermöglicht es einzelnen Expertennetzwerken, hoch fokussierte Fähigkeiten zu entwickeln.
Skalierbare Architektur: Ermöglicht eine einfachere Erweiterung der Modellfähigkeiten durch das Hinzufügen weiterer Experten.
Dynamische Ressourcenzuweisung: Leitet Eingaben intelligent an die am besten geeigneten Rechenressourcen weiter.
Zentrale Vorteile von DBRX
DBRX hat in wichtigen Benchmarks hervorragende Ergebnisse erzielt:
MMLU (Massive Multitask Language Understanding): Demonstriert sein breites Allgemeinwissen und seine Fähigkeiten zum logischen Schließen.
Programmieraufgaben (HumanEval): Zeichnet sich beim Generieren und Verstehen von Code aus und ist damit ideal für die Unterstützung bei der Softwareentwicklung.
Matheaufgaben (GSM8K): Zeigt eine starke Eignung beim Lösen komplexer mathematischer Probleme.
Abbildung 3: DBRX-Benchmarks
Abbildung 3: DBRX-Benchmarks (Quelle)
Skalierbarkeit und Effizienz:
DBRX ist dank seines MoE-Designs, das eine hohe Geschwindigkeit in Bezug auf pro Sekunde verarbeitete Tokens gewährleistet, sowohl für groß angelegte Bereitstellungen als auch für ressourcenbeschränkte Umgebungen optimiert.
Seine Skalierbarkeit gewährleistet die Eignung für eine breite Palette von Anwendungen, von Systemen auf Unternehmensniveau bis hin zu kleineren, domänenspezifischen Setups.
Abbildung 4: DBRX-Inferenz
Abbildung 4: DBRX-Inferenz (Quelle)
Open-Source-Zugänglichkeit:
Als Open-Source-Modell ermöglicht DBRX Entwicklern und Organisationen, zu experimentieren, anzupassen und zu innovieren, ohne an proprietäre Ökosysteme gebunden zu sein.
Die Transparenz seiner Entwicklung fördert einen community-getriebenen Ansatz zur Modellverbesserung und Integration.
DBRX in RAG-Systemen
DBRX eignet sich aufgrund seiner Fähigkeit, kontextuell genaue und kohärente Antworten auf der Grundlage abgerufener Informationen zu generieren, gut für Retrieval-Augmented-Generation-(RAG)-Systeme. Zu den wichtigsten Vorteilen gehören:
Kontextuelle Anpassungsfähigkeit: DBRX integriert abgerufenen Kontext nahtlos in seine generativen Ausgaben und stellt sicher, dass Antworten hochrelevant und spezifisch für die Anfrage sind.
Domänenspezifisches Fine-Tuning: Während DBRX bereits out-of-the-box außergewöhnlich gut funktioniert, kann es auch mit domänenspezifischen Daten feinabgestimmt werden, um seine Genauigkeit und Relevanz für spezialisierte Anwendungen weiter zu verbessern.
Effizienz bei komplexen Aufgaben:.Mit seiner MoE-Architektur kann DBRX komplexe, vielschichtige Anfragen bewältigen, indem es seine spezialisierten Experten effizient nutzt, was es ideal für anspruchsvolle RAG-Systeme macht.
RAG-Anwendung mit Milvus und DBRX
Dieses Notebook-Tutorial demonstriert, wie eine Retrieval-Augmented-Generation-(RAG)-Pipeline mit Milvus als Vektorspeicher, DBRX als Sprachmodell und LangChain als Framework implementiert wird. Angesichts der Größe des Modells nutzt diese Implementierung einen Serving-Endpunkt eines Databricks-Workspace. Alternativ kann das Modell über Ollama oder die Hugging Face Transformers-Bibliothek heruntergeladen werden, erfordert jedoch eine Hochleistungs-GPU.
Schritt 1: Daten laden
Die Datenquelle für dieses Tutorial ist der offizielle Databricks DBRX-Release-Blog. Das Dokument wird geladen und mithilfe einer rekursiven Textaufteilungsmethode in handhabbare Abschnitte aufgeteilt.
# Load and split the documents
loader = WebBaseLoader("https://www.databricks.com/blog/introducing-dbrx-new-state-art-open-llm")
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=200)
docs = text_splitter.split_documents(documents)
Schritt 2: Embeddings laden
Als Nächstes verwenden wir Open-Source-Embeddings von Hugging Face, um den Dokumentinhalt für Retrieval-Zwecke zu kodieren.
# Load embeddings
embeddings = HuggingFaceBgeEmbeddings(
model_name = "BAAI/bge-small-en-v1.5")
Schritt 3: Milvus Retriever erstellen
Milvus wird als Vektorspeicher konfiguriert und ermöglicht effiziente Ähnlichkeitssuchen. Nach der Einrichtung wird der Retriever mit einer Beispielabfrage getestet.
# Create Milvus Retriever
vectorstore = Milvus.from_documents(documents=docs,
embedding=embeddings,
collection_name='my_collection',
connection_args={
"uri": "./milvus_demo.db"}
)
retriever = vectorstore.as_retriever()
# Test retriever
query = "What is DBRX?"
vectorstore.similarity_search(query, k=1)
```
Output:
[Document(metadata={'description': '', 'language': 'en-US', 'pk': 454492864071335939, 'source': 'https://www.databricks.com/blog/introducing-dbrx-new-state-art-open-llm', 'title': 'Introducing DBRX: A New State-of-the-Art Open LLM | Databricks Blog'}, page_content='and GPT-3.5 Turbo on RAG tasks.Training mixture-of-experts models is hard. We had to overcome a variety of scientific and performance challenges to build a pipeline robust enough
```
Schritt 4: RAG-Pipeline implementieren
Die RAG-Pipeline integriert das Databricks DBRX-Modell für Question-Answering-Aufgaben. Um das Modell außerhalb eines Databricks-Arbeitsbereichs zu verwenden, müssen Sie die Databricks Host-URL und das Token festlegen. Die Pipeline enthält außerdem eine Prompt-Vorlage für prägnante und kontextspezifische Antworten.
# Load environment variables
DATABRICKS_HOST = userdata.get('DATABRICKS_HOST')
DATABRICKS_TOKEN = userdata.get('DATABRICKS_TOKEN')
# Set RAG pipeline with Databricks DBRX
llm = ChatDatabricks(endpoint="dbrx-instruct",
max_tokens=200)
PROMPT_TEMPLATE = """
Human: You are an AI assistant,that provides answers to questions related to Databricks.
Use the following pieces of information to provide a concise answer to the question enclosed in <question> tags.
If you don't know the answer, just say that you don't know, don't try to make up an answer.
<context>
{context}
</context>
<question>
{question}
</question>
The response should be specific and use only reliable Databricks information.
Assistant:"""
prompt = PromptTemplate(
template=PROMPT_TEMPLATE, input_variables=["context", "question"]
)
def format_docs(docs):
return "nn".join(doc.page_content for doc in docs)
Schließlich wird die RAG-Chain erstellt, um den Retrieval- und Generierungsprozess zu handhaben. Die Chain verarbeitet Abfragen mithilfe des Retrievers, formatiert die Ergebnisse und generiert Antworten mit dem DBRX-Modell.
# Define the RAG (Retrieval-Augmented Generation) chain
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
res = rag_chain.invoke(query)
res
```
Output:
'DBRX ist ein transformerbasiertes, nur decoderbasiertes Large Language Model (LLM), das mithilfe von Next-Token Prediction trainiert wurde. Es verwendet eine feingranulare Mixture-of-Experts-(MoE)-Architektur mit insgesamt 132 Mrd. Parametern, von denen 36 Mrd. Parameter für jede gegebene Eingabe aktiv sind. DBRX wurde auf 12 Bio. Tokens aus Text- und Code-Daten vortrainiert und verwendet Rotary Position Encodings (RoPE), Gated Linear Units (GLU) und Grouped Query Attention (GQA). Es verwendet außerdem den GPT-4-Tokenizer. DBRX ist für seine Effizienz bekannt, wobei die Inferenz bis zu 2x schneller ist als bei LLaMA2-70B, und es hat sowohl hinsichtlich der Gesamtzahl als auch der aktiven Parameteranzahl etwa 40 % der Größe von Grok-1. Es übertrifft GPT-3.5 und ist mit Gemini 1.0 Pro konkurrenzfähig; zudem ist es besonders leistungsfähig als Code-Modell und übertrifft spezialisierte Modelle wie CodeLLaMA-70B bei Programmieraufgaben.'
```
Dieses Tutorial ist im folgenden Notebook zu finden.
Fazit
Die Kombination aus der innovativen Mixture-of-Experts-(MoE)-Architektur von DBRX und der skalierbaren Vektordatenbank von Milvus schafft eine robuste Grundlage für den Aufbau intelligenter, kontextbewusster KI-Systeme. Das feingranulare MoE-Design von DBRX ermöglicht es, sich dynamisch an vielfältige Aufgaben anzupassen, wodurch rechnerische Effizienz und außergewöhnliche Leistung über eine Vielzahl von Anwendungsfällen hinweg gewährleistet werden. Diese Fähigkeit ist besonders wichtig in Retrieval Augmented Generation (RAG)-Systemen, in denen die Fähigkeit, kontextuell genaue und domänenspezifische Antworten zu generieren, von größter Bedeutung ist.
Milvus ergänzt diese Architektur, indem es RAG-Systemen ermöglicht, massive Wissensdatenbanken problemlos zu handhaben. Diese Kombination stärkt Anwendungen in Bereichen wie Wissensmanagement, Kundensupport, Inhaltserstellung und wissenschaftlicher Forschung und liefert relevante Ergebnisse, die auf den genauesten und aktuellsten Informationen basieren. Für Entwickler und Organisationen stellt dies einen technologischen Fortschritt und eine Gelegenheit dar, intelligentere, reaktionsfähigere und kontextbewusstere Systeme zu entwickeln.
Verwandte Ressourcen
Weiterlesen

Zilliz Cloud Launches in AWS Australia, Expanding Global Reach to Australia and Neighboring Markets
We're thrilled to announce that Zilliz Cloud is now available in the AWS Sydney, Australia region (ap-southeast-2).

Zilliz Named "Highest Performer" and "Easiest to Use" in G2's Summer 2025 Grid® Report for Vector Databases
Zilliz shines in G2's Summer 2025 Grid® Report as both "Highest Performer" and "Easiest to Use," solving the performance-usability dilemma.

How to Build RAG with Milvus, QwQ-32B and Ollama
Hands-on tutorial on how to create a streamlined, powerful RAG pipeline that balances efficiency, accuracy, and scalability using the QwQ-32B and Milvus.



