Heim > Technologie-Peripheriegeräte > KI > Bau eines Bhagavad Gita AI -Assistenten

Bau eines Bhagavad Gita AI -Assistenten

尊渡假赌尊渡假赌尊渡假赌
Freigeben: 2025-03-05 11:39:10
Original
898 Leute haben es durchsucht

In der sich schnell entwickelnden Welt der KI überschreiten große Sprachmodelle Grenzen in Geschwindigkeit, Genauigkeit und Kosteneffizienz. Die kürzlich veröffentlichte Veröffentlichung von Deepseek R1, einem Open-Source-Modell, das OpenAs O1 mit sich bringt, ist ein heißes Thema im KI-Bereich, insbesondere angesichts der 27-fachen niedrigeren Kosten und der überlegenen Argumentationsfähigkeiten. Kombinieren Sie dies mit der binären Quantisierung von QDrant für effiziente und schnelle Vektorsuche. Wir können über 1.000 Seitendokumente indexieren. In diesem Artikel erstellen wir einen Bhagavad Gita AI-Assistenten, der in der Lage ist, 1.000 Seiten zu indizieren, komplexe Abfragen in Sekunden mit GRQ zu beantworten und Erkenntnisse mit domänenspezifischer Präzision zu liefern.

Lernziele

  • Binärquantisierung im QDrant für die speichereffiziente Vektorindexierung implementieren.
  • Verstehen Sie, wie Sie einen Assistenten von Bhagavad Gita AI mit Deepseek R1, QDrant und Llamaindex für ein effizientes Textabruf bauen.
  • Lernen Sie, Bhagavad Gita AI-Assistent mit GRQ für schnelle, domänenspezifische Abfragemantworten und großflächige Dokumentenindexierung zu optimieren.
  • Bauen Sie eine Lag -Pipeline mit Lamaindex und Fastembed lokaler Einbettungen, um 1.000 Seiten der Bhagavad Gita zu verarbeiten.
  • Integrieren Sie Deepseek R1 aus der Auslegung von GROQ für Echtzeit-Reaktionen mit geringer Latenz.
  • Entwickeln Sie eine streamlitische Benutzeroberfläche, um KI-angetriebene Erkenntnisse mit Denkanweisungen zu präsentieren.

Dieser Artikel wurde als Teil des Data Science -Blogathon veröffentlicht.

Inhaltsverzeichnis

  • Deepseek r1 gegen OpenAI O1
  • Was ist die binäre Quantisierung in Vektor-Datenbanken?
  • Deepseek R1 gegen OpenAI O1
  • Deepseek R1 stellt die Dominanz von OpenAI mit 27x niedrigeren API-Kosten und nahezu Par-Leistung bei der Argumentation Benchmarks. Im Gegensatz zu OpenAIs geschlossenes, abonnementbasiertes Modell (200 USD pro Monat), Deepseek R1 Isfree, Open-Source und ideal für budgetbewusste Projekte und Experimente.
  • Argumentation-arc-Agi-Benchmark: [Quelle: Arc-Agi Deepseek]
  • Deepseek: 20,5% Genauigkeit (öffentlich), 15,8% (semi-privat).
openai: 21% Genauigkeit (öffentlich), 18% (semi-privat).

Aus meiner bisherigen Erfahrung leistet Deepseek einen großartigen Job mit mathematischen Argumentation, kodierbedingten Anwendungsfällen und kontextbewussten Eingabeaufforderungen.

Was ist die binäre Quantisierung in Vektor -Datenbanken?

