Maison > Périphériques technologiques > IA > Construire un assistant Bhagavad Gita AI

Construire un assistant Bhagavad Gita AI

尊渡假赌尊渡假赌尊渡假赌
Libérer: 2025-03-05 11:39:10
original
898 Les gens l'ont consulté

Dans le monde en évolution rapide de l'IA, les modèles de grandes langues repoussent les limites de vitesse, de précision et de rentabilité. La récente version de Deepseek R1, un modèle open source rivalisant avec O1 d'Openai, est un sujet brûlant dans l'espace d'IA, en particulier compte tenu de ses capacités de 27x plus faibles et de raisonnement supérieur. Associez-le à la quantification binaire de QDRANT pour des recherches de vecteurs efficaces et rapides, nous pouvons indexer plus de 1 000 pages de documents. Dans cet article, nous créerons un assistant Bhagavad Gita AI, capable d'indexer 1 000 pages, de répondre aux requêtes complexes en secondes en utilisant GROQ et de fournir des informations avec une précision spécifique au domaine.

Objectifs d'apprentissage

  • Implémentez la quantification binaire dans QDRANT pour l'indexation des vecteurs économe en mémoire.
  • Comprendre comment construire un assistant Bhagavad Gita AI en utilisant Deepseek R1, Qdrant et Llamaindex pour une récupération efficace de texte.
  • Apprenez à optimiser l'assistant Bhagavad Gita AI avec GROQ pour des réponses de requête rapides et spécifiques au domaine et l'indexation de documents à grande échelle.
  • Construisez un pipeline de chiffons à l'aide de Llamaindex et des intégres locaux fast-ced pour traiter 1 000 pages de la Bhagavad Gita.
  • Intégrer la profondeur R1 de l'inférence de Groq pour les réponses en temps réel et à faible latence.
  • Développer une interface utilisateur rationalisée pour présenter des informations alimentées par l'IA avec la transparence pensée.

Cet article a été publié dans le cadre du Data Science Blogathon.

Table des matières

  • Deepseek R1 vs openai o1
  • Qu'est-ce que la quantification binaire dans les bases de données vectorielles?
  • Création de la mise en œuvre de Bhagavad Gita
  • Fréquemment des questions
  • Conclusion
  • Deepseek R1 vs Openai O1
Deepseek R1 remet en question la domination d'Openai avec 27x coûts API inférieurs et les performances quasi par les parties sur les références de raisonnement. Contrairement à l'O1 O1, le modèle basé sur l'abonnement (200 $ / mois), Deepseek R1 ISFREE, open-source et idéal pour les projets et l'expérimentation soucieux du budget.

Raisonnement - ARC-AGI Benchmark: [Source: Arc-Agi Deepseek]

Deepseek: 20,5% de précision (public), 15,8% (semi-privé).

    OpenAI: 21% de précision (public), 18% (semi-privé).
  • D'après mon expérience jusqu'à présent, Deepseek fait un excellent travail avec le raisonnement mathématique, les cas d'utilisation liés au codage et les invites au contexte. Encore une fois, Openai conserve une largeur de connaissances ingénérales, ce qui le rend préférable pour les applications de facture.
Qu'est-ce que la quantification binaire dans les bases de données vectorielles?

La quantification binaire (BQ) est la technique de compression d'indexation de QDRANT pour optimiser le stockage et la récupération des vecteurs à haute dimension. En convertissant les vecteurs à virgule flottante 32 bits en valeurs binaires 1 bits, il réduit considérablement l'utilisation de la mémoire par 40x et accélèrent considérablement les vitesses de recherche.

comment cela fonctionne

  • Binarisation: les vecteurs sont simplifiés en 0 et 1 sur la base d'un seuil (par exemple, les valeurs> 0 deviennent 1).
  • Indexation efficace: l'algorithme HNSW de QDRANT utilise ces vecteurs binaires pour les recherches rapides de voisin (Ann) les plus proches.
  • Overs-échantillonnage: Pour équilibrer la vitesse et la précision, BQ récupère les candidats supplémentaires (par exemple, 200 pour une limite de 100) et les reconstitue en utilisant des vecteurs d'origine.

