Avec une petite quantité de code et quelques bibliothèques utiles, vous pouvez créer ce puissant outil d'analyse de documents.

Extraire des informations à partir de documents et de données est crucial pour prendre des décisions éclairées. Cependant, des problèmes de confidentialité surviennent lorsqu’il s’agit d’informations sensibles. LangChain, en combinaison avec l'API OpenAI, vous permet d'analyser vos documents locaux sans avoir besoin de les télécharger en ligne.

Ils y parviennent en conservant vos données localement, en utilisant l'intégration et la vectorisation pour l'analyse et en exécutant des processus au sein de votre environnement. OpenAI n'utilise pas les données soumises par les clients via leur API pour entraîner leurs modèles ou améliorer leurs services.

Configuration de votre environnement

Créer un nouvel environnement virtuel Python. Cela garantira qu’il n’y a pas de conflits de versions de bibliothèque. Exécutez ensuite la commande de terminal suivante pour installer les bibliothèques requises.

pip install langchain openai tiktoken faiss-cpu pypdf

Voici un aperçu de la façon dont vous utiliserez chaque bibliothèque :

  • LangChaîne: Vous l'utiliserez pour créer et gérer des chaînes linguistiques pour le traitement et l'analyse de texte. Il fournira des modules pour le chargement de documents, le fractionnement de texte, l'intégration et le stockage de vecteurs.
  • OpenAI: Vous l'utiliserez pour exécuter des requêtes et obtenir des résultats à partir d'un modèle de langage.
  • jeton tiktok: Vous l'utiliserez pour compter le nombre de jetons (unités de texte) dans un texte donné. Il s'agit de garder une trace du nombre de jetons lors de l'interaction avec l'API OpenAI qui facture en fonction du nombre de jetons que vous utilisez.
  • FAISS: Vous l'utiliserez pour créer et gérer un magasin de vecteurs, permettant une récupération rapide de vecteurs similaires en fonction de leurs intégrations.
  • PyPDF: Cette bibliothèque extrait le texte des PDF. Il permet de charger des fichiers PDF et d'extraire leur texte pour un traitement ultérieur.

Une fois toutes les bibliothèques installées, votre environnement est maintenant prêt.

Obtenir une clé API OpenAI

Lorsque vous envoyez des requêtes à l'API OpenAI, vous devez inclure une clé API dans le cadre de la requête. Cette clé permet au fournisseur d'API de vérifier que les requêtes proviennent d'une source légitime et que vous disposez des autorisations nécessaires pour accéder à ses fonctionnalités.

Pour obtenir une clé API OpenAI, passez à la Plateforme OpenAI.

Ensuite, sous le profil de votre compte en haut à droite, cliquez sur Afficher les clés API. Le Clés API apparaîtra.

Clique sur le Créer un nouveau secretclé bouton. Nommez votre clé et cliquez sur Créer une nouvelle clé secrète. OpenAI générera votre clé API que vous devrez copier et conserver dans un endroit sûr. Pour des raisons de sécurité, vous ne pourrez plus le consulter via votre compte OpenAI. Si vous perdez cette clé secrète, vous devrez en générer une nouvelle.

Le code source complet est disponible dans un Dépôt GitHub.

Importer les bibliothèques requises

Pour pouvoir utiliser les bibliothèques installées dans votre environnement virtuel, vous devez les importer.

from langchain.document_loaders import PyPDFLoader, TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

Notez que vous importez les bibliothèques de dépendances depuis LangChain. Cela vous permet d'utiliser des fonctionnalités spécifiques du framework LangChain.

Chargement du document pour analyse

Commencez par créer une variable contenant votre clé API. Vous utiliserez cette variable plus tard dans le code pour l'authentification.

# Hardcoded API key
openai_api_key = "Your API key"

Il n'est pas recommandé de coder en dur votre clé API si vous envisagez de partager votre code avec des tiers. Pour le code de production que vous souhaitez distribuer, utilisez plutôt une variable d'environnement.

Ensuite, créez une fonction qui charge un document. La fonction doit charger un PDF ou un fichier texte. Si le document n'est ni l'un ni l'autre, la fonction doit déclencher un ValeurErreur.

defload_document(filename):
if filename.endswith(".pdf"):
loader = PyPDFLoader(filename)
documents = loader.load()
elif filename.endswith(".txt"):
loader = TextLoader(filename)
documents = loader.load()
else:
raise ValueError("Invalid file type")