Binärquantisierung (BQ) ist die Indexierungskompressionstechnik von QDrant, um die hochdimensionale Speicherung und das Abrufen von Vektoren zu optimieren. Durch die Konvertierung von 32-Bit-Gleitkommavektoren in 1-Bit-Binärwerte wird die Speicherverwendung durch 40X und die Suchgeschwindigkeiten dramatisch beschleunigt.

    wie es funktioniert

    • Binarisierung: Die Vektoren werden auf der Basis eines Schwellenwerts auf 0s und 1 vereinigt (z. B. Werte> 0 werden 1).
    • Effiziente Indizierung: Der HNSW -Algorithmus von QDrant verwendet diese binären Vektoren für schnelle ungefähre Nachbarn (Ann Neighbor Suchvorgänge).
    • Überabtastung: Um Geschwindigkeit und Genauigkeit auszugleichen, holt BQ zusätzliche Kandidaten (z. B. 200 für eine Grenze von 100) und ruft sie mit Originalvektoren erneut ab.

    Warum es zählt

    • Speicher: Ein 1536-Dimension-OpenAI-Vektor schrumpft von 6 KB auf 0,1875 kb.
    • Geschwindigkeit: Boolesche Vorgänge auf 1-Bit-Vektoren führen schneller aus und verringern die Latenz.
    • Skalierbarkeit: Ideal für große Datensätze (1 m Vektoren) mit minimalen Rückruf -Kompromisse.

    Binärquantisierung für die Verschiebungsdimensionsvektoren vermeiden (& lt; 1024), wobei der Informationsverlust die Genauigkeit erheblich beeinflusst. Die traditionelle Skalarquantisierung (z. B. Uint8) kann besser Einbettungen entsprechen.

    Bau des Bhagavad Gita Assistant

    unten ist das Flussdiagramm, das erklärt, wie wir Bhagwad Gita Assistant erstellen können:

    Bau eines Bhagavad Gita AI -Assistenten

    Architekturübersicht

    • Datenaufnahme: 900-seitige Bhagavad Gita PDF in Textbrocken aufgeteilt.
    • Einbettung: QDrant Fastembeds Text-zu-Vektor-Einbettungsmodell.
    • Vektor DB: QDrant mit BQ -Speichern Einbettung, wodurch Millisekundensuche ermöglicht wird.
    • llm Inferenz: Deepseek R1 über COQ LPUs erzeugt kontextbezogene Antworten.
    • UI: Stromlit -App mit erweiterbarem „Denkprozess“ Sichtbarkeit.

    Schritt-für-Schritt-Implementierung

    Befolgen wir nun die Schritte um eins:

    Schritt 1: Installation und Ersteinricht

    Lassen Sie uns das Fundament unserer RAG -Pipeline mit Lamaindex einrichten. Wir müssen essentielle Pakete, einschließlich der Core Lamaindex -Bibliothek, der QDRant Vector Store -Integration, der Fastembed für Einbettungen und GROQ für LLM -Zugriff installieren.

    Hinweis:

    • Für die Dokumentindexierung werden wir eine gpu von Colab verwenden, um die Daten zu speichern. Dies ist ein einmaliger Prozess.
    • Sobald die Daten gespeichert sind, können wir den Sammlungsnamen verwenden, um überall Schlussfolgerungen auszuführen, sei es auf VS -Code, Streamlit oder anderen Plattformen.
!pip install llama-index
!pip install llama-index-vector-stores-qdrant llama-index-embeddings-fastembed
!pip install llama-index-readers-file
!pip install llama-index-llms-groq  
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Importieren wir nach Abschluss der Installation die erforderlichen Module.

import logging
import sys
import os

import qdrant_client
from qdrant_client import models

from llama_index.core import SimpleDirectoryReader
from llama_index.embeddings.fastembed import FastEmbedEmbedding
from llama_index.llms.groq import Groq # deep seek r1 implementation
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Schritt 2: Dokumentverarbeitung und Einbettung

Hier übernehmen wir die entscheidende Aufgabe, Rohtext in Vektordarstellungen umzuwandeln. Der SimpleDirectoryReader lädt Dokumente aus einem angegebenen Ordner.

Erstellen Sie einen Ordner, d. H. Ein Datenverzeichnis, und fügen Sie alle Ihre Dokumente hinzu. In unserem Fall haben wir das Bhagavad Gita -Dokument heruntergeladen und im Datenordner gespeichert.

Sie können das ~ 900-seitige Bhagavad Gita-Dokument hier herunterladen: iskconmangaluru

!pip install llama-index
!pip install llama-index-vector-stores-qdrant llama-index-embeddings-fastembed
!pip install llama-index-readers-file
!pip install llama-index-llms-groq  
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Das Fastembed

QDrant ist eine leichte, schnelle Python -Bibliothek für die effiziente Einbettungserzeugung. Es unterstützt beliebte Textmodelle und verwendet quantisierte Modellgewichte zusammen mit der ONNX -Laufzeit für Inferenz, um eine hohe Leistung ohne starke Abhängigkeiten zu gewährleisten.

Um die Textbrocken in Einbettung umzuwandeln, werden wir das Fastembed von QDrant verwenden. Wir verarbeiten diese in Stapeln von 50 Dokumenten, um den Speicher effizient zu verwalten.

import logging
import sys
import os

import qdrant_client
from qdrant_client import models

from llama_index.core import SimpleDirectoryReader
from llama_index.embeddings.fastembed import FastEmbedEmbedding
from llama_index.llms.groq import Groq # deep seek r1 implementation
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Schritt 3: QDrant -Setup mit binärer Quantisierung

