Smetti di aspettare, inizia a costruire: assistente vocale con Milvus e Llama 3.2
"Spiacenti, questa funzionalità non è ancora disponibile nella tua regione."
Se ti trovi in Europa, probabilmente hai visto questo messaggio più volte di quante vorresti contare. Mentre il resto del mondo celebra ogni nuova svolta nell'AI, molti di noi si ritrovano con il naso premuto contro la finestra metaforica, a guardare la festa da fuori. Da Llama 3.2 alla Advanced Voice Mode di OpenAI, siamo intrappolati in un ciclo infinito di "In arrivo nella tua regione... presto™️".
Beh, mi sono stancato di aspettare. Se non possiamo partecipare alla festa, organizziamone una nostra!
In questo blog, ti guideremo nella creazione di un Assistente Vocale, un sistema Agentic RAG (Retrieval-Augmented Generation) specializzato, progettato per le interazioni vocali. Utilizzando progetti open-source come Milvus per il database vettoriale, Llama 3.2 e varie tecnologie GenAI, tra cui Assemby AI, DuckDuckGo ed ElevenLabs, questo assistente vocale va oltre la semplice elaborazione: comprende e risponde in modo intelligente alle query vocali.
Tecnologie chiave che useremo
- Milvus è un database vettoriale open-source, ad alte prestazioni e altamente scalabile, che archivia, indicizza e ricerca dati non strutturati su scala di miliardi tramite embedding vettoriali ad alta dimensionalità. È perfetto per creare applicazioni AI moderne come la Retrieval Augmented Generation (RAG), la ricerca semantica, la ricerca multimodale e i sistemi di raccomandazione. Milvus funziona in modo efficiente in vari ambienti, dai laptop ai sistemi distribuiti su larga scala.
- Llama 3.2 è l'ultimo large language model (LLM) fornito da Meta. Lo useremo per generare risposte basate sulle informazioni recuperate da Milvus.
- Assembly AI fornisce API avanzate di speech-to-text progettate per convertire il linguaggio parlato in testo scritto con un elevato grado di accuratezza.
- DuckDuckGo è un motore di ricerca che enfatizza la privacy degli utenti e fornisce gli stessi risultati di ricerca a tutti gli utenti, a differenza dei motori di ricerca tradizionali che personalizzano i risultati in base ai dati degli utenti.
- ElevenLabs è specializzata nella sintesi vocale avanzata, consentendo agli utenti di creare cloni vocali realistici da brevi campioni audio.
Cosa costruiremo: un sistema Agentic RAG per interazioni vocali
Esistono diversi modi per costruire un sistema Agentic RAG. Per chi è interessato, ho scritto un blog che spiega passo dopo passo come costruire un sistema agentic RAG locale usando Llama 3.2, LangChain e LangGraph.
Tuttavia, questa volta stiamo prendendo una strada diversa, costruendo un agente da zero, senza fare affidamento su framework esistenti. L'architettura di questo sistema RAG è suddivisa in più componenti (come mostrato di seguito), ognuno dei quali gestisce una parte specifica di questo processo.
Figura- l'architettura di questo sistema agentic RAG.png
Figura: L'architettura di questo sistema agentic RAG
Di seguito è riportata una panoramica di come funziona questo sistema agentic RAG.
- L'utente invia la propria query vocale al sistema, avviando l'interazione.
- Assembly AI trascrive la voce dell'utente in testo in tempo reale.
- Il testo trascritto viene elaborato dal Query Processor, che lo prepara per l'analisi vettoriale e il rilevamento delle parole chiave nel sistema RAG agentico.
- Il database vettoriale Milvus esegue ricerche di similarità semantica e recupera documenti con elevata similarità semantica rispetto alla query.
- Contemporaneamente, il Keyword Detector scansiona il testo alla ricerca di parole chiave specifiche che potrebbero attivare azioni specifiche, come l'accesso all'API di Google Calendar se vengono identificate parole chiave relative al calendario.
- I documenti recuperati da Milvus vengono verificati dal nostro sistema agentico per valutarne la pertinenza rispetto alla query. Se pertinenti, procedono alla generazione della risposta utilizzando Llama 3.2; in caso contrario, viene avviata una ricerca web. Se i documenti provenienti da Milvus non sono pertinenti, DuckDuckGo conduce quindi una ricerca web.
- Llama 3.2 utilizza le informazioni provenienti da Milvus o DuckDuckGo o dal Keyword Detector, a seconda del controllo di pertinenza, per generare una risposta coerente e appropriata al contesto.
- La risposta generata da Llama 3.2 viene convertita in parlato utilizzando la tecnologia Text-to-Speech di ElevenLabs.
- Infine, la risposta vocale sintetizzata viene restituita all'utente, completando il ciclo di interazione con una risposta intelligente e consapevole del contesto.
Nella prossima sezione, discuteremo come costruiamo questo sistema RAG agentico, in particolare come questo sistema gestisce simultaneamente vari tipi di ricerche.
Orchestrazione multi-sorgente
A differenza dei sistemi RAG tradizionali che seguono uno schema lineare query → recupero → generazione, il nostro sistema pensa da sé. Esploriamo i componenti chiave della nostra implementazione:
💡 Nota: Per chiarezza e leggibilità, qui ci concentreremo sugli snippet di codice più importanti. L'implementazione completa è disponibile nel nostro repository GitHub.
Innanzitutto, ricerca vettoriale Milvus
milvus_results = self.milvus_wrapper.search_similar_text(text)
relevant_results = [result for result in milvus_results
if result["distance"] > 0.6]
if relevant_results:
context = "\n".join([result["text"] for result in milvus_results])
augmented_query = f"""
Context: {context}
User Query: {text}
Please answer based on the given context.
"""
Quando fai una domanda, controlliamo prima la nostra base di conoscenza Milvus per trovare risultati pertinenti. Se troviamo qualcosa di pertinente (similarità > 0.6), lo usiamo per rispondere alla tua query.
In secondo luogo, integrazione del calendario
elif any(keyword in text.lower() for keyword in
["calendar", "schedule", "events", "appointment"]):
events = await self.calendar_service.get_upcoming_events()
augmented_query = f"""
Calendar Events: {events}
User Query: {text}
Please answer based on their calendar events.
"""
Se stai chiedendo informazioni sulla tua agenda, saltiamo completamente la base di conoscenza e andiamo direttamente al tuo calendario. Non c'è bisogno di cercare tra i vettori quando sappiamo esattamente dove si trova l'informazione!
Infine, fallback alla ricerca web
else:
web_results = self.web_searcher.search(text)
if web_results:
context = "\n".join(web_results[:3])
augmented_query = f"""
Web search results: {context}
User Query: {text}
Please answer based on the web search results.
"""
Se non riusciamo a trovare nulla di pertinente in Milvus e non si tratta di una query sul calendario, ripieghiamo su DuckDuckGo per una ricerca web. Otteniamo quindi i risultati principali, estraiamo i paragrafi più pertinenti e li forniamo nuovamente al nostro LLM Llama 3.2.
Infine, Llama 3.2 utilizza le informazioni come contesto per generare una risposta coerente e accurata.
Perché Milvus per RAG?
I sistemi RAG sono validi solo quanto la loro velocità di recupero e la qualità del loro recupero. Ecco perché Milvus è fondamentale qui:
- La velocità conta: Quando crei un assistente vocale, nessuno vuole aspettare 5 secondi per una risposta. Milvus può cercare tra milioni di vettori in millisecondi.
- Accuratezza su larga scala: Milvus eccelle nella gestione di ricerche vettoriali ad alta dimensionalità tramite algoritmi Approximate Nearest Neighbor (ANN). Con solide opzioni di indicizzazione come IVF_FLAT, HNSW e DiskANN, Milvus garantisce alti tassi di richiamo anche quando il database vettoriale cresce, mantenendo l'integrità dei risultati di ricerca in sistemi estesi.
I risultati?
Il nostro assistente vocale fai-da-te potrebbe non essere il migliore in circolazione, ma ha alcuni punti di forza unici:
- Design modulare: sostituisci qualsiasi componente (prova Whisper al posto di AssemblyAI, perché no?)
- Controllo totale: niente scatole nere, solo codice trasparente e hackerabile
- Attento alla privacy: i tuoi dati restano tuoi
Conclusione
Anche se questo progetto è ovviamente lontano da ciò che può fare la modalità OpenAI Advanced Voice, c'è comunque qualcosa di soddisfacente nel costruire il proprio assistente AI. Potrebbe non avere il fascino di Claude o la raffinatezza di ChatGPT, ma ha carattere. Ancora più importante, offre vera proprietà e controllo del tuo stack AI. Usando strumenti open-source come il database vettoriale Milvus, abbiamo mostrato come possiamo costruire qualcosa che sia:
- Veramente tuo: ogni componente è trasparente e modificabile
- Senza restrizioni geografiche: distribuiscilo ovunque, servi chiunque
- Sempre disponibile: niente cambiamenti improvvisi delle API o interruzioni del servizio
- Completamente personalizzabile: aggiungi funzionalità, modifica il comportamento o ottimizzalo per esigenze specifiche
- Privacy al primo posto: i tuoi dati restano sulla tua infrastruttura, sotto il tuo controllo
E a differenza di alcuni altri strumenti AI che potrei menzionare, questo sa decisamente dov'è l'Europa su una mappa!
Il codice completo è disponibile sul nostro Github.
Ci piacerebbe sapere cosa ne pensi!
Se ti piace questo post del blog, considera di:
- ⭐ Darci una stella su GitHub
- 💬 Unirti alla nostra community Discord di Milvus per condividere le tue esperienze
- 🔍 Esplorare il nostro repository Bootcamp per altri esempi di applicazioni RAG con Milvus
Continua a leggere

We spent 8 years making vector databases faster. Then we stopped.
Rarely queried embeddings still need to stay searchable. See how Vector Lakebase enables on-demand vector search without always-on compute costs.

How to Choose the Best Embedding Model for RAG in 2026: 10 Models Benchmarked
We benchmarked 10 embedding models on cross-modal, cross-lingual, long-document, and dimension compression tasks. See which one fits your RAG pipeline.

What is the K-Nearest Neighbors (KNN) Algorithm in Machine Learning?
KNN is a supervised machine learning technique and algorithm for classification and regression. This post is the ultimate guide to KNN.



