In diesem Tutorial verwenden Sie IBMs Docling und die Open-Source-Software IBM Granite Vision, textbasierte Einbettungen und generative KI- Modelle, um ein RAG-System zu erstellen. Diese Modelle sind über verschiedene Open Source Frameworks verfügbar. In diesem Tutorial verwenden wir Replicate, um die IBM Granite Vision und generative KI-Modelle zu verbinden, sowie HuggingFace, um eine Verbindung zum Einbetten-Modell herzustellen.
Retrieval-Augmented Generation (RAG) ist eine Technik, die mit großen Sprachmodellen (LLMs) verwendet wird, um das Modell mit einer Wissensdatenbank außerhalb der Daten zu verbinden, auf denen das LLM trainiert wurde, ohne Feinabstimmung durchführen zu müssen. Das traditionelle RAG-System ist auf textbasierte Anwendungsfälle wie Textzusammenfassung und Chatbot beschränkt.
Multimodal RAG kann multimodale LLMs (MLLM) verwenden, um Informationen aus verschiedenen Datentypen zu verarbeiten, die in die in RAG verwendete externe Wissensdatenbank aufgenommen werden sollen. Multimodale Daten können Text, Bilder, Audio, Video oder andere Formen enthalten. Beliebte multimodale LLMs sind Googles Gemini, Metas Llama 3.2 sowie OpenAIs GPT-4 und GPT-4o.
Für dieses Rezept verwenden Sie ein IBM Granite-Modell, das verschiedene Modalitäten verarbeiten kann. Sie werden ein KI-System erstellen, das Benutzeranfragen in Echtzeit aus unstrukturierten Daten in einem PDF-Dokument beantwortet.
Willkommen bei diesem Granite-Tutorial. In diesem Tutorial erfahren Sie, wie Sie die Kraft der fortschrittlichen Tools nutzen können, um eine KI-gestützte multimodale RAG-Pipeline aufzubauen. Dieses Tutorial führt Sie durch die folgenden Prozesse:
Dieses Tutorial verwendet drei hochmoderne Technologien:
Am Ende dieses Tutorials werden Sie Folgendes erreicht haben:
Dieses Tutorial richtet sich an KI-Entwickler, Forscher und Enthusiasten, die ihr Wissen über Dokumentenmanagement und fortgeschrittene Techniken der Verarbeitung natürlicher Sprache (NLP) erweitern möchten. Das Tutorial ist auch im GitHub-Repository „Granite Snack Cookbook“ der IBM Granite Community in Form eines Jupyter Notebooks zu finden.
! echo "::group::Install Dependencies"
%pip install uv
! uv pip install git+https://github.com/ibm-granite-community/utils.git \
transformers \
pillow \
langchain_classic \
langchain_core \
langchain_huggingface sentence_transformers \
langchain_milvus 'pymilvus[milvus_lite]' \
docling \
'langchain_replicate @ git+https://github.com/ibm-granite-community/langchain-replicate.git'
! echo "::endgroup::"
Um einige Protokollierungsinformationen zu sehen, können wir die Protokollstufe INFO konfigurieren.
HINWEIS: Es ist in Ordnung, die Ausführung dieser Zelle zu überspringen.
Geben Sie das Einbetten-Modell an, das für die Generierung von Texteinbettungsvektoren verwendet werden soll. Hier verwenden wir eines der Granite Embeddings-Modelle
Um ein anderes Einbetten-Modell zu verwenden, ersetzen Sie diese Codezelle durch eines aus diesem Embeddings-Modell-Rezept.
Geben Sie das MLLM an, das für das Bildverständnis verwendet werden soll. Wir werden das Granite Vision-Modell verwenden.
Geben Sie das Sprachmodell an, das für die RAG-Generierung verwendet werden soll. Hier verwenden wir den Replicate LangChain-Client, um uns mit einem Granite-Modell von der ibm-granite-Org auf Replicate zu verbinden.
Informationen zur Einrichtung von Replicate finden Sie unter Erste Schritte mit Replicate. Um eine Verbindung zu einem Modell eines anderen Anbieters als Replicate herzustellen, ersetzen Sie diese Codezelle durch eine aus dem LLM-Komponentenrezept.
Um eine Verbindung zu einem Modell eines anderen Anbieters als Replicate herzustellen, ersetzen Sie diese Codezelle durch eine aus dem LLM-Komponentenrezept.
from langchain_replicate import ChatReplicate
model_path = "ibm-granite/granite-4.0-h-small"
model = ChatReplicate(
model=model_path,
replicate_api_token=get_env_var("REPLICATE_API_TOKEN"),
model_kwargs={
"max_tokens": 1000, # Set the maximum number of tokens to generate as output.
"min_tokens": 100, # Set the minimum number of tokens to generate as output.
},
)
In diesem Beispiel verwenden wir Docling aus einer Reihe von Quelldokumenten, um die Dokumente in Text und Bilder umzuwandeln. Der Text wird dann in Abschnitte aufgeteilt. Die Bilder werden vom MLLM verarbeitet, um Bildzusammenfassungen zu erstellen.
Docling lädt die PDF-Dokumente herunter und verarbeitet sie, damit wir den Text und die Bilder der Dokumente erhalten können. Die PDF-Datei enthält verschiedene Datentypen, darunter Text, Tabellen, Grafiken und Bilder.
Nach der Verarbeitung der Dokumente werden die Textelemente in den Dokumenten weiterverarbeitet. Wir teilen sie in geeignete Größen für das von uns verwendete Einbettungsmodell auf. Eine Liste der LangChain-Dokumente wird aus den Textabschnitten erstellt.
Als Nächstes verarbeiten wir alle Tabellen in den Dokumenten. Wir konvertieren die Tabellendaten in das Markdown-Format, um sie an das Sprachmodell zu übergeben. Eine Liste der LangChain-Dokumente wird aus den Markdown-Darstellungen der Tabelle erstellt.
Abschließend verarbeiten wir alle Bilder in den Dokumenten. Hier verwenden wir das Vision Language Model, um den Inhalt eines Bildes zu verstehen. In diesem Beispiel sind wir an allen Textinformationen im Bild interessiert. Sie könnten mit verschiedenen Prompt-Texten experimentieren, um zu sehen, wie sich die Ergebnisse verbessern lassen.
HINWEIS: Die Verarbeitung der Bilder kann sehr lange dauern, abhängig von der Anzahl der Bilder und dem Dienst, der das Bildsprachmodell ausführt.
Dann können wir die LangChain-Dokumente anzeigen, die aus den Eingabedokumenten erstellt wurden.
Mithilfe des Einbettungsmodells laden wir die Dokumente aus den Textblöcken und die generierten Bildunterschriften in eine Vektordatenbank. Durch die Erstellung dieser Vektordatenbank können wir ganz einfach eine semantische Ähnlichkeitssuche über unsere Dokumente durchführen.
HINWEIS: Die Befüllung der Vektordatenbank kann je nach Einbettungsmodell und Dienst einige Zeit in Anspruch nehmen.
Geben Sie die Datenbank an, die zum Speichern und Abrufen von Einbetten-Vektoren verwendet werden soll.
Um eine andere Vektordatenbank als Milvus zu verbinden, ersetzen Sie diese Codezelle durch eine aus diesem Vektorspeicher-Rezept.
Wir fügen nun alle LangChain-Dokumente für die Text-, Tabellen- und Bildbeschreibungen zur Vektordatenbank hinzu.
Nachdem wir unsere Dokumente erfolgreich konvertiert und vektorisiert haben, können wir unsere RAG-Pipeline einrichten.
Hier testen wir die Vektordatenbank, indem wir nach Chunks mit relevanten Informationen für unsere Abfrage im Vektorraum suchen. Wir zeigen die Dokumente an, die mit der abgerufenen Bildbeschreibung verknüpft sind.
Probieren Sie gerne verschiedene Abfragen aus.
Das zurückgegebene Dokument sollte die Anfrage beantworten. Lassen Sie uns weitermachen und unsere RAG-Pipeline bauen.
Zuerst erstellen wir die Eingabeaufforderungen, damit Granite die RAG-Abfrage ausführt. Wir verwenden die Granite-Chat-Vorlage und liefern die Platzhalterwerte, die die LangChain RAG-Pipeline ersetzen wird.
Als Nächstes bauen wir die RAG-Pipeline mithilfe der zuvor erstellten Granite-Prompt-Vorlagen auf.
from ibm_granite_community.langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_classic.chains.retrieval import create_retrieval_chain
from langchain_core.prompts import ChatPromptTemplate
# Create a Granite prompt for question-answering with the retrieved context
prompt_template = ChatPromptTemplate.from_template("{input}")
# Assemble the retrieval-augmented generation chain
combine_docs_chain = create_stuff_documents_chain(
llm=model,
prompt=prompt_template,
)
rag_chain = create_retrieval_chain(
retriever=vector_db.as_retriever(),
combine_docs_chain=combine_docs_chain,
)
Die Pipeline verwendet die Abfrage, um Dokumente aus der Vektordatenbank zu finden und sie als Kontext für die Abfrage zu verwenden.
from ibm_granite_community.notebook_utils import wrap_text
output = rag_chain.invoke({"input": query})
print(wrap_text(output['answer']))
Prima! Wir haben eine KI-Anwendung entwickelt, die das Wissen aus den Texten und Bildern der Quelldokumente erfolgreich nutzen kann.
Trainieren, validieren, optimieren und implementieren Sie generative KI, Foundation Models und maschinelle Lernfunktionen mit IBM watsonx.ai, einem Studio der nächsten Generation für AI Builder in Unternehmen. Erstellen Sie KI-Anwendungen mit einem Bruchteil der Zeit und Daten.
Setzen Sie KI in Ihrem Unternehmen ein – mit branchenführendem Fachwissen im Bereich KI und dem Lösungsportfolio von IBM an Ihrer Seite.
Erfinden Sie kritische Workflows und Abläufe neu, indem Sie KI einsetzen, um Erfahrungen, Entscheidungsfindung in Echtzeit und den geschäftlichen Nutzen zu maximieren.