Après avoir chargé les documents, créez un CaractèreTextSplitter. Ce séparateur divisera les documents chargés en morceaux plus petits en fonction des caractères.

 text_splitter = CharacterTextSplitter(chunk_size=1000, 
chunk_overlap=30, separator="\n")

return text_splitter.split_documents(documents=documents)

Le fractionnement du document garantit que les morceaux sont d'une taille gérable et sont toujours connectés à un contexte qui se chevauche. Ceci est utile pour des tâches telles que l’analyse de texte et la récupération d’informations.

Interrogation du document

Vous avez besoin d'un moyen d'interroger le document téléchargé pour en tirer des informations. Pour ce faire, créez une fonction qui prend un requête chaîne et un retriever comme entrée. Il crée alors un RécupérationQA exemple en utilisant le retriever et une instance du modèle de langage OpenAI.

defquery_pdf(query, retriever):
qa = RetrievalQA.from_chain_type(llm=OpenAI(openai_api_key=openai_api_key),
chain_type="stuff", retriever=retriever)
result = qa.run(query)
print(result)

Cette fonction utilise l'instance QA créée pour exécuter la requête et imprimer le résultat.

Création de la fonction principale

La fonction principale contrôlera le déroulement global du programme. Il faudra la saisie de l'utilisateur pour un nom de fichier de document et chargera ce document. Créez ensuite un OpenAIEmbeddings instance pour les intégrations et construire un magasin de vecteur en fonction des documents chargés et intégrations. Enregistrez ce magasin de vecteurs dans un fichier local.

Ensuite, chargez le magasin de vecteurs persistant à partir du fichier local. Entrez ensuite une boucle dans laquelle l'utilisateur peut saisir des requêtes. Le principal la fonction transmet ces requêtes au requête_pdf fonction avec le récupérateur du magasin de vecteurs persistant. La boucle continuera jusqu'à ce que l'utilisateur entre dans « exit ».

defmain():
filename = input("Enter the name of the document (.pdf or .txt):\n")
docs = load_document(filename)
embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
vectorstore = FAISS.from_documents(docs, embeddings)
vectorstore.save_local("faiss_index_constitution")
persisted_vectorstore = FAISS.load_local("faiss_index_constitution", embeddings)
query = input("Type in your query (type 'exit' to quit):\n")

while query != "exit":
query_pdf(query, persisted_vectorstore.as_retriever())
query = input("Type in your query (type 'exit' to quit):\n")

Les intégrations capturent les relations sémantiques entre les mots. Les vecteurs sont une forme sous laquelle vous pouvez représenter des morceaux de texte.

Ce code convertit les données texte du document en vecteurs en utilisant les intégrations générées par OpenAIEmbeddings. Il indexe ensuite ces vecteurs en utilisant FAISS, pour une récupération et une comparaison efficaces de vecteurs similaires. C'est ce qui permet d'analyser le document téléchargé.

Enfin, utilisez la construction __name__ == "__main__" pour appeler la fonction principale si un utilisateur exécute le programme de manière autonome :

if __name__ == "__main__":
main()

Cette application est une application en ligne de commande. En extension, vous pouvez utilisez Streamlit pour ajouter une interface Web à l'application.

Effectuer une analyse de documents

Pour effectuer une analyse de document, stockez le document que vous souhaitez analyser dans le même dossier que votre projet, puis exécutez le programme. Il vous demandera le nom du document que vous souhaitez analyser. Entrez son nom complet, puis saisissez les requêtes que le programme devra analyser.

La capture d'écran ci-dessous montre les résultats de l'analyse d'un PDF.

Le résultat suivant montre les résultats de l'analyse d'un fichier texte contenant le code source.

Assurez-vous que les fichiers que vous souhaitez analyser sont au format PDF ou texte. Si vos documents sont dans d'autres formats, vous pouvez convertissez-les au format PDF à l'aide d'outils en ligne.

Comprendre la technologie derrière les grands modèles de langage

LangChain simplifie la création d'applications utilisant de grands modèles de langage. Cela signifie également qu’il fait abstraction de ce qui se passe dans les coulisses. Pour comprendre exactement comment fonctionne l'application que vous créez, vous devez vous familiariser avec la technologie derrière les grands modèles de langage.