Milvus
Zilliz
  • Home
  • Blog
  • Gemini 3 Pro + Milvus: costruire un RAG più robusto con ragionamento avanzato e potenza multimodale

Gemini 3 Pro + Milvus: costruire un RAG più robusto con ragionamento avanzato e potenza multimodale

  • Tutorial
November 20, 2025
Lumina Wang

Gemini 3 Pro di Google è arrivato con il raro tipo di release che sposta realmente le aspettative degli sviluppatori, non solo con l'hype, ma con funzionalità che espandono materialmente ciò che le interfacce in linguaggio naturale possono fare. Trasforma la frase "descrivi l'app che vuoi" in un flusso di lavoro eseguibile: instradamento dinamico degli strumenti, pianificazione in più fasi, orchestrazione delle API e generazione interattiva della UX, il tutto cucito insieme senza soluzione di continuità. Questo è il modello che più si avvicina a far sembrare la codifica a vibrazione una cosa fattibile in produzione.

E i numeri confermano questa tesi. Gemini 3 Pro ottiene risultati eccellenti in quasi tutti i principali benchmark:

  • Humanity's Last Exam: 37,5% senza strumenti, 45,8% con strumenti - il concorrente più vicino si ferma al 26,5%.

  • MathArena Apex: 23,4%, mentre la maggior parte dei modelli non supera il 2%.

  • ScreenSpot-Pro: 72,7% di precisione, quasi il doppio del migliore, che si ferma al 36,2%.

  • Vending-Bench 2: valore netto medio di 5.478,16 dollari, circa 1,4 volte superiore al secondo posto.

Per ulteriori risultati di benchmark, consultare la tabella sottostante.

Questa combinazione di ragionamento profondo, forte utilizzo di strumenti e fluidità multimodale rende Gemini 3 Pro una soluzione naturale per la retrieval-augmented generation (RAG). Abbinandolo a Milvus, il database vettoriale open-source ad alte prestazioni costruito per la ricerca semantica su scala miliardaria, si ottiene un livello di retrieval che mette a terra le risposte, scala in modo pulito e rimane affidabile in produzione anche con carichi di lavoro elevati.

In questo post, vi illustreremo le novità di Gemini 3 Pro, i motivi per cui eleva i flussi di lavoro RAG e come costruire una pipeline RAG pulita ed efficiente utilizzando Milvus come struttura portante del reperimento.

Aggiornamenti importanti in Gemini 3 Pro

Gemini 3 Pro introduce una serie di aggiornamenti sostanziali che rimodellano il modo in cui il modello ragiona, crea, esegue le attività e interagisce con gli utenti. Questi miglioramenti rientrano in quattro grandi aree di funzionalità:

Comprensione e ragionamento multimodale

Gemini 3 Pro stabilisce nuovi record in importanti benchmark multimodali, tra cui ARC-AGI-2 per il ragionamento visivo, MMMU-Pro per la comprensione cross-modale e Video-MMMU per la comprensione di video e l'acquisizione di conoscenze. Il modello introduce anche Deep Think, una modalità di ragionamento estesa che consente un'elaborazione logica strutturata in più fasi. Ciò si traduce in un'accuratezza significativamente più elevata su problemi complessi in cui i modelli tradizionali a catena di pensiero tendono a fallire.

Generazione di codice

Il modello porta la codifica generativa a un nuovo livello. Gemini 3 Pro è in grado di produrre SVG interattivi, applicazioni web complete, scene 3D e persino giochi funzionali, tra cui ambienti simili a Minecraft e biliardi basati su browser, il tutto partendo da un unico prompt in linguaggio naturale. Lo sviluppo front-end ne beneficia in modo particolare: il modello può ricreare progetti di interfaccia utente esistenti con alta fedeltà o tradurre uno screenshot direttamente in codice pronto per la produzione, rendendo il lavoro iterativo dell'interfaccia utente molto più veloce.

Agenti AI e uso dello strumento

Con l'autorizzazione dell'utente, Gemini 3 Pro può accedere ai dati del dispositivo Google dell'utente per eseguire compiti a lungo termine e in più fasi, come la pianificazione di viaggi o la prenotazione di auto a noleggio. Questa capacità agenziale si riflette nelle sue ottime prestazioni su Vending-Bench 2, un benchmark specificamente progettato per testare l'uso di strumenti a lungo termine. Il modello supporta anche flussi di lavoro degli agenti di livello professionale, tra cui l'esecuzione di comandi da terminale e l'interazione con strumenti esterni tramite API ben definite.

