1 points par GN⁺ 2023-07-10 | 1 commentaires | Partager sur WhatsApp
  • 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-002 pour 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.py pour créer la base de données vectorielle, puis à lancer l’interface de requête interactive avec python 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_KEY du fichier .env

1 commentaires

 
GN⁺ 2023-07-10
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 .toml
    Si 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 pass
    La 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

    • Difficile d’être compétitif. Si une petite entreprise veut traiter 10 000 requêtes de chatbot, les choix sont soit de payer OpenAI moins de 50 dollars par mois, soit de gérer des GPU dans le cloud et d’embaucher un ingénieur ML pour dépenser plus de 1 000 dollars par mois, soit de faire tourner une 4090 locale sous un bureau avec peu de fiabilité et 1 500 dollars de coût fixe
      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
    • Je me demande ce que font réellement ceux qui utilisent d’autres LLM pour autre chose que des expériences de principe
      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
    • On dirait que ce n’a pas été fait pour lancer un vrai produit, mais plutôt pour ajouter une ligne sur un CV afin de prouver une expérience avec OpenAI
      J’imagine que c’est le résultat du fait qu’OpenAI n’a pas son propre programme de certification
    • Pourquoi ne pas simplement brancher LocalAI sur https://mudler.pm/posts/smart-slackbot-for-teams/ ?
    • Le seul « déchet » OpenAI utilisé ici, c’est la génération d’embeddings
      À 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

    • C’est nettement en dessous des produits OpenAI, et j’en ai marre qu’on parle de ces modèles comme s’ils étaient déjà totalement interchangeables
      Ce n’est pas encore le cas
    • Je me demande si c’est assez robuste pour y mettre tous ses e-mails et journaux de chat puis discuter avec
      Est-ce que ça peut extraire le contexte pour comprendre des questions sur des logs récents ?
    • Je me demande comment ça tourne sur un Mac Intel. J’ai un i9 à 6 cœurs
      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
    • Ce serait vraiment bien si on pouvait l’utiliser avec Confluence
      Le principe serait de rédiger la documentation, puis simplement poser des questions à son sujet
    • Le terme 100 % privé me semble un peu douteux
      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 ?

    • En principe, les données envoyées via l’API OpenAI ne sont pas utilisées pour l’entraînement et sont, dans la plupart des cas, supprimées au bout de 30 jours maximum
      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
    • Je me pose la même question
      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 OpenAIEmbeddings par défaut dans LangChain et un LLM OpenAI
    Ce 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

    • Le modèle d’embedding utilisé est text-embedding-ada-002, l’embedding par défaut de l’API OpenAI
      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

  • 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 n’utilisent pas GPT-2. Le README est erroné
      Ils utilisent from langchain.embeddings import OpenAIEmbeddings, et c’est l’API d’embeddings d’OpenAI, text-embedding-ada-002
      Le seul endroit où GPT-2 est utilisé, c’est GPT2TokenizerFast.from_pretrained("gpt2"), comme fonction de longueur pour compter les tokens dans l’utilitaire RecursiveCharacterTextSplitter() de LangChain
      Et ç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’importance
    • Le modèle d’embeddings utilisé est text-embedding-ada-002, l’embedding par défaut de l’API OpenAI
      GPT-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
    • Je pars du principe que GPT-4 donnera de meilleures réponses aux questions que GPT-2
  • Suis-je le seul à ne pas avoir besoin de rechercher dans l’ensemble de mes données ? Quel est le cas d’usage ici ?

    • Voici un exemple de cas d’usage
      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 a les données mais on ne sait pas où elles sont
      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 ?

    • Pinecone et Milvus peuvent être des alternatives à l’utilisation de FAISS pour la partie stockage vectoriel et recherche
      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 suis en train de créer une petite base de données vectorielle uniquement avec numpy : https://github.com/sdan/vlite
      Je pense que Milvus, Quickwit et Pinecone sont davantage adaptés aux entreprises et plus difficiles à utiliser
    • À mon avis, qdrant est meilleur
  • 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

    • Lesquels ?
  • 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