Dieses Notebook in Google Colab ausführen
Jeder Schritt unten als ausführbares Notebook, mit dem Überblick inline abspielbar. Nichts zu installieren.
So funktioniert es
Fünf Endpoints, jeder mit einer Aufgabe:
Das Retrieval ist hier bewusst schlicht: Vektoren in einer Python-Liste, Cosinus-Ähnlichkeit in einer Schleife. Das ist genau die richtige Menge Maschinerie für ein paar Dutzend Quellen und hält die beweglichen Teile sichtbar. Wenn du daraus herauswächst, behandelt Einen privaten RAG-Bot bauen dieselbe Pipeline mit einer echten Vektordatenbank und einem Re-Ranking-Schritt.
Einrichten
Eine Abhängigkeit und ein Schlüssel von der API-Einstellungsseite.notebook.py und beginne mit den Imports und der Konfiguration. Die beiden Listen unten sind der gesamte Zustand des Notebooks: sources erfasst, was du hinzugefügt hast, und chunks enthält die durchsuchbaren Stücke.
HOSTS ordnet einem Hostnamen eine Stimme zu. Beide Stimmen stammen aus tts-xai-v1, und das ist wichtig: Stimmen gehören zu Modellen, und eine Stimme aus einer Familie an ein Modell aus einer anderen zu schicken, ist der häufigste erste Fehler mit dem Speech-Endpoint.
Ein Modell wählen, das nicht veraltet
Ein Chat-Modell in ein Projekt fest einzucodieren, garantiert, dass das Projekt altert. Venice veröffentlicht über/models/traits, welches Modell aktuell welche Rolle innehat, sodass du das aktuelle Default abfragen kannst, statt eines beim Namen zu nennen.
most_intelligent bringt dir ein stärkeres Modell für die argumentationslastige Zusammenfassung, und default_reasoning liefert eines, das offen denkt. Siehe Modelle für die vollständige Liste.
Quellen hinzufügen
Eine Quelle ist entweder eine URL oder eine Datei auf der Festplatte, und Venice hat für jedes einen Endpoint. Beide liefern reinen Text zurück, und das ist der Punkt: Der Rest des Notebooks kümmert sich nicht darum, woher eine Quelle stammt./augment/scrape liefert Markdown statt rohem HTML zurück, sodass kein Boilerplate zu entfernen ist. /augment/text-parser akzeptiert PDF, Word, Excel und reinen Text bis zu 25 MB und meldet neben dem Text auch die Tokenanzahl. Dokumentenverarbeitung behandelt seine Optionen im Detail.
Chunking und Embeddings
Ein ganzes Dokument einzubetten, erzeugt einen einzigen Vektor, der ein Mittelwert von allem ist, was es sagt — zu grob, um eine bestimmte Aussage abzurufen. Es aufzuteilen erzeugt Vektoren, die jeweils etwas bedeuten. Teile an Absatzgrenzen statt bei einer festen Zeichenanzahl. Ein Chunk, der mitten im Satz endet, wird schlecht abgerufen, weil das Embedding von einem Fragment stammt.embed bündelt in Batches, weil der Endpoint eine Liste entgegennimmt und eine Anfrage für vierundsechzig Chunks in der Gesamtzeit weit günstiger ist als vierundsechzig Anfragen. text-embedding-bge-m3 liefert 1024 Dimensionen zurück und kommt gut mit mehrsprachigen Quellen zurecht.
Eine Quelle hinzuzufügen ist nun: lesen, aufteilen, einbetten und erfassen. Der Betrag jedes Vektors wird daneben gespeichert, weil er sich nie ändert und ihn innerhalb der Ähnlichkeitsschleife neu zu berechnen verschwendete Arbeit wäre.
number ist das, was später Zitate ermöglicht. Jeder Chunk merkt sich, aus welcher Quelle er stammt, sodass eine Antwort darauf zurückverweisen kann.
Die richtigen Passagen abrufen
Cosinus-Ähnlichkeit zwischen dem Fragevektor und jedem Chunk-Vektor, sortiert, top k. Für ein paar Tausend Chunks läuft das schneller als der Netzwerkaufruf, der den Fragevektor erzeugt hat.Antworten mit Zitaten
Der Unterschied zwischen einer verankerten Antwort und einer selbstbewussten Vermutung liegt vollständig im Prompt. Zwei Anweisungen erledigen die Arbeit: Antworte nur aus den Notizen und sag es, wenn die Notizen nicht ausreichen. Ohne die zweite füllt ein Modell die Lücke leise aus dem Gedächtnis — genau der Fehlermodus, den du zu vermeiden versuchst. Die Notizen im Prompt zu nummerieren, gibt dem Modell ein Zitations-Vokabular. Es schreibt[2], und du kannst das zurück auf eine Quelle auflösen.
Das Skript für den Überblick schreiben
Hier hört das Notebook auf, eine Suchbox zu sein. Eine Zusammenfassung ist etwas, das du liest; ein Überblick ist etwas, das du anhörst, und die beiden wollen unterschiedliche Prosa. Dialog funktioniert im Audio besser, weil der Sprecherwechsel das Tempo für dich vorgibt, und eine Frage von einem Host ist eine natürliche Möglichkeit, die nächste Idee einzuführen. Drei Einschränkungen sind wichtig, und alle drei kommen vom Audio, nicht vom Text:- Kein Markdown, keine URLs. Ein Sprachmodell liest
https://docs.venice.aiZeichen für Zeichen vor. - Abkürzungen ausschreiben. T E E beim ersten Mal, nicht tee.
- Turn-Länge variieren. Gleich lange Turns klingen wie zwei Personen, die einander eine Liste vorlesen.
enum auf speaker sorgt dafür, dass jeder Turn auf eine Stimme abgebildet wird, die du hast.
spread Chunks über die gesamte Sammlung sampelt, anstatt per Ähnlichkeit abzurufen. Jeden n-ten Chunk zu nehmen ist grob und funktioniert gut: Es erreicht das Ende langer Dokumente, was das Nehmen der ersten zwölf nie tun würde.
Behandle die Turn-Anzahl als Hinweis, nicht als Anweisung. Sechzehn anzufordern hat hier je nach Materialfülle zwischen sechzehn und achtundzwanzig Turns geliefert. Wenn du eine harte Obergrenze brauchst, kürze turns vor dem Rendern, statt mit dem Prompt zu diskutieren.
Zwei Stimmen in eine Spur rendern
Jeder Turn wird zu einer Speech-Anfrage, mit der Stimme, die vom Sprechenden bestimmt wird.pool.map bewahrt die Eingabereihenfolge, sodass die Turns in der Reihenfolge zurückkommen, in der sie geschrieben wurden, egal welcher zuerst fertig ist. Vier Worker sind eine bewusste Obergrenze und kein Maximum: Mehr Parallelität liefert auf niedrigeren Tiers 429-Fehler zurück, und der Job ist ohnehin vom längsten einzelnen Turn dominiert.
Ausführen
Mach es zu deinem
Die Quellen sind das ganze Spiel. Alles Nachgelagerte ist begrenzt durch das, was du hineinsteckst. Gescrapete Seiten bringen ihre Navigation und Footer mit, was fürs Beantworten harmlos ist, aber in einem Überblick als Host auftaucht, der ernsthaft ein Doku-Verzeichnis diskutiert. Wenn das passiert, wirf Chunks unter einer Längenschwelle raus oder filtere offensichtliches Möblierungsmaterial vor dem Embedden. Tausche die Stimmen aus.HOSTS sind zwei Einträge in einem Dictionary. tts-xai-v1 bringt sechsundzwanzig Stimmen mit, und andere Familien haben ihre eigenen; GET /models?type=tts listet voices pro Modell. Zwei Stimmen, die klar kontrastieren, sind leichter zu verfolgen als zwei, die lediglich verschieden sind.
Klone deine eigene. Voice Cloning verwandelt eine kurze Probe in einen Voice-Handle, den du direkt in HOSTS einsetzen kannst.
Füge eine dritte Person hinzu. Nichts in der Pipeline setzt zwei Sprecher voraus außer dem Schema-enum. Einen Interviewer hinzuzufügen, der nur Fragen stellt, verändert das Gefühl erheblich.
Bewahre das Skript auf. turns in eine JSON-Datei neben dem Audio zu schreiben, kostet zwei Zeilen und erspart dir einen erneuten Render, wann immer du einen einzelnen Satz feinjustieren willst.
Wie es weitergeht
Privater RAG-Bot
Dieselbe Retrieval-Pipeline mit einer echten Vektordatenbank und Re-Ranking.
Zitierte Antworten mit Websuche
Die Quellen automatisch finden, statt sie selbst zu benennen.
Text-to-Speech
Referenz zum Speech-Endpoint, seinen Stimmen und Streaming.
Dokumentenverarbeitung
Alles, was der Text-Parser akzeptiert, und was er zurückliefert.