For the last two years, RAG (Retrieval Augmented Generation) has been synonymous with "Chunking Text PDFs." We take a text document, split it into 500-word chunks, embed them with OpenAI text-embedding-3-small, and store them in Pinecone.
This works for Wikis. It fails catastrophically for the real world.
The "Dark Data" Problem:
Zoom Recordings: 1 hour of audio/video.
Financial Reports: A PDF is not just text; it contains bar charts, tables, and trend lines.
Blueprints: An architectural drawing has zero parseable text but contains infinite information.
Standard RAG is blind to this. Multimodal RAG gives it eyes and ears.
Part 1: The Three Approaches to Multimodality
How do you index a video? There are three main strategies, ranging from simple to state-of-the-art.
Level 1: Transcription (The Legacy Way)
You convert the non-text modality into text.
Audio: Run OpenAI Whisper to generate a transcript
(.vtt). Chunk text. Embed text.Image: Run an OCR (Optical Character Recognition) engine or an Image-to-Text model (like BLIP) to generate a textual description. "A photo of a red car." Embed that text.
Pros: Cheap. Works with existing vector DBs.
Cons: Lossy. "A chart showing Q3 growth" loses the actual numbers in the chart.
Level 2: Joint Embeddings (CLIP / SigLIP)
OpenAI's CLIP (Contrastive Language-Image Pre-training) is magic. It maps images and text into the same vector space.
If you embed a photo of a dog, and you embed the text "a puppy," the two vectors will intrinsically be close together (high cosine similarity). You don't need to caption the image.
Python
from transformers import CLIPProcessor, CLIPModel
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
# Embed Image
image_features = model.get_image_features(**processor(images=image, return_tensors="pt"))
# Embed Query
text_features = model.get_text_features(**processor(text="Show me the red car", return_tensors="pt"))
# Search
similarity = cosine(image_features, text_features)
Level 3: Long Context Native (Gemini 1.5 Pro)
This is the "Lazy but Powerful" approach. Instead of chunking and embedding, you shove the entire raw file into the Context Window.
Gemini 1.5 Pro has a 2 Million Token Window. It accepts video files natively.
Prompt: (Uploads 1-hour All-Hands meeting video) "At what timestamp does the CEO mention the layoffs? And what was the emotion on his face?"
Result: "At 42:15. He looked somber."
Pros: Perfect accuracy. No chunking loss.
Cons: Extremely expensive per query ($$). High latency (10s+).
Part 2: The PDF Problem (ColPali)
PDFs are the final boss of RAG. Extracting text from a multi-column PDF with embedded tables usually results in garbage.
Enter ColPali (ColBERT + PaliGemma). This is a Vision-Language Model that looks at the Screenshot of the PDF page rather than the text layer.
Why Pixels > Text:
When you read a PDF, you use visual cues (font size, bolding, layout) to understand hierarchy. A text extractor discards this. ColPali encodes the visual layout into the vector. It treats the PDF page as an image.
Result: It can retrieve a specific row in a complex financial table just by "looking" at it.
Part 3: Architecture of a Multimodal Pipeline
If you are building a "Chat with your Data" app today, your pipeline should look like this:
Stage | Technology | Purpose |
Ingestion | Unstructured.io | Splits PDFs, Videos, and Audio into manageable objects. |
Embedding | Google Vertex Multimodal Embeddings (or CLIP) | Generates vectors for both text chunks and extracted image frames. |
Storage | Weaviate / Qdrant | Vector DBs that support multiple vector spaces (named vectors). |
Retrieval | Hybrid Search | Combines Keyword Search (BM25) with Vector Search. |
Generation | GPT-4o / Gemini 1.5 Pro | The LLM that can "see" the retrieved images to generate the answer. |
Part 4: Use Case: The Technician's Assistant
Scenario: A field technician is repairing a jet engine.
Query: He takes a photo of a rusted valve and asks, "What is the torque setting for this part?"
Visual Search: The system embeds the photo. It searches the "Service Manual Database" (which consists of exploded diagrams).
Match: It finds "Diagram 4B - Fuel Valve".
Cross-Reference: It grabs the text associated with Diagram 4B.
Answer: "That is the Fuel Injector Valve. Torque setting is 45 Nm. Warning: Do not overtighten."
This is impossible with text-only RAG.
Deep Dive: The Magic of "Latent Space"
How does a computer know that a photo of a "Golden Retriever" allows it to match the text "good boy"?
It doesn't.
It maps both to a high-dimensional vector space (e.g. 512 dimensions).
During training, the model pulls the "Dog Image Vector" and the "Dog Text Vector" closer together, while pushing the "Cat Image Vector" away.
After seeing 400M pairs (CLIP), the concept of "Dog-ness" is burned into a specific coordinate region of that space.
Python
# Meta ImageBind: The "One Embedding to Rule Them All"
# ImageBind goes beyond Text/Image. It binds Audio, Depth, Thermal, and IMU data.
import data
import torch
from models import imagebind_model
# Load Model
model = imagebind_model.imagebind_huge(pretrained=True)
# Inputs: A Dog Barking (Audio) and a Photo of a Beach (Image)
inputs = {
VisionModelType.AUDIO: data.load_and_transform_audio_data(["dog_bark.wav"]),
VisionModelType.VISION: data.load_and_transform_vision_data(["beach.jpg"]),
}
# Embed
with torch.no_grad():
embeddings = model(inputs)
# Result: We can now ask: "Does this sound match this image?"
# Use Case: Searching a video library by "Sound" (Find me scenes with explosions).
Use Case: The "Texture Search" in E-Commerce
Fashion retailers are moving beyond "Red Shirt".
Problem: A user wants a shirt with a specific "Waffle Knit" texture.
Solution: The user uploads a close-up photo of a fabric.
RAG: The engine finds products with visual similarity to that texture, even if the metadata doesn't say "Waffle Knit".
Result: Conversion rates increase by 15% on visual search vs keyword search.
Part 5: Expert Interview
Topic: Dealing with Noise
Guest: Dr. Li W., Computer Vision Researcher (Fictionalized).
Interviewer: Why is video RAG so hard?
Dr. Li: Temporal consistency. A video is 24 images per second. If you embed every frame, you have too much data. If you sparsely sample (1 frame per second), you miss the "Action." New models like VideoLLaMA are trying to embed "Events" rather than frames.
Part 6: Glossary
CLIP: OpenAI's model for embedding text and images in the same space.
ColPali: A specialized model for retrieving PDF pages based on visual layout.
OCR: Optical Character Recognition (Text from Images).
Latent Space: The mathematical void where similar concepts (whether image or text) sit close together.
Long Context: The ability of a model to ingest massive files (Videos/Books) without retrieval.
The Future: The End of Text?
We are moving toward "Omni-Models" (like GPT-4o).
In 2026, we won't have "Text Embeddings" and "Image Embeddings". We will just have "Concept Embeddings".
The vector [0.1, 0.9, ...] will represent the idea of a "Red Car", regardless of whether the input was the word "Car", a photo of a Ferrari, or the sound of an engine revving.
Tooling Landscape (2025 Prediction)
Modality | Winning Model (Open) | Winning Model (Closed) |
Image | SigLIP (Google) / CLIP (OpenAI) | GPT-4o Vision |
Video | Video-LLaMA | Gemini 1.5 Pro |
Audio | Whisper V3 | GPT-4o Voice Mode |
Recommended Reading
Paper: "Language Is Not All You Need: Aligning Perception with Language Models".
Tool: LLaVA (Large Language-and-Vision Assistant) GitHub Repo.
Blog: "Vector Search in 2024" by Weaviate.
Conclusion
The human brain is multimodal. We don't just read; we see and hear. If your AI is text-only, it is operating with one hand tied behind its back. Multimodal RAG is the key to unlocking the 80% of data that doesn't fit in a .txt file.
All in One Place
Atler Pilot decodes your cloud spend story by bringing monitoring, automation, and intelligent insights together for faster and better cloud operations.

