Marea majoritate a documentelor reale dintr-o companie (manuale de inginerie, rapoarte medicale, cataloage tehnice) transmit informația critică prin imagini, scheme și grafice, nu doar prin text. Un sistem RAG tradițional care ignoră imaginile sau extrage doar textul brut din PDF pierde peste 50% din informație.
Multi-Modal RAG în LlamaIndex abordează această provocare pe două fronturi: utilizează modele de embedding multimodal (precum CLIP sau Google Vertex Multimodal Embeddings) pentru a reprezenta imaginile și textul în același spațiu vectorial comun, și modele de limbaj multimodal (GPT-4o, Claude 3.5 Sonnet, Qwen2-VL) pentru sinteza finală.
La interogare, sistemul poate returna atât fragmente de text relevante cât și diagramele tehnice asociate, permițând modelului să inspecteze schema vizuală și să ofere răspunsuri tehnice cu precizie microscopică.
Sintaxă, opțiuni și concepte cheie
| Opțiune / Concept | Descriere practică |
|---|---|
MultiModalVectorStoreIndex |
Indexul specializat ce gestionează noduri textuale și noduri de imagine. |
MultiModalEmbedding |
Modelul ce calculează vectori compatibili atât pentru șiruri de caractere cât și pentru pixeli. |
ImageNode |
Tipul de nod LlamaIndex ce conține imaginea brută, metadatele vizuale și descrierea opțională. |
MultiModalQueryEngine |
Motorul ce alimentează LLM-ul cu textul extras și referințele de imagine simultan. |
Exemple practice și configurații
Exemplul 1: Interogarea unui catalog tehnic cu diagrame electronice în Python
Cum se inițializează indexul multimodal din LlamaIndex.
from llama_index.core.indices import MultiModalVectorStoreIndex
from llama_index.multi_modal_llms.openai import OpenAIMultiModal
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.core import SimpleDirectoryReader
# Citim documentele și imaginile dintr-un director comun:
documente = SimpleDirectoryReader("manuale_electronice/").load_data()
# Construim indexul multimodal:
index = MultiModalVectorStoreIndex.from_documents(documente)
# Inițializăm motorul multimodal:
llm_vizual = OpenAIMultiModal(model="gpt-4o", max_new_tokens=500)
query_engine = index.as_query_engine(multi_modal_llm=llm_vizual)
raspuns = query_engine.query("Unde este poziționată siguranța F1 în schema plăcii de bază?")
print(raspuns)
Rezultat & Impact
Modelul identifică diagrama tehnică, citește schema electronică și explică exact poziția fizică a siguranței.
Greșeli frecvente și bune practici
- Extragerea de imagini din documente la rezoluții prea slabe (sub 300 DPI), făcând textul mărunt din tabele sau legende ilizibil pentru modelul multimodal.
- Neglijarea costurilor pe tokeni vizuali atunci când un catalog cu mii de pagini include sute de mici imagini decorative irelevante.