Wussten Sie? Im Film Ragatouille ist das Gericht Remy nicht eigentlich eine Ratatouille, sondern eine raffinierte Version des Gerichts namens "Confit Byaldi".

Byaldi ist Ragatouilles Mini -Schwesterprojekt. Es ist ein einfacher Wrapper um das colpali-Repository, um es einfach zu machen, multi-modale Modelle wie Colpali mit einer vertrauten API zu verwenden.
Erstens eine Warnung: Dies ist eine Bibliothek vor der Veröffentlichung, die unkomprimierte Indizes verwendet und andere Arten von Verfeinerungen fehlt.
Derzeit unterstützen wir alle Modelle, die vom zugrunde liegenden Colpali-Engine unterstützt werden, einschließlich der neueren und besseren Colqwen2-Checkpoints wie vidore/colqwen2-v1.0 . Im Großen und Ganzen ist das Ziel für Byaldi, alle Colvlm -Modelle zu unterstützen.
Zusätzliche Backends werden in zukünftigen Updates unterstützt. Da Byaldi vorhanden ist, um die Einführung multi-modaler Retriever zu erleichtern, beabsichtigen wir, auch Modelle wie Visagrag zu unterstützen.
Schließlich fügen wir einen HNSW-Indexierungsmechanismus, einen Pooling und, wer weiß, vielleicht 2-Bit-Quantisierung hinzufügen?
Es wird aktualisiert, wenn sich das multimodale Ökosystem weiterentwickelt!
Um PDF in Bilder mit einer freundlichen Lizenz umzuwandeln, verwenden wir die pdf2image -Bibliothek. In dieser Bibliothek muss poppler auf Ihrem System installiert werden. Poppler ist sehr einfach zu installieren, indem sie den Anweisungen auf ihrer Website folgen. Das tl; dr ist:
Macos mit homebrew
brew install popplerDebian/Ubuntu
sudo apt-get install -y poppler-utilsGemma verwendet eine aktuelle Version der Flash -Aufmerksamkeit. Damit die Dinge so reibungslos wie möglich ausgeführt werden, empfehlen wir Ihnen, sie nach der Installation der Bibliothek zu installieren:
pip install --upgrade byaldi
pip install flash-attnColpali verwendet milliarden Parametermodelle, um Dokumente zu codieren. Wir empfehlen, eine GPU für reibungslose Operationen zu verwenden, obwohl schwache/ältere GPUs vollkommen in Ordnung sind! Die Codierung Ihrer Sammlung würde unter schlechter Leistung bei CPU oder Abgeordneten leiden.
byaldiByaldi ist nach Ragatouille größtenteils nachempfunden, was bedeutet, dass alles so konzipiert ist, dass alles möglich ist, sodass Sie sehr schnell darauf aufbauen können, anstatt Zeit zu verbringen, um herauszufinden, wie Sie eine Abrufpipeline erstellen können.
Das Laden eines Modells mit byaldi ist extrem einfach:
from byaldi import RAGMultiModalModel
# Optionally, you can specify an `index_root`, which is where it'll save the index. It defaults to ".byaldi/".
RAG = RAGMultiModalModel . from_pretrained ( "vidore/colqwen2-v1.0" )Wenn Sie bereits einen Index haben und ihn zusammen mit dem Modell laden möchten, das zum Abfragen erforderlich ist, können Sie dies genauso einfach tun:
from byaldi import RAGMultiModalModel
# Optionally, you can specify an `index_root`, which is where it'll look for the index. It defaults to ".byaldi/".
RAG = RAGMultiModalModel . from_index ( "your_index_name" ) Das Erstellen eines Index mit byaldi ist einfach und flexibel. Sie können eine einzelne PDF -Datei, eine einzelne Bilddatei oder ein Verzeichnis mit mehreren davon indexieren . So erstellen Sie einen Index:
from byaldi import RAGMultiModalModel
# Optionally, you can specify an `index_root`, which is where it'll save the index. It defaults to ".byaldi/".
RAG = RAGMultiModalModel . from_pretrained ( "vidore/colqwen2-v1.0" )
RAG . index (
input_path = "docs/" , # The path to your documents
index_name = index_name , # The name you want to give to your index. It'll be saved at `index_root/index_name/`.
store_collection_with_index = False , # Whether the index should store the base64 encoded documents.
doc_ids = [ 0 , 1 , 2 ], # Optionally, you can specify a list of document IDs. They must be integers and match the number of documents you're passing. Otherwise, doc_ids will be automatically created.
metadata = [{ "author" : "John Doe" , "date" : "2021-01-01" }], # Optionally, you can specify a list of metadata for each document. They must be a list of dictionaries, with the same length as the number of documents you're passing.
overwrite = True # Whether to overwrite an index if it already exists. If False, it'll return None and do nothing if `index_root/index_name` exists.
) Und das war's! Das Modell beginnt sich zu drehen und Ihren Index zu erstellen, wodurch alle erforderlichen Informationen auf die Festplatte exportiert werden. Sie können dann die oben angegebene Methode RAGMultiModalModel.from_index("your_index_name") verwenden, um sie zu laden, wann immer es erforderlich ist (Sie müssen dies nicht gleich nach dem Erstellen tun - es ist bereits in Speicher geladen und bereit zu gehen!).
Die Hauptentscheidung, die Sie hier treffen müssen, ist, ob Sie store_collection_with_index auf true oder nicht festlegen möchten. Wenn es auf True festgelegt ist, vereinfacht dies Ihren Workflow erheblich: Die Basis64-kodierte Version relevanter Dokumente wird im Rahmen der Abfrageergebnisse zurückgegeben, sodass Sie sie sofort an Ihre LLM leiten können. Es fügt Ihrem Index jedoch erhebliche Speicher- und Speicheranforderungen hinzu. Möglicherweise möchten Sie ihn auf False (die Standardeinstellung) festlegen, wenn Sie diese Ressourcen nicht zu wenig haben, und die base64 -codierten Versionen selbst erstellen, wann immer dies erforderlich ist.
Sobald Sie einen Index erstellt oder geladen haben, können Sie nach relevanten Dokumenten suchen. Auch hier ist es ein einzelner, sehr einfacher Befehl:
results = RAG . search ( query , k = 3 ) Die Ergebnisse sind eine Liste von Result , die Sie auch als normale Wörterbücher behandeln können. Jedes Ergebnis erfolgt in diesem Format:
[
{
"doc_id" : 0 ,
"page_num" : 10 ,
"score" : 12.875 ,
"metadata" : {},
"base64" : None
},
...
] page_num sind 1-iNDEXED, während doc_ids 0-idexiert sind. Dies soll vereinfachen, mit anderen PDF-Manipulationstools zu arbeiten, wobei die 1. Seite im Allgemeinen Seite 1. page_num für Bilder und einseitige PDFs immer 1 ist. Es ist nur für längere PDFs nützlich.
Wenn Sie Metadaten bestanden oder mit der Flagge codiert sind, um die Base64 -Versionen zu speichern, werden diese Felder besiedelt. Die Ergebnisse werden nach Punktzahl sortiert, daher ist Punkt 0 aus der Liste immer das relevanteste Dokument usw. ...
Da Indizes in Memory sind, sind sie zusätzlich freundschaftlich! Wenn Sie einige neue PDFs einnehmen müssen, laden Sie Ihren Index einfach mit from_index und rufen Sie dann add_to_index mit ähnlichen Parametern wie die ursprüngliche index() -Methode auf:
RAG . add_to_index ( "path_to_new_docs" ,
store_collection_with_index : bool = False ,
...
)