PdfGptIndexer – PDF-Dokumente mit OpenAI embeddings und FAISS indexieren und abfragen
(github.com/raghavan)- 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-002und 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.pydie PDFs zu verarbeiten und eine Vektordatenbank zu erstellen und mitpython chatbot.pyeine 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_KEYin der Datei.envgesetzt wird
1 Kommentare
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 umzuschaltenWenn 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 seinStandardmäß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
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
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
Ich vermute, das ist eine Folge davon, dass OpenAI kein eigenes Zertifizierungsprogramm hat
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
Das sind sie noch nicht
Könnte es Kontext extrahieren, um Fragen zu aktuellen Logs zu verstehen?
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
Also so, dass man Dokumentation schreibt und dann einfach Fragen zu deren Inhalt stellt
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?
Richtlinie zur Datennutzung: https://openai.com/policies/api-data-usage-policies
Datennutzungsrichtlinien nach Modell: https://platform.openai.com/docs/models/how-we-use-your-data
Gibt es eine Möglichkeit, genauer herauszufinden, wie persönliche Daten verwendet werden, statt nur zu prüfen, ob ein OpenAI-Schlüssel nötig ist oder nicht?
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
OpenAIEmbeddingsund ein OpenAI-LLM verwendet zu werdenSind das nicht jeweils text-embedding-ada-002 und text-davinci-003?
Ich verstehe überhaupt nicht, welche Rolle GPT-2 hier spielt
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.
Es gibt auch Komfortfunktionen wie Integrationen mit Google Drive, YouTube-Videos usw.
Es hat mehr als 50.000 täglich aktive Nutzer.
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
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 UtilityRecursiveCharacterTextSplitter().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.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.
Bin ich der Einzige, der nicht seine gesamten Daten durchsuchen muss? Was ist hier eigentlich der Anwendungsfall?
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 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?
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 finde, Milvus, Quickwit und Pinecone sind eher auf den Enterprise-Einsatz ausgerichtet und schwer zu benutzen.
Es gibt schnellere und genauere lokale Embedding-Modelle, warum also diese OpenAI-Abhängigkeit?
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