PdfGptIndexer - Indexation et interrogation de documents PDF avec les embeddings d’OpenAI et FAISS
(github.com/raghavan)- Outil permettant d’indexer et d’interroger des documents PDF, qui implémente un système RAG pour dialoguer avec des documents PDF à l’aide des embeddings d’OpenAI et de FAISS
- Extrait le texte d’un dossier de PDF, le découpe en segments de 1000 caractères avec un chevauchement de 200 caractères, puis génère des embeddings avec le modèle OpenAI
text-embedding-ada-002pour les stocker dans un index FAISS local - Lors de l’interrogation, charge l’index vectoriel FAISS enregistré, convertit la question en embedding, trouve les 3 segments de document les plus similaires, puis affiche les scores de similarité et des extraits de texte
- La génération de réponse fonctionne en synthétisant une réponse cohérente par GPT-4 à partir du contexte récupéré
- En stockant localement les embeddings, il n’est pas nécessaire de les régénérer à chaque requête ; après la création initiale, il est possible d’interroger les données sans accès Internet à OpenAI, et seuls les appels d’API pour la génération de réponse sont nécessaires
- Le flux d’exécution par défaut consiste à traiter les PDF avec
python indexer.pypour créer la base de données vectorielle, puis à lancer l’interface de requête interactive avecpython chatbot.py- Le dossier des PDF et l’emplacement de stockage de l’index peuvent être spécifiés via des arguments de ligne de commande
- Il suffit de relancer l’indexeur uniquement lorsque de nouveaux PDF sont ajoutés à la collection
- Les prérequis d’exécution sont Python 3.8 ou supérieur et une clé d’API OpenAI, configurée via la valeur
OPENAI_API_KEYdu fichier.env
1 commentaires
Avis sur Hacker News
Ce qui est le plus frustrant avec presque toutes les applis qui copient ce genre d’idée, c’est qu’elles sont toutes dépendantes d’OpenAI
Il serait temps d’arrêter
Les options qui nécessitent OpenAI ou le cloud devraient être reléguées au rang de « configuration avancée, techniquement possible mais assez pénible », et l’approche par défaut devrait être l’inverse si l’on veut beaucoup plus d’utilisateurs
Pour ce type d’appli, il vaudrait mieux partir sur une exécution entièrement locale par défaut, avec la possibilité de remplacer le modèle par n’importe quel modèle Hugging Face en ne changeant qu’une seule chaîne dans un fichier
.tomlSi OpenAI est vraiment nécessaire, il suffit de le rendre possible via un changement de configuration et une gestion de clés du type Docker secret ou chaîne
passLa valeur par défaut devrait donner la priorité au local, traiter un maximum de choses en local, puis n’envoyer à OpenAI qu’un tout petit nombre de tokens de prompts agrégés quand l’utilisateur le veut vraiment
Les entreprises plus grandes ont besoin de passer à l’échelle, et même là il est difficile de rivaliser avec les prix d’OpenAI
Quelqu’un avec une fibre entrepreneuriale pourrait monter une startup OpenLLaMA proposant une facturation à la requête, du fine-tuning et du stockage vectoriel
On a déjà dépassé la phase de l’effet waouh, maintenant je veux juste finir le travail efficacement
Jusqu’ici, dans mes tests, le seul modèle capable d’effectuer le travail avec une certaine régularité, c’était GPT-4
Je ne sais pas si c’est moi qui suis mauvais, ou si c’est juste le fantasme habituel de HN qui consiste à prétendre que d’autres LLM sont bien meilleurs sur les critères de qualité, de cohérence et de fiabilité nécessaires pour un vrai usage
J’imagine que c’est le résultat du fait qu’OpenAI n’a pas son propre programme de certification
À l’heure actuelle, OpenAI fournit l’un des meilleurs embeddings et des moins chers pour un projet personnel
Une fois les vecteurs créés, on peut totalement se passer du cloud si on le souhaite
LangChain a abstrait ce point de friction, donc on peut remplacer le générateur d’embeddings à tout moment
Le reste utilise déjà Hugging Face, et peut être remplacé par d’autres modèles que GPT-2 prenant en charge les prompts
Il faut garder les données privées et éviter de les laisser fuiter vers des tiers. On peut utiliser quelque chose comme privateGPT. Il a 32 k étoiles sur GitHub
Si la clé n’est pas à moi, alors les données ne sont pas à moi non plus
« Interagissez avec vos documents en privé grâce à la puissance de GPT, 100 % privé, aucune fuite de données »[0]
[0] https://github.com/imartinez/privateGPT
Ce n’est pas encore le cas
Est-ce que ça peut extraire le contexte pour comprendre des questions sur des logs récents ?
Je n’ai pas encore pu avoir une machine de série M, donc je me demande s’il ne vaudrait pas mieux l’exécuter dans un environnement de cloud computing avec GPU
Le principe serait de rédiger la documentation, puis simplement poser des questions à son sujet
Vu le niveau de paranoïa que les puissants affichent à propos des LLM locaux, je ne serais pas surpris du tout si la télémétrie de Windows rapportait ce que les gens font avec leurs LLM locaux
À mon avis, ceux qui pensent le contraire sont bien trop naïfs
J’envoie mes données personnelles à OpenAI ? Ce n’est pas un problème grave ?
Ça ne semble pas très judicieux tant qu’on n’a pas retiré toutes les informations personnelles sensibles des données. Est-ce que je rate quelque chose ?
Politique d’utilisation des données : https://openai.com/policies/api-data-usage-policies
Politique d’utilisation des données par modèle : https://platform.openai.com/docs/models/how-we-use-your-data
Au-delà du simple fait de vérifier s’il faut ou non une clé OpenAI, y a-t-il un moyen d’obtenir des informations plus détaillées sur l’usage qui est fait des données personnelles ?
Le README est très confus
Il dit utiliser le tokenizer GPT-2 et GPT-2 comme modèle d’embedding, mais à voir le code, on dirait qu’il utilise
OpenAIEmbeddingspar défaut dans LangChain et un LLM OpenAICe ne seraient pas plutôt text-embedding-ada-002 et text-davinci-003 respectivement ?
Je ne comprends absolument pas quel est le rôle de GPT-2 ici
GPT-2 ne sert qu’à calculer efficacement la longueur en tokens pendant l’étape de tokenisation
Existe-t-il une entreprise qui propose ça en version hébergée ?
J’aimerais vraiment avoir une petite IA à qui je peux faire ingérer toutes mes données pour lui poser des questions
Il y a aussi des fonctions pratiques comme l’intégration avec Google Drive, des vidéos YouTube, etc.
Il compte plus de 50000 utilisateurs actifs quotidiens
Je ne comprends pas. GPT-2 est l’un des rares modèles publics d’OpenAI, donc on peut l’exécuter directement en local ; pourquoi utiliser une API pour cet usage ?
https://github.com/openai/gpt-2
Ils utilisent
from langchain.embeddings import OpenAIEmbeddings, et c’est l’API d’embeddings d’OpenAI, text-embedding-ada-002Le seul endroit où GPT-2 est utilisé, c’est
GPT2TokenizerFast.from_pretrained("gpt2"), comme fonction de longueur pour compter les tokens dans l’utilitaireRecursiveCharacterTextSplitter()de LangChainEt ça n’a pas beaucoup de sens non plus. Je ne vois pas pourquoi ils utilisent ici le tokenizer GPT-2
Compter simplement les caractères ou utiliser un comptage de mots basé sur
.split()serait largement suffisant. Ici, la méthode de comptage n’a pas vraiment d’importanceGPT-2 ne sert qu’à calculer efficacement la longueur en tokens lors de la tokenisation
J’ai mis à jour le README pour refléter correctement cette information
Suis-je le seul à ne pas avoir besoin de rechercher dans l’ensemble de mes données ? Quel est le cas d’usage ici ?
Au travail, il y a un groupe qui discute de différents sujets d’investissement, et l’organisateur a un bon réseau, donc il essaie de faire venir chaque semaine des intervenants externes. C’est assez instructif
J’ai les notes brutes de chacune des présentations, et l’objectif était de les parcourir et de bien organiser les connaissances pour en faire une sorte de wiki
Cela fait 3 ans que j’ai commencé, mais je n’ai toujours pas trouvé le temps, et réalistement, il y a de fortes chances que je n’en trouve jamais
Pour retrouver une information dans ces notes, je peux faire une recherche textuelle, mais c’est trop sensible à la chaîne de recherche, donc je ne trouve souvent pas ce que je veux
Si l’information est dispersée dans plusieurs fichiers, il faut ouvrir tous les résultats et les parcourir
Avec ce type de technologie, on peut mettre toutes les notes dans une base de données vectorielle et demander en langage naturel ce dont on a besoin
Le système local interprète la question, trouve dans la base les documents les plus pertinents, puis envoie la question et les résultats de recherche à OpenAI pour interpréter la question et trouver la réponse dans les notes
J’avais déjà réalisé une preuve de concept avec LangChain, et ça fonctionnait. Il y a eu un vrai moment « ah-ha » lorsqu’une fois, le système a donné une réponse en combinant des informations dispersées dans deux présentations différentes
Mon problème, c’est qu’il y a beaucoup trop de paramètres ajustables, et je n’ai pas encore trouvé de méthode ni d’indicateur pour évaluer les performances du système. Je serais preneur de conseils
Ces notes ne contiennent aucune information personnelle, donc il n’y a pas de problème de confidentialité
J’aurais aimé mettre en place quelque chose de similaire sur plus de 20 ans d’e-mails, mais je ne l’ai pas fait à cause de la confidentialité. En plus, j’utilise l’indexeur d’e-mails notmuch, donc le besoin d’IA n’est pas si fort
Mais pour d’autres notes non personnelles, si on peut faire en sorte que ce système fonctionne vraiment bien, cela pourrait être une bénédiction
J’ai accumulé trop de notes sur divers sujets au fil des ans, et le fait de ne pas avoir à tout organiser correctement a une vraie valeur économique
Il suffit de prendre des notes, puis de laisser l’IA retrouver ce dont on a besoin
Parfois, on sait où elles sont, mais il y en a trop, et tout ce qu’il nous faut, c’est une explication rapide sur un point précis
Parfois, on a beaucoup de données venant de plusieurs sources, et au final ce qu’on veut, c’est un résumé de ce sur quoi la plupart ou la totalité s’accordent, ou bien un résumé de leurs différences
Les cas d’usage sont nombreux, et je pense que, comme nous sommes habitués aux méthodes existantes pour traiter ce type de travail, l’utilité ne devient souvent un vrai moment de « déclic » qu’après avoir exploré concrètement les possibilités
Le champ est assez large. Un projet sur lequel je travaille personnellement est une variante de cela : injecter plusieurs années de notes personnelles et de journal intime, puis les interroger pour la réflexion sur soi et la croissance personnelle
Je pense qu’il y a énormément de potentiel dans tout ce domaine
Quelqu’un sait comment Milvus, Quickwit et Pinecone se comparent ?
Je réfléchis à d’éventuelles opportunités de conseil autour des LLM, du fine-tuning / de la recherche vectorielle et des chatbots pour des entreprises locales
J’aimerais aussi créer un outil qui permet d’obtenir facilement une inférence personnalisée en glissant-déposant des fichiers
J’ai vu passer récemment https://gpt-trainer.com/ dans mon fil LinkedIn, et j’en ai vu quelques autres pour les documents
https://www.explainpaper.com/
https://www.konjer.xyz/
Je n’ai pas envie de faire de concurrence sur les prix
Servir un LLM open source local sur une 3090 serait sympa aussi, mais ce ne serait pas scalable
Avez-vous vu d’autres startups de fine-tuning ou de contexte de recherche vectorielle ?
J’ai l’impression que les différences d’embeddings se ressentiront davantage dans ce que vous utilisez pour générer les embeddings que dans les alternatives de stockage/recherche
Par exemple, utiliser des choses comme celles-ci https://news.ycombinator.com/item?id=36649579 au lieu de l’API d’embeddings d’OpenAI
En dehors des performances à grande échelle, du coût et des préférences personnelles ou de l’expérience développeur, je ne vois pas vraiment de différence marquante entre les alternatives de stockage/recherche d’embeddings
Je découvre Quickwit, mais d’après un rapide coup d’œil au site, ça ne ressemble pas à un stockage vectoriel et c’est probablement moins lié
Pour les outils de création de ChatGPT personnalisés, voir ma liste : https://llm-utils.org/List+of+tools+for+making+a+%22ChatGPT+...
Côté fine-tuning en tant que service, il y a Lamini AI, orienté entreprises
Parmi les autres startups d’embeddings, il y a Weaviate
Je pense que Milvus, Quickwit et Pinecone sont davantage adaptés aux entreprises et plus difficiles à utiliser
Il existe des modèles d’embeddings locaux plus rapides et plus précis, donc je ne vois pas pourquoi garder une dépendance à OpenAI
Je travaille dans une entreprise qui joue le rôle de couche de sécurité entre les données sensibles d’une entreprise et les LLM
Peu importe que le modèle soit HF, ChatGPT ou Bard, ni que le support soit des données de conversation, des PDF ou une base de connaissances comme Notion
Nous masquons les données sensibles pour empêcher les usages à risque, tout en faisant aussi de la vérification factuelle
Si c’est le genre de chose que vous cherchez, je peux vous faire une intro. tothepoint.tech