pourquoi c'est important

  • Stockage: un vecteur Openai de 1536 dimension se rétrécit de 6Ko à 0,1875 kb.
  • vitesse: les opérations booléennes sur les vecteurs 1 bits exécutent plus rapidement, réduisant la latence.
  • Évolutivité: idéal pour les grands ensembles de données (vecteurs 1M) avec des compromis de rappel minimaux.

Évitez les vecteurs de diffusion de diffusion binaire (& lt; 1024), où la perte d'informations a un impact significatif sur la précision. La quantification scalaire traditionnelle (par exemple, Uint8) peut convenir mieux à des intérêts plus petits.

Construire l'assistant Bhagavad Gita

Vous trouverez ci-dessous le graphique de flux qui explique comment nous pouvons construire Bhagwad Gita Assistant:

Construire un assistant Bhagavad Gita AI

Présentation de l'architecture

  • Ingestion de données: 900 pages Bhagavad Gita PDF divisé en morceaux de texte.
  • Incorporer: le modèle d'intégration de texte à vecteur de QDrant FityMed.
  • Vector DB: QDrant avec BQ Stores Incorpings, permettant des recherches en millisecondes.
  • LLM Inférence: Deepseek R1 via des LPU GROQ génère des réponses au contexte.
  • ui: rational application avec une visibilité extensible du «processus de réflexion».

Implémentation étape par étape

Suivons maintenant les étapes par un:

Step1: installation et configuration initiale

Configurons les bases de notre pipeline de chiffons à l'aide de Llamaindex. Nous devons installer des packages essentiels, notamment la bibliothèque Core Llamaindex, l'intégration du magasin vectoriel QDRANT, le FastMed pour les intégres et le graphiste pour l'accès LLM.

Remarque:

  • Pour l'indexation des documents, nous utiliserons un gpu de Colab pour stocker les données. Il s'agit d'un processus unique.
  • Une fois les données enregistrées, nous pouvons utiliser le nom de la collection pour exécuter des inférences n'importe où, que ce soit sur le code vs, le rationalisation ou d'autres plates-formes.
!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  
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Une fois l'installation terminée, importons les modules requis.

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
Copier après la connexion
Copier après la connexion
Copier après la connexion

Step2: Traitement des documents et intégration

Ici, nous gérons la tâche cruciale de convertir le texte brut en représentations vectorielles. Le facmectoryreader charge les documents d'un dossier spécifié.

Créez un dossier, c'est-à-dire un répertoire de données, et ajoutez tous vos documents à l'intérieur. Dans notre cas, nous avons téléchargé le document Bhagavad Gita et l'avons enregistré dans le dossier de données.

Vous pouvez télécharger le document Bhagavad Gita ~ 900 pages ici: 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  
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Le FastMed de Qdrant est une bibliothèque Python rapide et rapide conçue pour une génération d'intégration efficace. Il prend en charge les modèles de texte populaires et utilise des poids de modèle quantifiés avec l'exécution de l'ONNX pour l'inférence, garantissant des performances élevées sans dépendances lourdes.

Pour convertir les morceaux de texte en intégres, nous utiliserons FastMed de Qdrant. Nous les traitons en lots de 50 documents pour gérer efficacement la mémoire.

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
Copier après la connexion
Copier après la connexion
Copier après la connexion

Step3: Configuration du QDRANT avec quantification binaire

Il est temps de configurer le client QDrant, notre base de données vectorielle, avec des paramètres optimisés pour les performances. Nous créons une collection nommée «Bhagavad-gita» avec des paramètres vectoriels spécifiques et permettez une quantification binaire pour un stockage et une récupération efficaces.

Il existe trois façons d'utiliser le client Qdrant:

  • Mode en mémoire: Utilisation de Location = ”: Memory:”, qui crée une instance temporaire qui ne fonctionne qu'une seule fois. 
  • LocalHost: Utilisation de Location = "LocalHost", qui nécessite l'exécution d'une instance Docker. Vous pouvez suivre le guide de configuration ici: QDrant QuickStart. 
  • Stockage cloud: stockage des collections dans le cloud. Pour ce faire, créez un nouveau cluster, fournissez un nom de cluster et générez une clé API. Copiez la clé et récupérez l'URL de la commande curl.