Interfaccia utente generativa

Gemini 3 Pro supera il modello convenzionale di una domanda e una risposta e introduce l'interfaccia utente generativa, in cui il modello può costruire dinamicamente intere esperienze interattive. Invece di restituire un testo statico, è in grado di generare interfacce completamente personalizzate - ad esempio, un ricco pianificatore di viaggio regolabile - direttamente in risposta alle istruzioni dell'utente. In questo modo gli LLM si trasformano da risponditori passivi a generatori attivi di interfacce.

Mettere Gemini 3 Pro alla prova

Oltre ai risultati dei benchmark, abbiamo eseguito una serie di test pratici per capire come Gemini 3 Pro si comporta nei flussi di lavoro reali. I risultati evidenziano come il ragionamento multimodale, le capacità generative e la pianificazione a lungo termine si traducano in un valore pratico per gli sviluppatori.

Comprensione multimodale

Gemini 3 Pro mostra un'impressionante versatilità tra testo, immagini, video e codice. Nel nostro test, abbiamo caricato un video di Zilliz direttamente da YouTube. Il modello ha elaborato l'intero filmato - compresa la narrazione, le transizioni e il testo sullo schermo - in circa 40 secondi, un tempo insolitamente rapido per un contenuto multimodale di lunga durata.

Le valutazioni interne di Google mostrano un comportamento simile: Gemini 3 Pro ha gestito ricette scritte a mano in più lingue, ha trascritto e tradotto ognuna di esse e le ha raccolte in un ricettario di famiglia condivisibile.

Compiti a colpo sicuro

Gemini 3 Pro è in grado di generare UI web completamente interattive senza esempi o impalcature precedenti. Quando gli è stato chiesto di creare un gioco web di astronavi 3D retrofuturistiche, il modello ha prodotto una scena interattiva completa: una griglia neon-violacea, astronavi in stile cyberpunk, effetti particellari incandescenti e controlli fluidi della telecamera, il tutto in un'unica risposta a zero colpi.

Pianificazione di compiti complessi

Il modello dimostra anche una migliore pianificazione dei compiti a lungo termine rispetto a molti altri. Nel nostro test di organizzazione della posta in arrivo, Gemini 3 Pro si è comportato come un assistente amministrativo AI: ha categorizzato le e-mail disordinate in gruppi di progetti, ha elaborato suggerimenti praticabili (risposta, follow-up, archiviazione) e ha presentato un riepilogo pulito e strutturato. Con il piano del modello, l'intera posta in arrivo poteva essere cancellata con un solo clic di conferma.

Come costruire un sistema RAG con Gemini 3 Pro e Milvus

Il ragionamento potenziato, la comprensione multimodale e le forti capacità di utilizzo degli strumenti fanno di Gemini 3 Pro una base eccellente per sistemi RAG ad alte prestazioni.

Se abbinato a Milvus, il database vettoriale open-source ad alte prestazioni costruito per la ricerca semantica su larga scala, si ottiene una netta divisione delle responsabilità: Gemini 3 Pro gestisce l'interpretazione, il ragionamento e la generazione, mentre Milvus fornisce un livello di recupero veloce e scalabile che mantiene le risposte basate sui dati aziendali. Questa accoppiata è adatta ad applicazioni di livello produttivo come basi di conoscenza interne, assistenti documentali, copiloti per l'assistenza ai clienti e sistemi di esperti specifici per il dominio.

Prerequisiti

Prima di costruire la pipeline RAG, assicuratevi che le librerie Python di base siano installate o aggiornate alle versioni più recenti:

  • pymilvus - l'SDK ufficiale di Milvus per Python

  • google-generativeai - la libreria client di Gemini 3 Pro

  • requests - per gestire le chiamate HTTP quando necessario

  • tqdm - per le barre di avanzamento durante l'ingestione dei set di dati.

! pip install --upgrade pymilvus google-generativeai requests tqdm

Quindi, accedere a Google AI Studio per ottenere la chiave API.