Zeit für den Konfigurieren von QDRant -Client, unsere Vektor -Datenbank, mit optimierten Einstellungen für die Leistung. Wir erstellen eine Sammlung mit dem Namen „Bhagavad-Gita“ mit spezifischen Vektorparametern und ermöglichen eine binäre Quantisierung für eine effiziente Speicherung und Abruf.

Es gibt drei Möglichkeiten, den QDrant -Client zu verwenden:

  • In-Memory-Modus: Verwenden von location = ”: Speicher:”, wodurch eine temporäre Instanz erstellt wird, die nur einmal ausgeführt wird. 
  • localhost: Verwenden von location = ”localhost”, für die eine Docker -Instanz ausgeführt werden muss. Sie können hier dem Setup -Handbuch folgen: QDrant QuickStart. 
  • Cloud -Speicher: Kollektionen in der Cloud speichern. Erstellen Sie dazu einen neuen Cluster, geben Sie einen Clusternamen an und generieren Sie einen API -Schlüssel. Kopieren Sie den Schlüssel und rufen Sie die URL aus dem Befehl curl ab.

Beachten Sie, dass der Sammlungsname eindeutig sein muss, nachdem jede Daten geändert werden müssen.

data = SimpleDirectoryReader("data").load_data()
texts = [doc.text for doc in data]

embeddings = []
BATCH_SIZE = 50
Nach dem Login kopieren
Nach dem Login kopieren

Wir prüfen zuerst, ob eine Sammlung mit dem angegebenen Collection_Name in QDrant vorhanden ist. Wenn dies nicht der Fall ist, erstellen wir nur eine neue Sammlung, die zum Speichern von 1.024-dimensionalen Vektoren konfiguriert ist, und verwenden Cosinus-Ähnlichkeit für die Entfernungsmessung.

Wir ermöglichen einen On-Disk-Speicher für die ursprünglichen Vektoren und wenden eine binäre Quantisierung an, die die Vektoren komprimiert, um die Speicherverwendung zu reduzieren und die Suchgeschwindigkeit zu verbessern. Der Parameter "Always_Ram" stellt sicher, dass die quantisierten Vektoren für einen schnelleren Zugriff im RAM gehalten werden.

embed_model = FastEmbedEmbedding(model_name="thenlper/gte-large")


for page in range(0, len(texts), BATCH_SIZE):
    page_content = texts[page:page + BATCH_SIZE]
    response = embed_model.get_text_embedding_batch(page_content)
    embeddings.extend(response)
Nach dem Login kopieren
Nach dem Login kopieren

Schritt 4: Index das Dokument

Der Indexierungsprozess lädt unsere verarbeiteten Dokumente und ihre Einbettungen in QDrant in Stapeln hoch. Jedes Dokument wird neben seiner Vektordarstellung gespeichert und eine durchsuchbare Wissensbasis erstellt.

Die GPU wird zu diesem Zeitpunkt verwendet, und je nach Datengröße kann dieser Schritt einige Minuten dauern.

collection_name = "bhagavad-gita"

client = qdrant_client.QdrantClient(
    #location=":memory:",
    url = "QDRANT_URL", # replace QDRANT_URL with your endpoint
    api_key = "QDRANT_API_KEY", # replace QDRANT_API_KEY with your API keys
    prefer_grpc=True
)
Nach dem Login kopieren
Nach dem Login kopieren

Schritt 5: Lag -Pipeline mit Deepseek R1

prozess-1: r- relevantes Dokument

abrufen

Die Suchfunktion nimmt eine Benutzerabfrage an, konvertiert sie in eine Einbettung und ruft die relevantesten Dokumente von QDRant basierend auf der Ähnlichkeit von Cosinus ab. Wir demonstrieren dies mit einer Stichprobe-Abfrage über den Bhagavad-Gītā, der zeigen, wie man auf den abgerufenen Kontext zugreift und drucken kann.

!pip install llama-index
!pip install llama-index-vector-stores-qdrant llama-index-embeddings-fastembed
!pip install llama-index-readers-file
!pip install llama-index-llms-groq  
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

prozess-2: Eingabeaufforderung

erhöhen

Für Rag ist es wichtig, die Interaktionsvorlage des Systems mithilfe von ChatpromptTemplate zu definieren. Die Vorlage erstellt einen spezialisierten Assistenten, der in Bhagavad-Gita kennt, in der Lage, mehrere Sprachen zu verstehen (Englisch, Hindi, Sanskrit).

Es enthält eine strukturierte Formatierung für die Kontextinjektion und Abfragehandhabung mit klaren Anweisungen zum Umgang mit außerhalb der Kontext.

import logging
import sys
import os

