Arrêtez d’attendre, commencez à construire : assistant vocal avec Milvus et Llama 3.2
"Désolé, cette fonctionnalité n'est pas encore disponible dans votre région."
Si vous êtes basé en Europe, vous avez probablement vu ce message plus de fois que vous ne voudriez le compter. Alors que le reste du monde célèbre chaque nouvelle avancée de l'IA, beaucoup d'entre nous se retrouvent le nez collé à la fenêtre métaphorique, à regarder la fête de l'extérieur. De Llama 3.2 au Advanced Voice Mode d'OpenAI, nous sommes pris dans un cycle sans fin de « Bientôt disponible dans votre région... bientôt™️ ».
Eh bien, j'en ai eu assez d'attendre. Si nous ne pouvons pas rejoindre la fête, organisons la nôtre !
Dans ce blog, nous vous guiderons dans la création d'un assistant vocal, un système Agentic RAG (Retrieval-Augmented Generation) spécialisé, conçu pour les interactions vocales. En utilisant des projets open source tels que Milvus pour la base de données vectorielle, Llama 3.2 et diverses technologies GenAI, notamment Assemby AI, DuckDuckGo et ElevenLabs, cet assistant vocal va au-delà du simple traitement : il comprend intelligemment les requêtes vocales et y répond.
Technologies clés que nous utiliserons
- Milvus est une base de données vectorielle open source, haute performance et hautement évolutive, qui stocke, indexe et recherche des données non structurées à l'échelle du milliard grâce à des embeddings vectoriels de haute dimension. Elle est parfaite pour créer des applications d'IA modernes telles que la Retrieval Augmented Generation (RAG), la recherche sémantique, la recherche multimodale et les systèmes de recommandation. Milvus fonctionne efficacement dans divers environnements, des ordinateurs portables aux systèmes distribués à grande échelle.
- Llama 3.2 est le dernier grand modèle de langage (LLM) fourni par Meta. Nous l'utiliserons pour générer des réponses à partir des informations récupérées depuis Milvus.
- Assembly AI fournit des API avancées de reconnaissance vocale conçues pour convertir la langue parlée en texte écrit avec un haut degré de précision.
- DuckDuckGo est un moteur de recherche qui met l'accent sur la confidentialité des utilisateurs et fournit les mêmes résultats de recherche à tous les utilisateurs, contrairement aux moteurs de recherche traditionnels qui personnalisent les résultats en fonction des données utilisateur.
- ElevenLabs est spécialisé dans la synthèse vocale avancée, permettant aux utilisateurs de créer des clones vocaux réalistes à partir de courts échantillons audio.
Ce que nous allons construire : un système Agentic RAG pour les interactions vocales
Il existe plusieurs façons de construire un système Agentic RAG. Pour ceux que cela intéresse, j'ai écrit un blog expliquant comment construire un système RAG agentique local en utilisant Llama 3.2, LangChain et LangGraph.
Cependant, cette fois, nous empruntons une voie différente en construisant un agent de zéro, sans nous appuyer sur des frameworks existants. L'architecture de ce système RAG est décomposée en plusieurs composants (comme illustré ci-dessous), chacun gérant une partie spécifique de ce processus.
Figure- the architecture of this agentic RAG system.png
Figure : l'architecture de ce système RAG agentique
Voici un aperçu du fonctionnement de ce système RAG agentique.
- L’utilisateur envoie sa requête vocale au système, ce qui lance l’interaction.
- Assembly AI transcrit la voix de l’utilisateur en texte en temps réel.
- Le texte transcrit est traité par le Query Processor, qui le prépare pour l’analyse vectorielle et la détection de mots-clés dans le système RAG agentique.
- La base de données vectorielle Milvus effectue des recherches de similarité sémantique et récupère les documents présentant une forte similarité sémantique avec la requête.
- En parallèle, le Keyword Detector analyse le texte à la recherche de mots-clés spécifiques susceptibles de déclencher des actions particulières, comme l’accès à l’API Google Calendar si des mots-clés liés au calendrier sont identifiés.
- Les documents récupérés depuis Milvus sont vérifiés par notre système agentique afin d’évaluer leur pertinence par rapport à la requête. S’ils sont pertinents, ils passent à la génération de réponse avec Llama 3.2 ; sinon, une recherche web est lancée. Si les documents issus de Milvus ne sont pas pertinents, DuckDuckGo effectue alors une recherche web.
- Llama 3.2 utilise les informations provenant soit de Milvus, soit de DuckDuckGo, soit du Keyword Detector, selon la vérification de pertinence, afin de générer une réponse cohérente et adaptée au contexte.
- La réponse générée par Llama 3.2 est convertie en parole à l’aide de la technologie Text-to-Speech d’ElevenLabs.
- Enfin, la réponse vocale synthétisée est renvoyée à l’utilisateur, bouclant ainsi l’interaction avec une réponse intelligente et sensible au contexte.
Dans la section suivante, nous verrons comment nous construisons ce système RAG agentique, en particulier comment ce système gère simultanément différents types de recherches.
Orchestration multi-source
Contrairement aux systèmes RAG traditionnels qui suivent un schéma linéaire requête → récupération → génération, notre système pense par lui-même. Explorons les composants clés de notre implémentation :
💡 Remarque : pour plus de clarté et de lisibilité, nous nous concentrerons ici sur les extraits de code les plus importants. L’implémentation complète est disponible dans notre dépôt GitHub.
Tout d’abord, la recherche vectorielle 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.
"""
Lorsque vous posez une question, nous consultons d’abord notre base de connaissances Milvus pour trouver des résultats pertinents. Si nous trouvons quelque chose de pertinent (similarité > 0,6), nous l’utilisons pour répondre à votre requête.
Ensuite, l’intégration du calendrier
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.
"""
Si vous posez une question sur votre emploi du temps, nous ignorons entièrement la base de connaissances et allons directement à votre calendrier. Inutile de rechercher dans des vecteurs quand nous savons exactement où se trouve l’information !
Enfin, le repli vers la recherche 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.
"""
Si nous ne trouvons rien de pertinent dans Milvus et qu’il ne s’agit pas d’une requête liée au calendrier, nous nous rabattons sur DuckDuckGo pour une recherche web. Nous récupérons ensuite les meilleurs résultats, extrayons les paragraphes les plus pertinents et les transmettons à notre LLM Llama 3.2.
Enfin, Llama 3.2 utilise les informations comme contexte pour générer une réponse cohérente et précise.
Pourquoi Milvus pour le RAG ?
Les systèmes RAG ne valent que par la vitesse de leur récupération et la qualité de cette récupération. C’est pourquoi Milvus est essentiel ici :
- La vitesse compte : Lorsque vous créez un assistant vocal, personne ne veut attendre 5 secondes pour obtenir une réponse. Milvus peut rechercher parmi des millions de vecteurs en quelques millisecondes.
- La précision à grande échelle : Milvus excelle dans la gestion des recherches de vecteurs à haute dimension grâce aux algorithmes de plus proches voisins approximatifs (ANN). Avec des options d’indexation robustes comme IVF_FLAT, HNSW et DiskANN, Milvus garantit des taux de rappel élevés même lorsque la base de données vectorielle évolue, tout en préservant l’intégrité des résultats de recherche dans des systèmes étendus.
Les résultats ?
Notre assistant vocal DIY n’est peut-être pas le meilleur qui existe, mais il possède quelques atouts uniques :
- Conception modulaire : Remplacez n’importe quel composant (essayez Whisper au lieu d’AssemblyAI, pourquoi pas ?)
- Contrôle total : Pas de boîtes noires, seulement du code transparent et modifiable
- Axé sur la confidentialité : Vos données restent les vôtres
Conclusion
Bien que ce projet soit évidemment très loin de ce que peut faire le mode OpenAI Advanced Voice, il y a quelque chose de satisfaisant à construire son propre assistant IA. Il n’a peut-être pas le charme de Claude ni le raffinement de ChatGPT, mais il a du caractère. Plus important encore, il offre une véritable propriété et un véritable contrôle de votre stack IA. En utilisant des outils open-source comme la base de données vectorielle Milvus, nous avons montré comment construire quelque chose qui est :
- Vraiment à vous : Chaque composant est transparent et modifiable
- Sans restriction géographique : Déployez n’importe où, servez n’importe qui
- Disponible pour toujours : Pas de changements soudains d’API ni d’interruptions de service
- Entièrement personnalisable : Ajoutez des fonctionnalités, modifiez le comportement ou optimisez pour des besoins spécifiques
- Confidentialité d’abord : Vos données restent sur votre infrastructure, sous votre contrôle
Et contrairement à certains autres outils d’IA que je pourrais mentionner, celui-ci sait définitivement où se trouve l’Europe sur une carte !
Le code complet est disponible sur notre Github.
Nous aimerions savoir ce que vous en pensez !
Si vous aimez cet article de blog, veuillez envisager de :
- ⭐ Nous donner une étoile sur GitHub
- 💬 Rejoindre notre communauté Milvus Discord pour partager vos expériences
- 🔍 Explorer notre dépôt Bootcamp pour plus d’exemples d’applications RAG avec Milvus
Continuer à lire

Build Multimodal Search for 3D Assets with Tripo and Zilliz Cloud
Generate 3D assets with Tripo, then search them by text, image, and metadata with multimodal embeddings and Zilliz Cloud.

Introducing Functions and Model Inference on Zilliz Cloud: Automatic Embedding and Reranking with Hosted Models
Zilliz Cloud Functions auto-generate embeddings via OpenAI, Voyage AI, Cohere, or Zilliz Hosted Models. Built-in reranking — just insert text and search.

Smarter Autoscaling in Zilliz Cloud: Always Optimized for Every Workload
With the latest upgrade, Zilliz Cloud introduces smarter autoscaling—a fully automated, more streamlined, elastic resource management system.