import os
os.environ["GEMINI_API_KEY"] = "**********"

Preparazione del set di dati

Per questa esercitazione, utilizzeremo la sezione FAQ della documentazione di Milvus 2.4.x come base di conoscenza privata per il nostro sistema RAG.

Scaricare l'archivio della documentazione ed estrarlo in una cartella denominata milvus_docs.

! wget https://github.com/milvus-io/milvus-docs/releases/download/v2.4.6-preview/milvus_docs_2.4.x_en.zip
! unzip -q milvus_docs_2.4.x_en.zip -d milvus_docs

Caricare tutti i file Markdown dal percorso milvus_docs/en/faq. Per ogni documento, applichiamo una semplice suddivisione basata sulle intestazioni di # per separare approssimativamente le sezioni principali all'interno di ogni file Markdown.

from glob import glob
text_lines = []
for file_path in glob("milvus_docs/en/faq/*.md", recursive=True):
    with open(file_path, "r") as file:
        file_text = file.read()
    text_lines += file_text.split("# ")

Impostazione del modello LLM e di incorporazione

Per questa esercitazione, useremo gemini-3-pro-preview come LLM e text-embedding-004 come modello di incorporamento.

import google.generativeai as genai
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
gemini_model = genai.GenerativeModel("gemini-3-pro-preview")
response = gemini_model.generate_content("who are you")
print(response.text)

Risposta al modello: Sono Gemini, un modello linguistico di grandi dimensioni costruito da Google.

È possibile eseguire un rapido controllo generando un embedding di prova e stampando la sua dimensionalità insieme ai primi valori:

test_embeddings = genai.embed_content(
    model="models/text-embedding-004", content=["This is a test1", "This is a test2"]
)["embedding"]
embedding_dim = len(test_embeddings[0])
print(embedding_dim)
print(test_embeddings[0][:10])

Vettore di test in uscita:

768

[0.013588584, -0.004361838, -0.08481652, -0.039724775, 0.04723794, -0.0051557426, 0.026071774, 0.045514572, -0.016867816, 0.039378334]

Caricare i dati in Milvus

Creare una raccolta

from pymilvus import MilvusClient
milvus_client = MilvusClient(uri="./milvus_demo.db")
collection_name = "my_rag_collection"

Quando si crea una raccolta MilvusClient, si può scegliere tra tre opzioni di configurazione, a seconda della scala e dell'ambiente:

  • Modalità locale (Milvus Lite): Imposta l'URI su un percorso di file locale (ad esempio, ./milvus.db). Questo è il modo più semplice per iniziare: Milvus Lite memorizzerà automaticamente tutti i dati in quel file.

  • Milvus auto-ospitato (Docker o Kubernetes): Per set di dati più grandi o carichi di lavoro di produzione, eseguire Milvus su Docker o Kubernetes. Impostate l'URI all'endpoint del vostro server Milvus, ad esempio http://localhost:19530.

  • Zilliz Cloud (il servizio Milvus completamente gestito): Se preferite una soluzione gestita, utilizzate Zilliz Cloud. Impostate l'URI al vostro Endpoint pubblico e fornite la vostra chiave API come token di autenticazione.

Prima di creare una nuova raccolta, verificare se esiste già. In caso affermativo, eliminarla e ricrearla per garantire una configurazione pulita.

if milvus_client.has_collection(collection_name):
    milvus_client.drop_collection(collection_name)

Creare una nuova raccolta con i parametri specificati.

Se non viene fornito alcuno schema, Milvus genera automaticamente un campo ID predefinito come chiave primaria e un campo vettore per memorizzare gli embeddings. Fornisce anche un campo dinamico JSON riservato, che cattura qualsiasi campo aggiuntivo non definito nello schema.

milvus_client.create_collection(
    collection_name=collection_name,
    dimension=embedding_dim,
    metric_type="COSINE",
    consistency_level="Strong",  # Strong consistency level
)

Inserire i dati

Si itera ogni voce di testo, si genera il suo vettore di incorporamento e si inseriscono i dati in Milvus. In questo esempio, includiamo un campo aggiuntivo chiamato text. Poiché non è predefinito nello schema, Milvus lo memorizza automaticamente utilizzando il campo JSON dinamico, senza bisogno di ulteriori impostazioni.

