1 Punkte von GN⁺ 2023-07-10 | 1 Kommentare | Auf WhatsApp teilen
  • Ein Tool zum Indexieren und Abfragen von PDF-Dokumenten, das mit OpenAI embeddings und FAISS ein RAG-System implementiert, mit dem sich mit PDF-Dokumenten interagieren lässt
  • Extrahiert Text aus einem PDF-Ordner, teilt ihn in Chunks von 1000 Zeichen mit 200 Zeichen Überlappung auf, erzeugt Embeddings mit dem OpenAI-Modell text-embedding-ada-002 und speichert sie in einem lokalen FAISS index
  • Im Abfrageschritt wird der gespeicherte FAISS-Vektorindex geladen, die Frage in ein Embedding umgewandelt und anschließend die 3 ähnlichsten Dokument-Chunks gesucht; danach werden Ähnlichkeitswerte und Text-Snippets angezeigt
  • Die Antwortgenerierung erfolgt so, dass GPT-4 auf Basis des gefundenen Kontexts eine konsistente Antwort zusammensetzt
  • Da die Embeddings lokal gespeichert werden, müssen sie nicht bei jeder Abfrage neu erzeugt werden; nach der initialen Erstellung sind Datenabfragen ohne OpenAI-Internetverbindung möglich, und nur für die Antwortgenerierung ist ein API-Aufruf nötig
  • Der grundlegende Ausführungsablauf besteht darin, mit python indexer.py die PDFs zu verarbeiten und eine Vektordatenbank zu erstellen und mit python chatbot.py eine interaktive Abfrageoberfläche zu starten
    • Der PDF-Ordner und der Speicherort des Index können als Befehlszeilenargumente angegeben werden
    • Der Indexer muss nur erneut ausgeführt werden, wenn neue PDFs zur Sammlung hinzugefügt werden
  • Voraussetzungen für die Ausführung sind Python 3.8 oder höher und ein OpenAI API key, der über den Wert OPENAI_API_KEY in der Datei .env gesetzt wird

