Google ha appena rilasciato tre aggiornamenti importanti per il tool File Search delle API Gemini: supporto multimodale, filtri per metadati custom e citazioni a livello di pagina. In pratica, ora puoi costruire sistemi RAG che processano immagini e testo insieme — non più solo documenti.
Il problema che risolve
Pensa a un’agenzia creativa che cerca un asset visivo specifico. Fino a ieri? Parole chiave e nomi di file. Oggi puoi cercare nell’intero archivio descrivendo il tono emotivo o lo stile visivo che ti serve, in linguaggio naturale. Il sistema trova l’immagine giusta anche se non l’hai mai taggata.
Questo funziona perché File Search ora usa il modello Gemini Embedding 2, che capisce nativamente i dati visuali — non si limita a estrarre testo con OCR.
Cosa significa multimodale in pratica
File Search processa immagini e testo nella stessa pipeline. Carichi PDF con grafici, foto di prodotti, diagrammi — tutto viene indicizzato insieme. Quando fai una query, il sistema recupera sia chunk di testo che riferimenti visuali.
Esempio concreto dal blog ufficiale: hai caricato un catalogo prodotti con foto di scarpe. Chiedi “Quali sneaker sono disponibili in rosso?” Il sistema non solo ti risponde, ma ti cita l’immagine esatta della scarpa rossa che ha trovato. Puoi scaricare quella immagine direttamente dalle citazioni.
Citations che non sono aria fritta
Quando il modello tira fuori una risposta da un PDF di 300 pagine, gli utenti devono verificare da dove viene quella risposta. File Search ora lega ogni chunk al documento originale con il numero di pagina esatto.
Per gli store multimodali, le citazioni includono anche un media_id — scarichi l’immagine che il modello ha effettivamente usato nel ragionamento. Non una descrizione testuale dell’immagine. L’immagine vera.
Metadati custom e filtri
Buttare file in un database è facile. Trovarli quando hai migliaia di documenti è il casino vero. I metadati custom ti permettono di attaccare label chiave-valore ai tuoi dati non strutturati — roba tipo department: Legal o status: Final.
A query time applichi filtri sui metadati. Il sistema cerca solo nel subset rilevante, riducendo il rumore e aumentando velocità e precisione. Esempio pratico:
metadata_filter: 'category="footwear" AND season="spring-2026"'Cerchi solo nelle scarpe della collezione primavera 2026. Il resto del catalogo non viene toccato.
Setup tecnico (la parte pratica)
Per usare le nuove feature, installa l’SDK Python più recente:
pip install -U google-genai1. Crea uno store multimodale
Specifichi gemini-embedding-2 come modello di embedding. Se lo ometti, usi il default gemini-embedding-001 (solo testo, più economico ma zero supporto immagini).
file_search_store = client.file_search_stores.create(
config={
"display_name": "product-catalog",
"embedding_model": "models/gemini-embedding-2"
}
)2. Carica documenti e immagini
Metodo più semplice: upload_to_file_search_store. Funziona per PDF e immagini dirette (PNG, JPEG). Audio e video ancora no.
operation = client.file_search_stores.upload_to_file_search_store(
file_search_store_name=file_search_store.name,
file="sneaker_red.png",
config={"display_name": "Red Sneaker"}
)Dietro le quinte: chunking, embedding, indicizzazione. Con gemini-embedding-2, le immagini dentro i PDF vengono embedded nativamente insieme al testo.
3. Query con File Search
Passi il tool file_search a generate_content:
response = client.models.generate_content(
model="gemini-3-flash-preview",
contents="Which sneakers come in red?",
config={
"tools": [{"file_search": {
"file_search_store_names": [file_search_store.name]
}}]
}
)4. Ispeziona citazioni e scarica immagini
Ogni risposta include grounding metadata. Per le immagini citate, hai il media_id da scaricare:
for chunk in grounding.grounding_chunks:
ctx = chunk.retrieved_context
if ctx.media_id:
blob = client.file_search_stores.download_media(media_id=ctx.media_id)
with open(f"cited_{ctx.title}.png", "wb") as f:
f.write(blob)Feature avanzate (per quando serve)
Structured output
Con i modelli Gemini 3, puoi combinare File Search con output strutturato. Perfetto per estrarre dati strutturati da risposte grounded:
class ProductMatch(BaseModel):
name: str
description: str
confidence: str
response = client.models.generate_content(
model="gemini-3-flash-preview",
contents="Find products similar to a red running shoe",
config={
"tools": [{"file_search": {...}}],
"response_mime_type": "application/json",
"response_schema": ProductMatch.model_json_schema()
}
)Chunking custom
Controllo granulare su come vengono splittati i documenti:
"chunking_config": {
"white_space_config": {
"max_tokens_per_chunk": 200,
"max_overlap_tokens": 20
}
}Casi d’uso concreti
- Visual product search: Cataloghi con immagini e specifiche tecniche, ricerca per similarità visiva o descrizione naturale
- Documentazione tecnica: Recupera grafici, diagrammi di architettura o visualizzazioni dati da paper e report
- Insurance claims: Unifica form strutturati con foto dei danni per assessment documenti + visual
- Design systems: Librerie di componenti ricercabili per appearance visivo, non solo naming
- Real estate: Match proprietà basato su floor plan, foto interni, preferenze visuali
Pricing (la parte che conta)
File Search è pensato per essere economico:
- Indexing: Paghi gli embedding al momento dell’indicizzazione (pricing standard embeddings)
- Storage: Gratis
- Query-time embeddings: Gratis
- Retrieved tokens: Contano come token di contesto normali
In pratica: costi solo per l’ingestion iniziale e i token che effettivamente usi nelle risposte. Lo storage e le query non ti costano extra.
Come iniziare
Google ha messo su un’app esempio in AI Studio dove provi multimodal File Search senza scrivere codice. Carichi PDF e immagini, fai domande, vedi retrieval in real-time con citazioni e page numbers.
Documentazione completa: File Search docs e quickstart notebook.
Crea uno store con gemini-embedding-2, carica qualche immagine, parti a costruire. La differenza rispetto a rollare il tuo RAG custom? Zero vector database da provisionare, zero pipeline di embedding da mantenere. Managed completamente.