from tqdm import tqdm
data = []
doc_embeddings = genai.embed_content(
    model="models/text-embedding-004", content=text_lines
)["embedding"]
for i, line in enumerate(tqdm(text_lines, desc="Creating embeddings")):
    data.append({"id": i, "vector": doc_embeddings[i], "text": line})
milvus_client.insert(collection_name=collection_name, data=data)

Esempio di output:

Creating embeddings: 100%|█████████████████████████| 72/72 [00:00<00:00, 431414.13it/s]
{'insert_count': 72, 'ids': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71], 'cost': 0}

Creazione del flusso di lavoro RAG

Recuperare i dati rilevanti

Per testare il recupero, poniamo una domanda comune su Milvus.

question = "How is data stored in milvus?"

La domanda viene cercata nella raccolta e vengono restituiti i 3 risultati più rilevanti.

question_embedding = genai.embed_content(
    model="models/text-embedding-004", content=question
)["embedding"]
search_res = milvus_client.search(
    collection_name=collection_name,
    data=[question_embedding],
    limit=3,  # Return top 3 results
    search_params={"metric_type": "COSINE", "params": {}},  # Inner product distance
    output_fields=["text"],  # Return the text field
)
import json
retrieved_lines_with_distances = [
    (res["entity"]["text"], res["distance"]) for res in search_res[0]
]
print(json.dumps(retrieved_lines_with_distances, indent=4))

I risultati vengono restituiti in ordine di somiglianza, dal più vicino al meno simile.

[
    [
        " Where does Milvus store data?\n\nMilvus deals with two types of data, inserted data and metadata. \n\nInserted data, including vector data, scalar data, and collection-specific schema, are stored in persistent storage as incremental log. Milvus supports multiple object storage backends, including [MinIO](
https://min.io/
), [AWS S3](
https://aws.amazon.com/s3/?nc1=h_ls
), [Google Cloud Storage](
https://cloud.google.com/storage?hl=en#object-storage-for-companies-of-all-sizes
) (GCS), [Azure Blob Storage](
https://azure.microsoft.com/en-us/products/storage/blobs
), [Alibaba Cloud OSS](
https://www.alibabacloud.com/product/object-storage-service
), and [Tencent Cloud Object Storage](
https://www.tencentcloud.com/products/cos
) (COS).\n\nMetadata are generated within Milvus. Each Milvus module has its own metadata that are stored in etcd.\n\n###",
        0.8048489093780518
    ],
    [
        "Does the query perform in memory? What are incremental data and historical data?\n\nYes. When a query request comes, Milvus searches both incremental data and historical data by loading them into memory. Incremental data are in the growing segments, which are buffered in memory before they reach the threshold to be persisted in storage engine, while historical data are from the sealed segments that are stored in the object storage. Incremental data and historical data together constitute the whole dataset to search.\n\n###",
        0.757495105266571
    ],
    [
        "What is the maximum dataset size Milvus can handle?\n\n  \nTheoretically, the maximum dataset size Milvus can handle is determined by the hardware it is run on, specifically system memory and storage:\n\n- Milvus loads all specified collections and partitions into memory before running queries. Therefore, memory size determines the maximum amount of data Milvus can query.\n- When new entities and and collection-related schema (currently only MinIO is supported for data persistence) are added to Milvus, system storage determines the maximum allowable size of inserted data.\n\n###",
        0.7453694343566895
    ]
]

Generare una risposta RAG con il LLM

Dopo aver recuperato i documenti, convertirli in un formato stringa.

context = "\n".join(
    [line_with_distance[0] for line_with_distance in retrieved_lines_with_distances]
)

Fornire al LLM un prompt di sistema e un prompt utente, entrambi costruiti a partire dai documenti recuperati da Milvus.

SYSTEM_PROMPT = """
Human: You are an AI assistant. You are able to find answers to the questions from the contextual passage snippets provided.
"""
USER_PROMPT = f"""
Use the following pieces of information enclosed in <context> tags to provide an answer to the question enclosed in <question> tags.
<context>
{context}
</context>
<question>
{question}
</question>
"""

Utilizzare il modello gemini-3-pro-preview insieme a questi prompt per generare la risposta finale.

gemini_model = genai.GenerativeModel(
    "gemini-3-pro-preview", system_instruction=SYSTEM_PROMPT
)
response = gemini_model.generate_content(USER_PROMPT)
print(response.text)

Dall'output, si può notare che Gemini 3 Pro produce una risposta chiara e ben strutturata basata sulle informazioni recuperate.

Based on the provided documents, Milvus stores data in the following ways:
*   **Inserted Data:** Vector data, scalar data, and collection-specific schema are stored in persistent storage as an incremental log. Milvus supports multiple object storage backends for this purpose, including:
    *   MinIO
    *   AWS S3
    *   Google Cloud Storage (GCS)
    *   Azure Blob Storage
    *   Alibaba Cloud OSS
    *   Tencent Cloud Object Storage (COS)
*   **Metadata:** Metadata generated within Milvus modules is stored in **etcd**.
*   **Memory Buffering:** Incremental data (growing segments) are buffered in memory before being persisted, while historical data (sealed segments) resides in object storage but is loaded into memory for querying.

Nota: Gemini 3 Pro non è attualmente disponibile per gli utenti free-tier. Per maggiori dettagli, fare clic qui.

È invece possibile accedervi tramite OpenRouter:

from openai import OpenAI
client = OpenAI(
  base_url="https://openrouter.ai/api/v1",
  api_key="<OPENROUTER_API_KEY>",
)
response2 = client.chat.completions.create(
  model="google/gemini-3-pro-preview",
  messages=[
        {
            "role": "system",
            "content": SYSTEM_PROMPT
        },
        {
            "role": "user", 
            "content": USER_PROMPT
        }
    ],
  extra_body={"reasoning": {"enabled": True}}
)
response_message = response2.choices[0].message
print(response_message.content)

One More Thing: Vibe Coding con Google Antigravity

Oltre a Gemini 3 Pro, Google ha presentato Google Antigravity, una piattaforma di vide coding che interagisce autonomamente con l'editor, il terminale e il browser. A differenza dei precedenti strumenti assistiti dall'intelligenza artificiale che gestivano istruzioni singole, Antigravity opera a un livello orientato alle attività, consentendo agli sviluppatori di specificare ciò che vogliono costruire mentre il sistema gestisce il come, orchestrando l'intero flusso di lavoro end-to-end.

I tradizionali flussi di lavoro per la codifica dell'intelligenza artificiale generavano in genere frammenti isolati che gli sviluppatori dovevano rivedere, integrare, debuggare ed eseguire manualmente. Antigravity cambia questa dinamica. È sufficiente descrivere un'attività, ad esempio "Crea un semplice gioco di interazione con gli animali domestici ", e il sistema decomporrà la richiesta, genererà il codice, eseguirà i comandi da terminale, aprirà un browser per testare il risultato e itererà finché non funzionerà. In questo modo l'intelligenza artificiale si trasforma da motore passivo di autocompletamento in un partner attivo di progettazione, che apprende le preferenze dell'utente e si adatta al suo stile di sviluppo personale nel corso del tempo.

In prospettiva, l'idea di un agente che si coordina direttamente con un database non è lontana. Con la chiamata di strumenti tramite MCP, un'intelligenza artificiale potrebbe leggere da un database Milvus, assemblare una base di conoscenze e persino gestire autonomamente la propria pipeline di reperimento. Per molti versi, questo passaggio è ancora più significativo dell'aggiornamento del modello stesso: una volta che un'intelligenza artificiale può prendere una descrizione del prodotto e convertirla in una sequenza di compiti eseguibili, lo sforzo umano si sposta naturalmente verso la definizione degli obiettivi, dei vincoli e dell'aspetto della "correttezza" - il pensiero di livello superiore che guida veramente lo sviluppo del prodotto.

Pronti a costruire?

Se siete pronti a provarlo, seguite il nostro tutorial passo dopo passo e costruite oggi stesso un sistema RAG con Gemini 3 Pro + Milvus.

Avete domande o volete un approfondimento su una qualsiasi funzione? Unitevi al nostro canale Discord o inviate problemi su GitHub. È anche possibile prenotare una sessione individuale di 20 minuti per ottenere approfondimenti, indicazioni e risposte alle vostre domande attraverso Milvus Office Hours.

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    Continua a Leggere