import qdrant_client
from qdrant_client import models

from llama_index.core import SimpleDirectoryReader
from llama_index.embeddings.fastembed import FastEmbedEmbedding
from llama_index.llms.groq import Groq # deep seek r1 implementation
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

prozess-3: G- Erzeugen Sie die Antwort

Die endgültige Pipeline bringt alles in einem zusammenhängenden Lappensystem zusammen. Es folgt dem Muster der Abruf-Augment-Generate: Abrufen relevanter Dokumente, erweitert sie mit unserer speziellen Eingabeaufforderung und Generierung von Antworten mithilfe des LLM. Hier für LLM werden wir Deepseek R-1 Distill LLAMA 70 B verwenden, die auf GROQ gehostet werden. Holen Sie sich Ihre Schlüssel von hier aus: GROQ-Konsole.

data = SimpleDirectoryReader("data").load_data()
texts = [doc.text for doc in data]

embeddings = []
BATCH_SIZE = 50
Nach dem Login kopieren
Nach dem Login kopieren

Ausgabe: (Syntax: & lt; denken> Argumentation & lt;/dink> Antwort)

Bau eines Bhagavad Gita AI -Assistenten

embed_model = FastEmbedEmbedding(model_name="thenlper/gte-large")


for page in range(0, len(texts), BATCH_SIZE):
    page_content = texts[page:page + BATCH_SIZE]
    response = embed_model.get_text_embedding_batch(page_content)
    embeddings.extend(response)
Nach dem Login kopieren
Nach dem Login kopieren

Bau eines Bhagavad Gita AI -Assistenten

Was ist nun, wenn Sie diese Anwendung erneut verwenden müssen? Sollen wir uns alle Schritte noch einmal unterziehen?

Die Antwort ist nein.

Schritt 6: gespeicherte Index -Inferenz

Es gibt keinen großen Unterschied in dem, was Sie bereits geschrieben haben. Wir werden die gleiche Such- und Pipeline -Funktion zusammen mit dem Sammlungsnamen wiederverwenden, den wir für die Ausführung der query_points ausführen müssen.

collection_name = "bhagavad-gita"

client = qdrant_client.QdrantClient(
    #location=":memory:",
    url = "QDRANT_URL", # replace QDRANT_URL with your endpoint
    api_key = "QDRANT_API_KEY", # replace QDRANT_API_KEY with your API keys
    prefer_grpc=True
)
Nach dem Login kopieren
Nach dem Login kopieren

Wir werden die gleichen oben genannten zwei Funktionen und message_template in der streamlit app.py verwenden. 

Schritt 7: Streamlit UI

In stromloser Nach jeder Benutzerfrage wird der Status aktualisiert. Um die gesamte Seite erneut zu aktualisieren, definieren wir einige Initialisierungsschritte unter streamlit cache_resource.

Denken Sie daran, wenn der Benutzer die Frage eingibt, lädt das Fastembed die Modellgewichte nur einmal herunter, das gilt auch für die Soinierung von COQ und QDrant.

if not client.collection_exists(collection_name=collection_name):
    client.create_collection(
        collection_name=collection_name,
        vectors_config=models.VectorParams(size=1024,
                                           distance=models.Distance.COSINE,
                                           on_disk=True),
        quantization_config=models.BinaryQuantization(
            binary=models.BinaryQuantizationConfig(
                always_ram=True,
            ),
        ),
    )
else:
    print("Collection already exists")
Nach dem Login kopieren

Wenn Sie die Antwortausgabe bemerkt haben, ist das Format & lt; denken & gt; Argumentation & lt;/denken & gt; Antwort.

Auf der Benutzeroberfläche möchte ich die Argumentation unter dem optimistischen Expander behalten, um den Argumentationsteil abzurufen.

for idx in range(0, len(texts), BATCH_SIZE):
    docs = texts[idx:idx + BATCH_SIZE]
    embeds = embeddings[idx:idx + BATCH_SIZE]

    client.upload_collection(collection_name=collection_name,
                                vectors=embeds,
                                payload=[{"context": context} for context in docs])

client.update_collection(collection_name= collection_name,
                        optimizer_config=models.OptimizersConfigDiff(indexing_threshold=20000)) 
Nach dem Login kopieren
Chatbot -Komponente

Initialisiert einen Nachrichtenverlauf im Sitzungsstatus von Streamlit. Mit einer Schaltfläche „Chat klare“ in der Seitenleiste können Benutzer diesen Verlauf zurücksetzen. 