Notez que le nom de la collection doit être unique, après chaque changement de données, cela doit également être modifié.

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

embeddings = []
BATCH_SIZE = 50
Copier après la connexion
Copier après la connexion

Nous vérifions d'abord si une collection avec la collection spécifiée_name existe dans QDRANT. Si ce n'est pas le cas, seulement nous créons une nouvelle collection configurée pour stocker 1 024 vecteurs de dimension et utiliser la similitude des cosinus pour la mesure de la distance.

Nous activons le stockage sur le disque pour les vecteurs d'origine et appliquons la quantification binaire, qui comprime les vecteurs pour réduire l'utilisation de la mémoire et améliorer la vitesse de recherche. Le paramètre Always_Ram garantit que les vecteurs quantifiés sont conservés dans RAM pour un accès plus rapide.

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)
Copier après la connexion
Copier après la connexion

Step4: Indexez le document

Le processus d'indexation télécharge nos documents traités et leurs incorporations sur QDRANT en lots. Chaque document est stocké à côté de sa représentation vectorielle, créant une base de connaissances consultable.

Le GPU sera utilisé à ce stade, et selon la taille des données, cette étape peut prendre quelques minutes.

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
)
Copier après la connexion
Copier après la connexion

Step5: Pipeline de chiffon avec Deepseek R1

Processus-1: R- Récupérer le document pertinent

La fonction de recherche prend une requête utilisateur, la convertit en intégration et récupère les documents les plus pertinents de QDRANT en fonction de la similitude du cosinus. Nous le démontrons avec un exemple de requête sur la bhagavad-gītā, montrant comment accéder et imprimer le contexte récupéré.

!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  
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Process-2: A- invite d'augmentation

Pour RAG, il est important de définir le modèle d'interaction du système à l'aide de ChatPromptTemplate. Le modèle crée un assistant spécialisé bien informé en Bhagavad-gita, capable de comprendre plusieurs langues (anglais, hindi, sanskrit).

Il comprend une mise en forme structurée pour l'injection de contexte et la manipulation des requêtes, avec des instructions claires pour gérer les questions hors contexte.

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
Copier après la connexion
Copier après la connexion
Copier après la connexion

Process-3: G- Génération de la réponse

Le pipeline final rassemble tout dans un système de chiffon cohésif. Il suit le modèle de génération de récupération: récupérer des documents pertinents, les augmenter avec notre modèle d'invite spécialisé et générer des réponses à l'aide du LLM. Ici pour LLM, nous utiliserons Deepseek R-1 Distill Llama 70 B hébergé sur Groq, obtenez vos clés d'ici: Groq Console.

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

embeddings = []
BATCH_SIZE = 50
Copier après la connexion
Copier après la connexion

Sortie: (Syntaxe: & lt; Think> Reasoning & lt; / Think> Response)

Construire un assistant Bhagavad Gita AI

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)
Copier après la connexion
Copier après la connexion

Construire un assistant Bhagavad Gita AI

Maintenant, si vous avez besoin d'utiliser à nouveau cette application? Sommes-nous censés subir toutes les étapes?

La réponse est non.

Step6: Inférence de l'indice enregistré

Il n'y a pas beaucoup de différence dans ce que vous avez déjà écrit. Nous réutiliserons la même fonction de recherche et de pipeline ainsi que le nom de collection dont nous avons besoin pour exécuter les questionnaires query_points.

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
)
Copier après la connexion
Copier après la connexion

Nous utiliserons les mêmes ci-dessus deux fonctions et Message_Template dans le streamlit app.py. 

Step7: rationalisation de l'interface utilisateur

En rationalisation après chaque question de l'utilisateur, l'état est actualisé. Pour éviter de rafraîchir la page entière, nous définirons quelques étapes d'initialisation sous Streamlit Cache_resource.

Rappelez-vous que lorsque l'utilisateur entre dans la question, le FastMed télécharge les poids des modèles une seule fois, il en va de même pour le GROQ et le QDRANT Instanciation.

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")
Copier après la connexion

Si vous avez remarqué la sortie de réponse, le format est & lt; Think & gt; raisonnement & lt; / think & gt; réponse.

Sur l'interface utilisateur, je veux garder le raisonnement sous l'expanseur de rationalisation, pour récupérer la partie de raisonnement, utilisons l'indexation des chaînes pour extraire le raisonnement et la réponse réelle.

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)) 
Copier après la connexion

Composant de chatbot

Initialise l'historique des messages dans l'état de session de Streamlit. Un bouton «Clear Chat» dans la barre latérale permet aux utilisateurs de réinitialiser cet historique. 

itère via des messages stockés et les affiche dans une interface de chat. Pour les réponses assistantes, il sépare le processus de réflexion (illustré dans une section extensible) de la réponse réelle à l'aide de la fonction extract_thinking_and_answer.

Le morceau de code restant est un format standard pour définir le composant Chatbot dans Streamlit, c'est-à-dire la gestion d'entrée qui crée un champ de saisie pour les questions des utilisateurs. Lorsqu'une question est soumise, elle est affichée et ajoutée à l'historique des messages. Maintenant, il traite la question de l'utilisateur à travers le pipeline de chiffons tout en montrant un fileur de chargement. La réponse est divisée en composants de processus et de réponse de réflexion.

!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  
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Liens importants

  • Vous pouvez trouver le code complet
  • Alternative Bhagavad Gita PDF- Télécharger
  • Remplacez l'espace réservé «& lt; Replay-API-Key>» par vos clés.

Conclusion

En combinant le raisonnement de Ddeepseek R1, la quantification binaire de Qdrant et le pipeline de chiffon de Llamaindex, nous avons construit un assistant AI qui offre des pages de réponses de réponses de 1 000 secondes. Ce projet souligne comment les LLM spécifiques au domaine et les bases de données vectorielles optimisées peuvent démocratiser l'accès aux textes anciens tout en maintenant la rentabilité. Alors que les modèles open source continuent d'évoluer, les possibilités d'applications de l'IA de niche sont illimitées.

Les plats clés

  • Deepseek R1 rivalise Openai O1 en raisonnement à 1 / 27e le coût, idéal pour les tâches spécifiques au domaine comme l'analyse des Écritures, tandis que Openai répond aux besoins de connaissances plus larges.
  • Comprendre l'implémentation du pipeline de chiffon avec des exemples de code démontrés pour le traitement des documents, la génération d'intégration et le stockage vectoriel à l'aide de Llamaindex et Qdrant.
  • Optimisation efficace du stockage vectoriel par la quantification binaire dans QDRANT, permettant le traitement de grandes collections de documents tout en maintenant les performances et la précision.
  • Implémentation d'ingénierie rapide structurée avec des modèles clairs pour gérer les requêtes multilingues (anglais, hindi, sanskrit) et gérer efficacement les questions hors contexte.
  • UI interactif à l'aide de streamlit, pour inférer l'application une fois stockée dans la base de données vectorielle.

Les questions fréquemment posées

Q1. La quantification binaire réduit-elle la qualité des réponses?

a. Impact minimal sur le rappel! Le suréchantillonnage de QDRANT remonte les meilleurs candidats à l'aide de vecteurs originaux, en maintenant la précision tout en augmentant la vitesse 40X et en réduisant l'utilisation de la mémoire de 97%.

Q2. Le Fitfled peut gérer des textes non anglais comme le sanskrit / hindi?

a. Oui! Le pipeline de chiffon utilise des intégres de Fastmed et la flexibilité du langage de Deepseek R1. Les invites personnalisées guident les réponses en anglais, en hindi ou en sanskrit. Alors que vous pouvez utiliser le modèle d'incorporation qui peut comprendre les jetons hindi, dans notre cas, le jeton utilisé comprend l'anglais et le texte hindi. 

Q3. Pourquoi choisir Deepseek R1 sur Openai O1?

a. Deepseek R1 offre 27 fois les coûts API inférieurs, la précision de raisonnement comparable (20,5% contre 21% de l'O1) et des performances supérieures au codage / spécifique au domaine. Il est idéal pour les tâches spécialisées comme l'analyse des Écritures où la question du coût et de l'expertise ciblée.

Le média présenté dans cet article ne appartient pas à l'analyse vidhya et est utilisé à la discrétion de l'auteur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal