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.
Cet article a été publié dans le cadre du Data Science Blogathon.
Deepseek: 20,5% de précision (public), 15,8% (semi-privé).
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.
É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.
Vous trouverez ci-dessous le graphique de flux qui explique comment nous pouvons construire Bhagwad Gita Assistant:
Présentation de l'architecture
Suivons maintenant les étapes par un:
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:
!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
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
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
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
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:
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
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)
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 )
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
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
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
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)
Maintenant, si vous avez besoin d'utiliser à nouveau cette application? Sommes-nous censés subir toutes les étapes?
La réponse est non.
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 )
Nous utiliserons les mêmes ci-dessus deux fonctions et Message_Template dans le streamlit app.py.
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")
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))
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
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.
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!