iteriert gespeicherte Nachrichten und zeigt sie in einer Chat-ähnlichen Oberfläche an. Für Assistentenantworten trennt es den Denkprozess (in einem erweiterbaren Abschnitt angezeigt) von der tatsächlichen Antwort unter Verwendung der Funktion extract_tininking_and_answer.

Das verbleibende Code -Stück ist ein Standardformat zum Definieren der Chatbot -Komponente in Streamlit, d. H. Eingabedehnung, das ein Eingabefeld für Benutzerfragen erstellt. Wenn eine Frage eingereicht wird, wird sie angezeigt und dem Nachrichtenverlauf hinzugefügt. Jetzt verarbeitet es die Frage des Benutzers über die RAG -Pipeline und zeigt einen Ladespinner an. Die Antwort wird in den Denkprozess aufgeteilt und beantwortet Komponenten.

!pip install llama-index
!pip install llama-index-vector-stores-qdrant llama-index-embeddings-fastembed
!pip install llama-index-readers-file
!pip install llama-index-llms-groq  
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wichtige Links

  • Sie finden den vollständigen Code
  • Alternative Bhagavad Gita PDF- Download
  • Ersetzen Sie den Platzhalter „& lt; ersetzen-api-ye>“ durch Ihre Schlüssel.

Schlussfolgerung

Durch Kombination der Argumentation von Deepseek R1, der Binärquantisierung von QDrant und Lamaindex haben wir einen AI-Assistenten gebaut, der 1000 Seiten mit 23-Sekunden-Sekunden-Antworten liefert. Dieses Projekt unterstreicht, wie domänenspezifische LLMs und optimierte Vektordatenbanken den Zugriff auf alte Texte demokratisieren und gleichzeitig die Kosteneffizienz beibehalten können. Wenn sich Open-Source-Modelle weiterentwickeln, sind die Möglichkeiten für Nischen-AI-Anwendungen unbegrenzt.

Key Takeaways

  • Deepseek R1-Konkurrenten OpenAI O1 in der Argumentation bei 1/27 die Kosten, ideal für domänenspezifische Aufgaben wie die Schriftanalyse, während OpenAI eine breitere Kenntnisanforderung anspricht.
  • Implementierung von Lag -Pipeline mit nachgewiesenen Code -Beispielen für die Verarbeitung von Dokumenten, die Einbettung der Erzeugung und die Vektorspeicherung mit LamaNDex und QDrant verstehen.
  • Effiziente Vektorspeicheroptimierung durch binäre Quantisierung in QDrant, die Verarbeitung großer Dokumentensammlungen gleichzeitig bei der Aufrechterhaltung der Leistung und Genauigkeit.
  • Implementierung der strukturierten prompt technischen Implementierung mit klaren Vorlagen zum Umgang mit mehrsprachigen Abfragen (Englisch, Hindi, Sanskrit) und der effektiven Verwaltung außerhalb der Kontextfragen.
  • interaktive Benutzeroberfläche mit streamlit, um die Anwendung zu verleiten, die einmal in der Vektordatenbank gespeichert ist.

häufig gestellte Fragen

Q1. Reduziert die Binärquantisierung die Antwortqualität?

a. Minimale Auswirkungen auf den Rückruf! Die Überabtastung von QDrant hat die Top-Kandidaten mit ursprünglichen Vektoren erneut durchführen, die Genauigkeit beibehalten, während die Geschwindigkeit 40x und die Verringerung des Speicherverbrauchs um 97%gesteigert wird.

Q2. Kann der Fastembed nicht englische Texte wie Sanskrit/Hindi?

a. Ja! Die Lag -Pipeline verwendet die Einbettungen von Fastembed und die Sprachflexibilität von Deepseek R1. Benutzerdefinierte Eingabeaufforderungen für die Eingabeaufforderung in Englisch, Hindi oder Sanskrit. Während Sie das Einbettungsmodell verwenden können, das Hindi -Token verstehen kann, verstehen Sie in unserem Fall das verwendete Token Englisch und Hindi -Text. 

Q3. Warum Deepseek R1 über OpenAI O1?

a auswählen. Deepseek R1 bietet 27x niedrigere API-Kosten, vergleichbare Argumentationsgenauigkeit (20,5% gegenüber O1s 21%) und überlegene Codierung/domänenspezifische Leistung. Es ist ideal für spezielle Aufgaben wie die Schriftanalyse, bei denen Kosten und fokussierte Fachwissen wichtig sind.

Die in diesem Artikel gezeigten Medien sind nicht im Besitz von Analytics Vidhya und wird nach Ermessen des Autors verwendet.

Das obige ist der detaillierte Inhalt vonBau eines Bhagavad Gita AI -Assistenten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage