Deja de esperar, empieza a crear: asistente de voz con Milvus y Llama 3.2
"Lo sentimos, esta función aún no está disponible en tu región."
Si estás en Europa, probablemente hayas visto este mensaje más veces de las que te gustaría contar. Mientras el resto del mundo celebra cada nuevo avance en IA, muchos de nosotros nos encontramos pegando la nariz contra la ventana metafórica, viendo la fiesta desde fuera. Desde Llama 3.2 hasta el Advanced Voice Mode de OpenAI, estamos atrapados en un ciclo interminable de "Llegará a tu región... pronto™️".
Bueno, me cansé de esperar. Si no podemos unirnos a la fiesta, ¡organicemos la nuestra!
En este blog, te guiaremos en la creación de un asistente de voz, un sistema Agentic RAG (Retrieval-Augmented Generation) especializado y diseñado para interacciones de voz. Utilizando proyectos de código abierto como Milvus para la base de datos vectorial, Llama 3.2 y varias tecnologías de GenAI, incluidas Assemby AI, DuckDuckGo y ElevenLabs, este asistente de voz va más allá del simple procesamiento: comprende y responde de forma inteligente a las consultas por voz.
Tecnologías clave que usaremos
- Milvus es una base de datos vectorial de código abierto, alto rendimiento y gran escalabilidad que almacena, indexa y busca datos no estructurados a escala de miles de millones mediante incrustaciones vectoriales de alta dimensión. Es perfecta para crear aplicaciones modernas de IA como Retrieval Augmented Generation (RAG), búsqueda semántica, búsqueda multimodal y sistemas de recomendación. Milvus funciona de manera eficiente en diversos entornos, desde portátiles hasta sistemas distribuidos a gran escala.
- Llama 3.2 es el modelo de lenguaje grande (LLM) más reciente proporcionado por Meta. Lo usaremos para generar respuestas basadas en la información recuperada de Milvus.
- Assembly AI proporciona APIs avanzadas de voz a texto diseñadas para convertir el lenguaje hablado en texto escrito con un alto grado de precisión.
- DuckDuckGo es un motor de búsqueda que enfatiza la privacidad del usuario y proporciona los mismos resultados de búsqueda para todos los usuarios, a diferencia de los motores de búsqueda tradicionales que adaptan los resultados según los datos del usuario.
- ElevenLabs se especializa en síntesis de voz avanzada, lo que permite a los usuarios crear clones de voz realistas a partir de breves muestras de audio.
Qué construiremos: un sistema Agentic RAG para interacciones de voz
Hay varias formas de crear un sistema Agentic RAG. Para quienes estén interesados, he escrito un blog que explica cómo crear un sistema RAG agentic local usando Llama 3.2, LangChain y LangGraph.
Sin embargo, esta vez tomaremos una ruta diferente creando un agente desde cero, sin depender de ningún framework existente. La arquitectura de este sistema RAG se divide en múltiples componentes (como se muestra a continuación), cada uno encargado de una parte específica de este proceso.
Figura- la arquitectura de este sistema RAG agentic.png
Figura: La arquitectura de este sistema RAG agentic
A continuación se presenta una descripción general de cómo funciona este sistema RAG agentic.
- El usuario envía su consulta de voz al sistema, iniciando la interacción.
- Assembly AI transcribe la voz del usuario a texto en tiempo real.
- El texto transcrito es procesado por el Query Processor, que lo prepara para el análisis vectorial y la detección de palabras clave en el sistema RAG agéntico.
- La base de datos vectorial Milvus realiza búsquedas de similitud semántica y recupera documentos con alta similitud semántica con la consulta.
- Al mismo tiempo, el Keyword Detector escanea el texto en busca de palabras clave específicas que puedan activar acciones concretas, como acceder a la Google Calendar API si se identifican palabras clave relacionadas con el calendario.
- Nuestro sistema agéntico comprueba la relevancia de los documentos recuperados de Milvus con respecto a la consulta. Si son relevantes, pasan a la generación de respuestas usando Llama 3.2; si no, se inicia una búsqueda web. Si los documentos de Milvus no son relevantes, DuckDuckGo realiza entonces una búsqueda web.
- Llama 3.2 toma la información de Milvus, DuckDuckGo o Keyword Detector, según la comprobación de relevancia, para generar una respuesta coherente y adecuada al contexto.
- La respuesta generada por Llama 3.2 se convierte en voz usando la tecnología Text-to-Speech de ElevenLabs.
- Finalmente, la respuesta de voz sintetizada se entrega de vuelta al usuario, completando el ciclo de interacción con una respuesta inteligente y consciente del contexto.
En la siguiente sección, hablaremos de cómo construimos este sistema RAG agéntico, en particular de cómo este sistema maneja varios tipos de búsquedas simultáneamente.
Orquestación de múltiples fuentes
A diferencia de los sistemas RAG tradicionales que siguen un patrón lineal consulta → recuperar → generar, nuestro sistema piensa por sí mismo. Exploremos los componentes clave de nuestra implementación:
💡 Nota: Para mayor claridad y legibilidad, aquí nos centraremos en los fragmentos de código más importantes. La implementación completa está disponible en nuestro repositorio de GitHub.
Primero, búsqueda vectorial de 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.
"""
Cuando haces una pregunta, primero revisamos nuestra base de conocimiento de Milvus para encontrar resultados relevantes. Si encontramos algo relevante (similitud > 0.6), lo usamos para responder a tu consulta.
Segundo, integración con Calendar
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 estás preguntando sobre tu agenda, omitimos por completo la base de conocimiento y vamos directamente a tu calendario. ¡No hace falta buscar entre vectores cuando sabemos exactamente dónde está la información!
Finalmente, respaldo con búsqueda 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 no podemos encontrar nada relevante en Milvus y no es una consulta de calendario, recurrimos a DuckDuckGo para una búsqueda web. Luego obtenemos los resultados principales, extraemos los párrafos más relevantes y los devolvemos a nuestro LLM Llama 3.2.
Finalmente, Llama 3.2 toma la información como contexto para generar una respuesta coherente y precisa.
¿Por qué Milvus para RAG?
Los sistemas RAG son tan buenos como la velocidad de su recuperación y la calidad de su recuperación. Por eso Milvus es clave aquí:
- La velocidad importa: Cuando estás creando un asistente de voz, nadie quiere esperar 5 segundos para obtener una respuesta. Milvus puede buscar entre millones de vectores en milisegundos.
- Precisión a escala: Milvus destaca en la gestión de búsquedas vectoriales de alta dimensionalidad mediante algoritmos de Vecino Más Cercano Aproximado (ANN). Con opciones de indexación robustas como IVF_FLAT, HNSW y DiskANN, Milvus garantiza altas tasas de recuperación incluso a medida que la base de datos vectorial escala, manteniendo la integridad de los resultados de búsqueda en sistemas extensos.
¿Los resultados?
Nuestro asistente de voz DIY puede que no sea el mejor que existe, pero tiene algunas fortalezas únicas:
- Diseño modular: Sustituye cualquier componente (prueba Whisper en lugar de AssemblyAI, ¿por qué no?)
- Control total: Sin cajas negras, solo código transparente y hackeable
- Enfoque en la privacidad: Tus datos siguen siendo tuyos
Conclusión
Aunque este proyecto obviamente está lejos de lo que puede hacer el modo de voz avanzado de OpenAI, además, hay algo satisfactorio en crear tu propio asistente de IA. Puede que no tenga el encanto de Claude ni el pulido de ChatGPT, pero tiene carácter. Más importante aún, ofrece verdadera propiedad y control de tu stack de IA. Al usar herramientas de código abierto como la base de datos vectorial Milvus, hemos mostrado cómo podemos crear algo que es:
- Verdaderamente tuyo: Cada componente es transparente y modificable
- Sin restricciones geográficas: Despliega en cualquier lugar, sirve a cualquiera
- Siempre disponible: Sin cambios repentinos en la API ni discontinuaciones del servicio
- Totalmente personalizable: Añade funciones, modifica el comportamiento u optimiza para necesidades específicas
- Privacidad primero: Tus datos permanecen en tu infraestructura, bajo tu control
Y, a diferencia de algunas otras herramientas de IA que podría mencionar, ¡esta definitivamente sabe dónde está Europa en un mapa!
El código completo está disponible en nuestro Github.
¡Nos encantaría saber qué piensas!
Si te gusta esta publicación del blog, por favor considera:
- ⭐ Darnos una estrella en GitHub
- 💬 Unirte a nuestra comunidad de Milvus en Discord para compartir tus experiencias
- 🔍 Explorar nuestro repositorio Bootcamp para ver más ejemplos de aplicaciones RAG con Milvus
Sigue leyendo

Announcing the General Availability of Zilliz Cloud BYOC on Google Cloud Platform
Zilliz Cloud BYOC on GCP offers enterprise vector search with full data sovereignty and seamless integration.

Build for the Boom: Why AI Agent Startups Should Build Scalable Infrastructure Early
Explore strategies for developing AI agents that can handle rapid growth. Don't let inadequate systems undermine your success during critical breakthrough moments.

Bringing AI to Legal Tech: The Role of Vector Databases in Enhancing LLM Guardrails
Discover how vector databases enhance AI reliability in legal tech, ensuring accurate, compliant, and trustworthy AI-powered legal solutions.