1 Kommentare

 
GN⁺ 2023-07-10
Hacker-News-Kommentare
  • Am frustrierendsten ist, dass bei fast allen Apps, die diese Art von Idee kopieren, OpenAI zwingend erforderlich ist
    Es wäre schön, wenn das endlich aufhören würde
    Optionen, die OpenAI oder die Cloud benötigen, sollten eher als „technisch möglich, aber ziemlich umständliche erweiterte Konfiguration“ behandelt werden, und die Standardeinstellung sollte umgekehrt sein, dann würden deutlich mehr Nutzer dazukommen
    Solche Apps sollten standardmäßig vollständig lokal laufen, und es sollte genügen, einen einzigen String in einer .toml-Datei zu ändern, um auf ein beliebiges Hugging-Face-Modell umzuschalten
    Wenn wirklich OpenAI nötig ist, sollte das per Änderung der Konfiguration und mit Verfahren zur Schlüsselverwaltung wie Docker secrets oder einer pass-Chain möglich sein
    Standardmäßig sollte lokal Vorrang haben, möglichst viel sollte lokal verarbeitet werden, und nur wenn der Nutzer es wirklich will, sollte eine sehr kleine Token-Menge aus den gesammelten Prompts an OpenAI gesendet werden

    • Es ist schwer, damit zu konkurrieren. Wenn ein kleines Unternehmen 10.000 Chatbot-Anfragen verarbeitet, sind die Optionen entweder weniger als 50 Dollar im Monat an OpenAI zu zahlen, oder Cloud-GPUs zu verwalten und einen ML-Ingenieur einzustellen und damit über 1000 Dollar im Monat auszugeben, oder eine lokale 4090 unter irgendeinen Schreibtisch zu stellen und 1500 Dollar an Fixkosten bei fragwürdiger Zuverlässigkeit zu haben
      Größere Unternehmen brauchen Skalierbarkeit, und trotzdem ist es schwer, mit den Preisen von OpenAI zu konkurrieren
      Jemand mit Startup-Mentalität könnte ein OpenLLaMA-Startup aufbauen, das Abrechnung pro Anfrage, Fine-Tuning und Vector Storage anbietet
    • Ich frage mich, was Leute tatsächlich produktiv mit anderen LLMs machen, also nicht nur einfache Experimente
      Wir sind längst über die bloße Neuheit hinaus, jetzt will ich Dinge effizient erledigen
      Nach allem, was ich bisher getestet habe, war GPT-4 das einzige Modell, das Aufgaben einigermaßen zuverlässig erledigt hat
      Ich weiß nicht, ob ich einfach unerfahren bin oder ob auf HN nur Wunschdenken betrieben wird, dass andere LLMs bei Qualität, Konsistenz und Zuverlässigkeit für reale Arbeit deutlich besser seien
    • Es wirkt, als wäre das nicht für ein echtes Produkt gebaut worden, sondern eher, um eine Zeile im Lebenslauf zu haben, die OpenAI-Erfahrung nachweist
      Ich vermute, das ist eine Folge davon, dass OpenAI kein eigenes Zertifizierungsprogramm hat
    • Könnte man nicht einfach LocalAI an https://mudler.pm/posts/smart-slackbot-for-teams/ anschließen?
    • Das einzige OpenAI-„Zeug“, das hier genutzt wird, ist die Erzeugung von Embeddings
      Derzeit bietet OpenAI für persönliche Projekte eines der besten und günstigsten Embeddings an
      Sobald die Vektoren erzeugt sind, kann man die Cloud auf Wunsch komplett hinter sich lassen
      LangChain abstrahiert genau diesen Schmerzpunkt, daher kann auch der Embedding-Generator jederzeit ausgetauscht werden
      Der Rest nutzt bereits Hugging Face und kann durch andere Modelle als GPT-2 ersetzt werden, sofern sie Prompts unterstützen
  • Man sollte die Daten privat halten und nicht an Dritte weitergeben. Etwas wie privateGPT reicht dafür aus. Das GitHub-Repo hat 32.000 Sterne
    Wenn der Schlüssel nicht mir gehört, gehören mir auch die Daten nicht
    „Mit der Kraft von GPT mit Dokumenten privat interagieren, 100 % privat, keine Datenlecks“[0]
    [0] https://github.com/imartinez/privateGPT

    • Es ist OpenAI-Produkten deutlich unterlegen, und ich bin es leid, dass so getan wird, als seien solche Modelle schon vollständig austauschbar
      Das sind sie noch nicht
    • Ich frage mich, ob das robust genug ist, um alle E-Mails und Chat-Logs hineinzuladen und dann damit zu sprechen
      Könnte es Kontext extrahieren, um Fragen zu aktuellen Logs zu verstehen?
    • Ich frage mich, wie das auf einem Intel Mac läuft. Ich nutze einen 6-Core-i9
      Ich bin noch nicht zu den M-Serien gekommen und überlege, ob es besser wäre, es in einer Cloud-Computing-Umgebung mit GPU laufen zu lassen
    • Mit Confluence wäre das wirklich großartig
      Also so, dass man Dokumentation schreibt und dann einfach Fragen zu deren Inhalt stellt
    • Die Aussage von 100 % privat erscheint mir etwas fragwürdig
      Wenn man sieht, wie paranoid Machthaber bei lokalen LLMs reagieren, würde es mich überhaupt nicht überraschen, wenn die Windows-Telemetrie meldet, was Leute mit lokalen LLMs machen
      Wer glaubt, dass das nicht so ist, ist meiner Meinung nach zu naiv
  • Werden meine persönlichen Daten an OpenAI geschickt? Ist das nicht ein ernstes Problem?
    Das scheint nicht klug, solange man nicht alle sensiblen persönlichen Informationen aus den Daten entfernt hat. Übersehe ich etwas?

  • Das README ist extrem verwirrend
    Dort steht, dass der GPT-2-Tokenizer verwendet wird und GPT-2 als Embedding-Modell dient, aber im Code scheint standardmäßig LangChain OpenAIEmbeddings und ein OpenAI-LLM verwendet zu werden
    Sind das nicht jeweils text-embedding-ada-002 und text-davinci-003?
    Ich verstehe überhaupt nicht, welche Rolle GPT-2 hier spielt

    • Das verwendete Embedding-Modell ist standardmäßig das OpenAI-API-Embedding text-embedding-ada-002
      GPT-2 wird nur im Tokenisierungsprozess verwendet, um die Tokenlänge effizient zu berechnen
  • Gibt es ein Unternehmen, das so etwas als gehostete Version anbietet?
    Ich hätte ziemlich gern eine kleine AI, die ich mit all meinen Daten füttern und dann dazu befragen kann.

  • Ich verstehe es nicht. GPT-2 ist eines der wenigen öffentlichen Modelle von OpenAI und kann direkt lokal ausgeführt werden — warum nutzt man dafür eine API?
    https://github.com/openai/gpt-2

    • Es wird nicht GPT-2 verwendet. Die README ist falsch.
      Verwendet wird from langchain.embeddings import OpenAIEmbeddings, und das ist die OpenAI-Embeddings-API text-embedding-ada-002.
      GPT-2 kommt nur bei GPT2TokenizerFast.from_pretrained("gpt2") vor, und zwar als Längenfunktion zum Zählen von Tokens in LangChains Utility RecursiveCharacterTextSplitter().
      Auch das ergibt nicht besonders viel Sinn. Ich verstehe nicht, warum man hier den GPT-2-Tokenizer benutzt.
      Es würde völlig reichen, einfach Zeichen zu zählen oder die Wortzahl auf Basis von .split() zu ermitteln. Wie genau hier gezählt wird, ist nicht besonders wichtig.
    • Das verwendete Embedding-Modell ist das standardmäßige OpenAI-API-Embedding text-embedding-ada-002.
      GPT-2 wird nur verwendet, um während der Tokenisierung effizient die Tokenlänge zu berechnen.
      Ich habe die README aktualisiert, damit das korrekt wiedergegeben wird.
    • Ich nehme an, dass GPT-4 Fragen besser beantworten wird als GPT-2.
  • Bin ich der Einzige, der nicht seine gesamten Daten durchsuchen muss? Was ist hier eigentlich der Anwendungsfall?

    • Ein Beispiel für einen Anwendungsfall wäre dieses:
      Bei der Arbeit gibt es eine Gruppe, die verschiedene Investmentthemen diskutiert, und der Organisator ist gut vernetzt und versucht, jede Woche externe Referenten einzuladen. Das ist ziemlich lehrreich.
      Ich habe die Rohnotizen zu all diesen Vorträgen, und das Ziel war, sie durchzugehen und das Wissen sauber in eine Art Wiki zu überführen.
      Inzwischen sind über drei Jahre vergangen, und ich habe immer noch keine Zeit dafür gefunden; realistisch betrachtet werde ich sie wahrscheinlich auch künftig nicht finden.
      Um Informationen in diesen Notizen zu finden, könnte ich Textsuche verwenden, aber sie ist zu empfindlich gegenüber dem Suchstring, sodass ich oft nicht finde, was ich suche.
      Wenn Informationen über mehrere Dateien verstreut sind, muss ich alle Suchtreffer öffnen und durchgehen.
      Mit dieser Technik könnte ich alle Notizen in eine Vektor-DB legen und in natürlicher Sprache nach dem fragen, was ich brauche.
      Das lokale System würde die Frage interpretieren, die relevantesten Dokumente in der DB finden und die Frage zusammen mit den Suchergebnissen an OpenAI senden, damit es die Frage interpretiert und die Antwort in den Notizen findet.
      Ich habe früher mit LangChain einen Proof of Concept gebaut, und es hat funktioniert. Einmal gab es so einen „Aha“-Moment, als es eine Antwort gab, die Informationen aus zwei verschiedenen Vorträgen zusammengeführt hat.
      Mein Problem ist, dass es zu viele einstellbare Parameter gibt und ich noch keine gute Methode oder Metrik gefunden habe, um die Systemleistung zu bewerten. Für Ratschläge wäre ich dankbar.
      In diesen Notizen gibt es keine persönlichen Daten, also gibt es keine Datenschutzprobleme.
      Ich würde so etwas auch gern für mehr als 20 Jahre E-Mails aufsetzen, habe es aber wegen Datenschutzbedenken nicht getan. Außerdem nutze ich den Mail-Indexer notmuch, sodass der Bedarf an AI dort nicht ganz so groß ist.
      Aber bei anderen nicht persönlichen Notizen könnte dieses System, wenn man es nur einigermaßen gut zum Laufen bekommt, ein echter Lebensretter sein.
      Ich habe über Jahre hinweg zu vielen verschiedenen Themen zu viele Notizen gemacht, und dass ich sie nicht perfekt organisieren muss, hat einen ganz realen geldwerten Nutzen.
      Ich muss die Notizen einfach nur schreiben können, und die AI soll dann das Nötige daraus herausholen.
    • Manchmal hat man die Daten, weiß aber nicht, wo sie sind.
      Manchmal weiß man, wo die Daten sind, aber es sind zu viele, und man braucht nur eine schnelle Erklärung zu irgendeinem Thema.
      Manchmal hat man viele Daten aus verschiedenen Quellen, und am Ende möchte man meistens eine Zusammenfassung dessen, worin die meisten oder alle übereinstimmen, oder eine Zusammenfassung, worin sie sich unterscheiden.
      Es gibt viele Anwendungsfälle, und ich glaube, weil wir an die bisherigen Methoden zur Bewältigung solcher Aufgaben gewöhnt sind, erleben viele den Nutzen nicht als „Glühbirnenmoment“, bis sie sich selbst damit beschäftigen und die Möglichkeiten sehen.
      Der Bereich ist ziemlich breit. Ich arbeite persönlich auch an einer Variante davon: Ich speise jahrelange persönliche Notizen und Tagebücher ein und stelle dazu Fragen, um Selbstreflexion und persönliches Wachstum zu fördern.
      Ich denke, dass in diesem gesamten Bereich viel Potenzial steckt.
  • Weiß jemand, wie sich Milvus, Quickwit und Pinecone vergleichen?
    Ich überlege, ob es Beratungsgelegenheiten rund um LLMs, Fine-Tuning/Vektorsuche und Chatbots für lokale Unternehmen gibt.
    Ich würde auch gern ein Tool bauen, bei dem man Dateien per Drag-and-Drop hineinzieht und so leicht personalisierte Inferenz erhält.
    Kürzlich ist mir https://gpt-trainer.com/ im LinkedIn-Feed begegnet, und ich habe auch noch ein paar andere für Dokumente gesehen.
    https://www.explainpaper.com/
    https://www.konjer.xyz/
    Ich möchte nicht über den Preis konkurrieren.
    Es wäre zwar cool, lokale Open-Source-LLMs auf einer 3090 zu betreiben, aber das wäre wohl nicht skalierbar.
    Habt ihr andere Startups für Fine-Tuning oder Vektorsuch-Kontext gesehen?

    • Pinecone und Milvus können Alternativen dazu sein, im Vektorspeicher- und Such-Stack FAISS zu verwenden.
      Ich denke, der Unterschied bei den Embeddings wird stärker davon abhängen, womit man sie erzeugt, als von den Alternativen für Speicherung/Suche.
      Zum Beispiel könnte man die hier https://news.ycombinator.com/item?id=36649579 statt der OpenAI Embeddings API verwenden.
      Bei den Alternativen für Embedding-Speicherung/Suche fallen mir außer Performance im großen Maßstab, Kosten sowie persönlicher Präferenz oder Developer Experience keine großen Unterschiede ein.
      Quickwit höre ich zum ersten Mal; nach einem schnellen Blick auf die Website scheint es kein Vektorspeicher zu sein und vermutlich weniger relevant.
      Für Tools zum Erstellen eines eigenen ChatGPT siehe meine Liste: https://llm-utils.org/List+of+tools+for+making+a+%22ChatGPT+...
      Für Fine-Tuning-as-a-Service gibt es Lamini AI, das sich an Unternehmen richtet.
      Ein weiteres Embedding-Startup ist Weaviate.
    • Ich baue gerade eine einfache Vektor-DB nur mit numpy: https://github.com/sdan/vlite
      Ich finde, Milvus, Quickwit und Pinecone sind eher auf den Enterprise-Einsatz ausgerichtet und schwer zu benutzen.
    • Ich denke, qdrant ist besser.
  • Es gibt schnellere und genauere lokale Embedding-Modelle, warum also diese OpenAI-Abhängigkeit?

    • Welche Modelle?
  • Ich arbeite bei einem Unternehmen, das als Sicherheits-Schicht zwischen sensible Unternehmensdaten und LLMs fungiert.
    Dabei ist egal, ob das Modell HF, ChatGPT oder Bard ist und ob das Medium Gesprächsdaten, PDFs oder eine Wissensdatenbank wie Notion sind.
    Wir blenden sensible Daten aus, um riskante Nutzung zu verhindern, und machen gleichzeitig Fact-Checking.
    Falls du so etwas suchst, kann ich den Kontakt herstellen. tothepoint.tech