Supercharge Your RAG with DeepSeek's Reasoning Model

LARRUZ builds a RAG pipeline from scratch using DeepSeek's reasoning model. The system chunks PDFs at 500 characters, embeds them with Faiss, then uses DeepSeek R to answer questions and re-rank retrieved blocks. A live demo with research papers shows how chain-of-thought reasoning improves answer quality.
Chapters
Sehen wir uns an, wie sie mit einem Reasoning Modell wie Deep SSeek R ihre Rack Pipeline aufladen können. In diesem Video erstellen wir eine einfache Rack Pipeline ohne externe Frameworks wie LangChain oder Lama Index. Sie wird jedoch von einem Reasoning LLM unterstützt. Hier kommt der heutige Sponsor Seba Cloud ins Spiel. Mehr dazu später im Video. Unsere Rack Pipeline besteht aus zwei verschiedenen Komponenten. Der erste Schritt ist die wissensbasierte Erstellung und der zweite Schritt ist die Gene. Bei der wissensbasierten Erstellung nehmen wir eine Reihe von PDF Dateien und wandeln sie in kleinere Abschnitte um. Anschließend berechnen wir mit einem Einbettungsmodell die Einbettungen für diese. Anschließend legen wir diese in einem Vektorspeicher ab. Während des Generierungsschritts erhalten wir eine Abfrage vom Benutzer. Wir betten diese Abfrage mithilfe desselben Einbettungsmodells ein. Wir rufen relevante Abschnitte ab. Diese relevanten Abschnitte übergeben wir zusammen mit der ursprünglichen Abfrage an ein Reasoning Modell und um die endgültige Antwort zu generieren. Normalerweise gibt es noch einen weiteren Schritt wie zb das erneute Ordnen der vom Abrufprozess zurückgegebenen Blöcke. Mit Hilfe eines Schlussfolgerungsmodells kann dieser Teil jedoch tatsächlich übernommen werden. Ich zeige euch später im Video ein Beispiel. OK, hier ist der code. Es gibt zwei Hauptdateien. Eine ist Indexing py, die den wissensbasierten Erstellungsteil enthält und die zweite Datei ist Retrieval Python, die den Generierungssteil enthält. Dieser Code wird auf GitHub verfügbar sein. Der Link befindet sich in der Videobeschreibung. Zunächst benötigen wir einen Datensatz. In diesem Fall verwende ich drei verschiedene Artikel zu sehr unterschiedlichen Themen. Der erste befasst sich mit der Erkennung von Covid-19 anhand von Röntgenbildern. Der zweite ist eine Schätzung des Bissgewichts mit Hilfe handelsüblicher Ohrhörer. Dabei werden variable Sensoren verwendet und um Kaubewegungen zu erkennen und anhand dieser dann die Nahrungsaufnahme zu schätzen. Der dritte Artikel befasst sich mit einem weiteren variablen Sensor, die Kau Attacken erkennen können. Anschließend werden Signalverarbeitungstechniken erläutert, mit denen diese Kau Attacken segmentiert werden können. Nun sind die Einzelheiten der Arbeiten nicht wichtig. Dies ist lediglich eine Forschungsarbeit, die ich während meines Studiums durchgeführt habe. Fangen wir also mit einem Blick auf den Code an. Der erste ist Indexing. PY der Wissensbasierte Erstellung steil. Zuerst müssen wir unsere Dokumente laden. Ich habe also einen Ordner namens Data. Im Grunde genommen wird der Ordner betrachtet, jede PDF Datei gelesen und dann der Text von jeder Seite extrahiert. Die einzigen Metadaten, die enthalten sind, sind die Dateinamen. Der nächste Schritt besteht darin, die Dokumente in Abschnitte zu unterteilen. Dazu verwenden wir eine naive Abschnittsstrategie. Wir nehmen eine Abschnittsgrösse von 500 Zeichen mit 50 Überlappungen. Dies ist eine sehr naive Abschnittsstrategie. Es gibt auch andere Abschnittsstrategien wie semantisches Abschnittsmanagement oder rekursive Zeichentext Trennung. Einige davon sollten Sie sich unbedingt ansehen. In diesem Beispiel möchte ich Ihnen zeigen, wie eine naive Abschnittsstrategie auch dann hilfreich sein kann, wenn Sie ein Schlussfolgerungsmodell verwenden. Wenn Sie sich jedoch für eine weiterführende Behandlung des Themas interessieren, empfehle ich Ihnen dringend, sich meinen Kurs mit dem Namen Rack Beyond Basics anzusehen, in dem fortgeschrittene Techniken für verschiedene Komponenten Ihrer RAM Pipeline behandelt werden. Den Link finden Sie in der Videobeschreibung. Nun nehmen wir diese Chunks, berechnen Einbettungen und legen sie in einem Vektorspeicher ab. Auch hier haben Sie verschiedene Möglichkeiten für Ihr Einbettungsmodell. Ich verwende ein OpenW Gewichtungseinbettungsmodell, das auf Hugging Face verfügbar ist. Sie können eine beliebige externe API verwenden und der Code funktioniert trotzdem. Hier empfängt die Funktion also die Chunks und dann gibt die Funktion die berechneten Werte für alle Chunks zurück. Als nächstes müssen wir alles in einem Vektorspeicher ablegen. In diesem Fall ist der Vektorspeicher der Wahl fs. Es handelt sich um einen Open Source Vektorspeicher. Sie können ihn durch Chroma DBUH Pine KONE ersetzen. So sieht der allgemeine Ablauf aus. Zuerst nehmen wir unsere Dokumente. Wir berechnen Chunks. Die Chunks werden an das Einbettungsmodell übergeben, um Einbettungen zu erstellen. Dann verwenden wir Dateien, um unseren Index zu erstellen. Wir speichern die Einbettungen auch als NumPy Array und nehmen unsere ursprünglichen Blöcke und schreiben sie in eine JSON Datei. So sieht die JSON Datei aus. Hier ist zum Beispiel ein Block. Die einzigen Metadaten, die gespeichert werden, sind der Dateiname zusammen mit dem Text des Blocks sprechen wir nun über den Generierungssteil, bei dem wir für eine Abfrage relevante Blöcke abrufen und dann ein Argumentationsmodell verwenden, um die endgültige Antwort zu generieren. Während des Abrufvorgangs benötigen wir die von uns gespeicherten Einbettungen. Wir laden auch die Blöcke, die in der JSON Datei gespeichert wurden. Da wir Einbettungen für unsere Abfrage berechnen müssen, müssen wir auch das ursprüngliche Einbettungsmodell laden. Wir erhalten eine Eingabeabfrage vom Benutzer und verwenden dann dieses Abfrage Rack System, um die endgültige Antwort zu generieren. Intern berechnen wir also die Einbettungen für diese Abfrage. Dann verwenden wir diese Einbettungen, um eine Vektorsuche durchzuführen. In diesem Fall Möchte ich die 20 wichtigsten Blöcke abrufen, die laut dem Einbettungsmodell der Benutzerabfrage am ähnlichsten sind. Im Allgemeinen möchten Sie eine sehr große Anzahl von Blöcken abrufen, sagen wir also etwa 50 oder 100 dann möchten sie dazwischen ein Neuordnungsmodell verwenden, das die zurückgegebenen Blöcke anhand der Ähnlichkeit mit der Benutzerabfrage neu ordnet. Da wir jedoch ein Schlussfolgerungsmodell verwenden, kann es anhand der Gedankenkette feststellen, welche Blöcke für die Benutzerabfrage relevanter sind. Ich zeige Ihnen später im Video ein Beispiel. Wir rufen also die Indizes ab und verwenden diese dann, um die entsprechenden Textblöcke abzurufen. Wir fügen sie zu einem einzigen Textblock zusammen und geben den Textblock dann zusammen mit der Benutzerabfrage aus. Dies wird also als Kontext verwendet. Damit das LLM eine Antwort generieren kann, müssen wir auch einige Anweisungen geben. Im ersten Teil des Videos werden die Anweisungen sehr einfach sein. Die erweiterte Eingabeaufforderung Bitte geben Sie basierend auf dem bereitgestellten Kontext eine Antwort auf die folgende Frage. Falls der Kontext die Antwort nicht enthält, antworten Sie bitte mit Es tut mir leid, aber der bereitgestellte Kontext enthält nicht die Informationen zu Ihrer Frage. Anschließend hängen wir den Kontext zusammen mit der ursprünglichen Benutzerabfrage an. Das LLM, das wir verwenden möchten, ist Deepseek R. Wir verwenden jedoch die Simanova Cloud. Das Tolle daran ist, dass Sie den Open IPython Client verwenden, sodass es sehr einfach ist, zwischen den Modellen zu wechseln. Sie müssen lediglich die Sonova API Basis URL zusammen mit dem API Schlüssel angeben. Sobald Sie den Client erstellt haben, leiten wir diese erweiterte Eingabeaufforderung, die auch die Benutzerabfrage enthält, an das Modell weiter, um die endgültige Antwort vom Modell zu erhalten. Was genau ist Sbanoa? Sie sind die Entwickler von RDUs, eine Alternative zu GPUs. Sie nennen sie rekonfigurierbare Datenflusseinheiten. Stellen Sie sie sich als Alternative zu Grogs LPUs vor. Anders als Grok hosten sie jedoch das vollständige Deepseek R Modell und nicht nur eine Version. Tatsächlich sind Sie einer der schnellsten Inferenzanbieter für Deepseek R, das bis zu 198 Token pro Sekunde verarbeiten kann, was ziemlich verrückt ist. Sie können auf Ihrer Plattform auf deepseek R zugreifen, sowohl auf Ihrem Playground als auch über Ihre API. Hier haben Sie eine Liste verschiedener offener Gewichtsmodelle. Das vollständige deepseek R steht ganz oben. Wenn ich das nun auswähle und eine Abfrage wie diese sende, ist die Geschwindigkeit ziemlich unglaublich. Hier sehen Sie den generierten Denkprozess zusammen mit der endgültigen Ausgabe. Sie sehen, dass ES mit fast 160 Token pro Sekunde. Läuft. Hier sehen Sie also noch einmal den Denkprozess, der ziemlich ausführlich ist. Und dann haben wir die endgültige Ausgabe. Sie können sich jetzt kostenlos anmelden und hier mit dem Modell experimentieren. Wenn Sie interessiert sind, können Sie sich auch in die Gewichtsliste eintragen, um Zugriff auf die API zu erhalten. Wir müssen den Modellnamen R angeben und das Beste daran ist, dass Sie weiterhin den OpenAI Python Client verwenden. Sobald Sie Zugriff auf den API Schlüssel haben, klicken Sie einfach auf Neuen API Schlüssel generieren. Als Entwickler können Sie dann kostenlos loslegen. So sehen meine Konfigurationen aus. Ich habe eine AV Datei, in der ich meinen API Schlüssel speichere, dann die Senua Basis URL und dann den Modellnamen. Sie werden feststellen, dass ich einen anderen API Endpunkt verwende. Dies ist während des Early Access. Aber wenn das deepseek R Modell verfügbar ist, können Sie den normalen API Endpunkt verwenden. OK. Führen wir den Abrufcode aus. Da ich meinen Index bereits erstellt habe. Um den Abrufteil auszuführen, führe ich Python Retrieval py aus. Führen wir den Befehl aus. OK. Jetzt können wir eine Frage stellen. Ich möchte also sagen, welche Auswirkungen die Byte-Größe auf die Datenaufnahme. Hat. Das ist eine sehr spezifische Frage. Mal sehen, ob das Programm die Antwort tatsächlich herausfinden kann. Zunächst zeige ich dir den Kontext, den es zurückgibt. Das sind verschiedene Dokumente und wie du siehst, wird das Wort in einigen Fällen einfach in der Mitte geteilt, da wir eine zeichenbasierte Chunking Strategie verwenden. Der erste Chunk ist relevant, da er sich mit der Bissrate und deren Auswirkungen auf die Reduzierung der Nahrungsaufnahme befasst. Es gibt aber auch andere Chunks wie diesen, die einfach nur auf ein Paper verweisen. Hier ist ein weiterer Verweis auf ein anderes Paper. Richtig. Einige der Chunks sind relevant, andere überhaupt nicht. In den Papers wird die Bissgrösse nicht erwähnt, sondern die Bissrate oder die Anzahl der Kaubewegungen pro Bissen. Aber schauen wir uns mal an, wie deepseek R intern denkt. Es heißt Der Nutzer fragt nach den Auswirkungen der Bissgrösse auf die Nahrungsaufnahme. Ich muss den bereitgestellten Kontext prüfen, um relevante Informationen zu finden, und dann durchsucht es verschiedene Dokumente. Dokument 1 erwähnt beispielsweise die Reduzierung der Bissrate, also der Anzahl der Bytes pro Minute. Dies kann die Energieaufnahme reduzieren. Es bezieht sich auch auf Studien, die zeigen, dass eine Erhöhung oder Verringerung der Aufnahmerate die Energieaufnahme beeinflusst. Richtig, Es geht also in die richtige Richtung. Eine Sache, die Sie jetzt bemerken können, ist, dass es sich auf verschiedene Dokumente bezieht. Wenn wir es also dazu auffordern, als Re Ranker zu fungieren, kann ein Schlussfolgerungsmodell das tun. Ich werde Ihnen später im Video ein Beispiel zeigen. Es geht also davon aus, dass die wichtigsten Punkte darin bestehen, dass eine Erhöhung der Anzahl der Auswahlmöglichkeiten pro Bissen, die effektiv die Bissengrösse reduziert, zu einer reduzierten Energieaufnahme führt. Es ist jetzt wirklich intelligent, dass es herausfindet, dass der Kontext nicht direkt die Bissen Größe erwähnt, sondern die Auswahl pro Bissen, die sich darauf bezieht, wie viel pro Bissen konsumiert wird. Ein kleineres Modell könnte diese Tatsache völlig ignorieren. Basierend darauf gibt es also eine endgültige Antwort. Wenn ich jetzt die Frage so Welche Auswirkungen hat die Bissrate? Auf die Energieaufnahme? Ist der Aufbau ähnlich. Aber da wir dieses Mal direkt über die Rate sprechen, wird nicht erwähnt, dass sie im bereitgestellten Kontext nicht direkt diskutiert wird. Jetzt kann das Schlussfolgerungsmodell als Re Ranking Modell verwendet werden. So hier ist, wie wir es machen werden M Ich habe die ursprüngliche erweiterte Eingabeaufforderung, aber ich habe dies vor der Beantwortung hinzugefügt. Analysieren Sie jedes Dokument im Kontext und ermitteln Sie, ob es die Antwort auf die Frage enthält. Dann soll es ihm, basierend auf der Relevanz für die Frage eine Punktzahl zuweisen. Außerdem wird es zuerst die relevantesten Dokumente auflisten und die Frage dann nur auf Grundlage dieser Dokumente beantworten. Mal sehen, was passiert, wenn wir dieselbe Frage stellen. In diesem Fall durchläuft es während des Denkprozesses jedes Dokument einzeln, aber am Ende gibt es diese Liste zurück, bevor es die Frage beantwortet. Dokument Nummer 1 ist also 10 x 10 weil es direkt besagt, dass eine Reduzierung der Bissrate die Energieaufnahme reduzieren kann. Dokument Nummer 2 verweist nun auf eine Studie mit dem Titel Slowing Byte Rate Reduces Energy Intake, die in Wirklichkeit eine Studie ist, die für den angegebenen Kontext irrelevant ist. Dokument 15 hebt hervor, dass eine Erhöhung der Kauanzahl pro Bissen die Gesamtenergieaufnahme sowohl bei Übergewichtigen als auch bei normalen Personen reduziert. In diesem Fall Fall hat es 5 Dokumente aus den 20 von uns bereitgestellten Dokumenten basierend auf der Relevanz ausgewählt und auch relevante Punktzahlen vergeben. Genau das macht also ein dediziertes Re Ranking Modell. Sie können also ein Reasoning Modell direkt verwenden, um ein Re Ranking durchzuführen, was ein entscheidender Schritt jeder robusten Rack Pipeline ist. Dies war also ein kurzes Beispiel dafür, wie Sie Ihre Rack Pipeline mit Hilfe eines Reasoning Modells aufladen können. Jetzt können Sie noch viel mehr tun. Sie können das Reasoning Modell beispielsweise verwenden, um Ihre Agenten Workflows zu betreiben, was noch viel wichtiger sein wird, da Sie immer einen Reasoning und Bewertungsschritt benötigen, wenn Sie ein leistungsstarkes Agentensystem erstellen. Und da Reasoning Modelle im Vergleich zu Nicht Reasoning Modellen viel mehr Token generieren, benötigen Sie definitiv einen sehr schnellen Inferenz API. Endpunkt. Hier kommen Anbieter wie Sabanoa ins Spiel. Schauen Sie sie sich unbedingt an. Lassen Sie mich jetzt wissen, ob Sie an Inhalten zu Agenten Systemen, Basis von Deep K oder anderen Reasoning Modellen interessiert sind und was Sie mit diesem leistungsstarken Modell erstellen möchten. Schreiben Sie Ihre Ideen unten in den Kommentarbereich, wie auch immer. Ich hoffe, Sie fanden dieses Video hilfreich. Danke fürs Zuschauen und wie immer bis zum nächsten Mal.










