Ce projet fournit une application Web simple qui permet aux utilisateurs de télécharger un document PDF, de générer des incorporations vectorielles à partir de son contenu, puis de rechercher des informations dans le document à l'aide d'une requête texte. Les modèles d'intégration et de langage d'OpenAI sont utilisés pour créer des intérêts vectoriels et une récupération d'informations.
Ingestion de document PDF : Les utilisateurs peuvent télécharger un document PDF via l'interface Web pour la récupération des informations.
Générer des incorporations vectorielles : le contenu texte est extrait du PDF et divisé en morceaux plus petits à l'aide de Langchain. Les intégres sont générés pour chaque morceau en utilisant le modèle d'intégration de texte d'OpenAI (par exemple, text-emballant-ADA-002).
Stockage de la base de données vectorielle : stockez les incorporations de vecteur générées dans une base de données vectorielle comme Pinecone pour la recherche de similitude.
Affinez les requêtes utilisateur : les requêtes utilisateur sont affinées à l'aide de l'API d'achèvement du chat d'OpenAI pour améliorer la précision de la recherche.
Rechercher des informations : les utilisateurs peuvent saisir des requêtes texte pour rechercher des informations dans le document téléchargé. Le système récupère des morceaux de texte pertinents en fonction de leur similitude vectorielle avec l'intégration de la requête.
Générer une réponse : Sur la base des morceaux de texte récupérés, du contexte (requêtes et réponses précédentes) et de la requête de l'utilisateur, une réponse est générée à l'aide de modèles OpenAI (GPT-4O, GPT-4 ou GPT-3.5-turbo). Les utilisateurs peuvent sélectionner le modèle OpenAI via l'interface Web. Le choix du modèle peut affecter le style de réponse, les détails et la précision.
Le fichier exigence.txt répertorie les packages Python nécessaires et leurs versions requises pour exécuter l'application. Voici une ventilation de chaque package:
FLASK : un cadre Web Python léger pour la création d'applications Web.
PineCone-Client : la bibliothèque client Python officielle pour interagir avec PineCone, la base de données vectorielle utilisée dans votre application.
OpenAI : La bibliothèque client Python officielle de l'API OpenAI, utilisée pour générer des incorporations de texte et interagir avec les modèles de langue d'OpenAI.
PYPDF2 : une bibliothèque pur-python pour extraire du texte à partir de fichiers PDF.
Langchain : un cadre pour la création d'applications avec des modèles de gros langues, utilisés dans votre application pour la division et le groupe de texte.
Numpy : un package pour l'informatique scientifique dans Python, utilisé pour travailler avec des tableaux et des vecteurs multidimensionnels.
Pour installer ces dépendances, vous pouvez créer un nouvel environnement virtuel Python et exécuter la commande suivante:
pip install -r exigences.txt
Pour l'intégration avec Openai et PineCone, vous devez obtenir et configurer les informations API respectives, Host (Pinecone) pour ces plates-formes. Définissez vos touches API Openai et PineCone et l'hôte PineCone comme variables d'environnement dans Linux. Utilisez les commandes Linux suivantes pour exporter ces variables:
exporter openai_api_key = 'your-openai-api-key'
Exporter pinecone_api_key = 'Votre Pinecone-API-Key'
Exporter pinecone_host = 'Votre Pinecone-Host'
Assurez-vous d'avoir un compte OpenAI avec des clés API valides. Vous pouvez créer ou obtenir vos clés API à partir de la plate-forme OpenAI (https://platform.openai.com/) et les gérer (https://platform.openai.com/organisation/API-Keys). De plus, assurez-vous que votre compte dispose d'un quota d'utilisation suffisant, car cet exemple nécessite un compte OpenAI payé.
PineCone Environment (compte gratuit de Pinecone utilisé https://www.pineconcone.io/): 1) L'index de pincone est utilisé 2) Dimensions: 1536 3) Type d'hôte: sans serveur.
Centos Linux La version 8.5.2111 est utilisée comme Linux OS. Une machine virtuelle Cloud Linux avec une IP publique (facultative) a été testée pour l'interface Web. La propriété intellectuelle locale peut également être utilisée. Créez un environnement virtuel Python (facultatif mais recommandé) pour isoler les dépendances du projet.
L'application fournit une interface Web construite avec Flask, un framework Web Python. Les utilisateurs peuvent télécharger un document PDF, entrent des requêtes, choisir le modèle de langue Openai à utiliser (GPT-3.5-Turbo, GPT-4 ou GPT-4O) et recevoir des réponses détaillées basées sur les informations extraites des documents PDF téléchargés.
Ingestion de document PDF et création d'incorporces vectorielles
L'application fournit une interface Web où les utilisateurs peuvent télécharger des documents PDF. Lors du téléchargement d'un fichier PDF, le contenu du texte est extrait du document et divisé en morceaux plus petits à l'aide du RecursiVECHarAtteTtextsPlitter de la bibliothèque de Langchain. Ce processus de division garantit que le texte est divisé en morceaux gérables tout en maintenant le contexte.
Ensuite, des intégres vectoriels sont générés pour chaque morceau de texte en utilisant le modèle de text-texta d'Openai-ADA-002. Ces intérêts sont des vecteurs de grande dimension qui capturent la signification sémantique du texte, permettant une recherche de similitude efficace.
Stockage des incorporations vectorielles dans du pinone
Les incorporations vectorielles générées, ainsi que leurs morceaux de texte et les numéros de page correspondants, sont stockés dans une base de données vectorielle de Pinecone. PineCone est une base de données vectorielle évolutive et efficace conçue pour stocker et interroger les vecteurs de grande dimension.
Traitement des requêtes
Lorsqu'un utilisateur soumet une requête via l'interface Web, l'application le traite dans les étapes suivantes:
Raffinement de requête:
La requête de l'utilisateur est envoyée au modèle de langue d'Openai (par exemple, GPT-3.5-Turbo, GPT-4 ou GPT-4O) pour affiner et améliorer la requête pour une meilleure précision de recherche.
Génération d'intégration pour la requête
La requête raffinée est convertie en un vecteur incorporant en utilisant le modèle d'Ex-Embedding-ADA-002 d'OpenAI.
Recherche de similitude:
L'intégration de la requête est utilisée pour rechercher la base de données vectorielle de Pinecone pour les morceaux de texte les plus sémantiquement similaires en fonction de la similitude vectorielle.
REMARQUE : Pour interroger l'index de Pinecone et récupérer les résultats supérieurs, le code suivant est utilisé (app.py)
# Adjust et expérimentez la valeur top_k en fonction de votre cas d'utilisation
résultats = pinecone_index.query (vector = padded_query_vector.tolist (), top_k = 1, include_metadata = true)
Le paramètre top_k spécifie le nombre de résultats supérieurs à retourner de la requête. L'ajustement de la valeur top_k peut avoir un impact sur la qualité des réponses de requête. Une valeur TOP_K plus élevée peut fournir des résultats plus complets mais pourrait également introduire des données moins pertinentes. Inversement, une valeur top_k inférieure peut donner plus de résultats mais moins de résultats. Il est important d'expérimenter différentes valeurs TOP_K pour trouver l'équilibre optimal pour votre cas d'utilisation spécifique. De plus, sachez que l'augmentation de la valeur TOP_K aura également un impact sur les coûts, en particulier lors de l'utilisation d'un modèle OpenAI payant pour le traitement des résultats. Des valeurs TOP_K plus élevées entraînent plus de données envoyées et traitées par le modèle, ce qui peut entraîner une augmentation des charges d'utilisation.
Remarque : Le paramètre SCORE_THRESHOLD détermine le score de pertinence minimum requis pour un résultat à considérer, ce qui peut avoir un impact sur la qualité de la réponse de la requête. Ainsi, ajustez la valeur de seuil en fonction de votre cas d'utilisation et des expériences (app.py).
#Ajustez la valeur seuil en fonction de votre cas d'utilisation
Score_Threshold = 0,65
Génération de réponse:
Les morceaux de texte pertinents récupérés de la base de données sont combinés avec le contexte précédent (le cas échéant) et la requête utilisateur d'origine. Ces informations sont ensuite envoyées au modèle linguistique d'OpenAI (le même modèle utilisé pour le raffinement de requête) pour générer une réponse complète et contextuellement pertinente.
Réponse consciente du contexte:
L'application maintient un contexte de requêtes et de réponses précédentes. Ce contexte est transmis au modèle linguistique d'OpenAI pendant l'étape de génération de réponse, garantissant que les réponses générées prennent en compte l'historique conversationnel et fournissent des informations précises et contextuellement pertinentes.
Pour exécuter l'application, suivez ces étapes:
Activez votre environnement virtuel Python (facultatif): (VENV) [utilisateur @ hôte project_directory] #
Exécutez le script app.py: python app.py
L'application commencera à fonctionner sur le port 5000, et vous pourriez voir une sortie similaire comme ce qui suit:
Assurez-vous que l'application écoute activement les connexions entrantes sur le port 5000:
netstat -aultpn | grep -i 5000 TCP 0 0 0.0.0.0:5000 0.0.0.0:* Écoutez 525661 / Python
http://127.0.0.1:5000/ (pour l'accès local)
http: // vm public ip: 5000 / (pour l'accès à distance sur Internet)
Remarque : Si vous prévoyez d'accéder à l'application par rapport à l'IP publique, assurez-vous d'autoriser le trafic entrant sur le port 5000 via le pare-feu de la machine virtuelle. Cela garantira que la communication sur l'IP publique est autorisée et vous pouvez accéder à l'interface Web à distance.
Assurez-vous également que le dossier de votre machine Linux, qui contiendra le fichier PDF téléchargé, ne contient pas le fichier PDF avec le même nom. Si le fichier existe déjà, il sera écrasé.
Sélectionnez le fichier PDF et téléchargez-le à l'aide du bouton «Télécharger».
Cliquez sur le "fichier de processus" (à cette étape, les intégres vectoriels seront créés et stockés dans la base de données de Pinecone).
Entrez votre requête de recherche. Sélectionnez les modèles de langue Openai dans le menu déroulant.
Vérifiez la réponse de la requête. Soumettre les requêtes ultérieures.
Une fois terminé, cliquez sur la «session de fin» (cela déclenchera le nettoyage - Suppression du fichier téléchargé et des intégres de vecteur dans la base de données)
Sur le Macine Linux, appuyez sur Ctrl + C pour fermer l'application (app.py).