Pare de Esperar, Comece a Construir: Assistente de Voz com Milvus e Llama 3.2
"Desculpe, este recurso ainda não está disponível na sua região."
Se você está na Europa, provavelmente já viu esta mensagem mais vezes do que gostaria de contar. Enquanto o resto do mundo celebra cada novo avanço em IA, muitos de nós nos vemos com o nariz pressionado contra a janela metafórica, assistindo à festa do lado de fora. Do Llama 3.2 ao Advanced Voice Mode da OpenAI, estamos presos em um ciclo interminável de "Chegando à sua região... em breve™️".
Bem, eu me cansei de esperar. Se não podemos entrar na festa, vamos fazer a nossa própria!
Neste blog, vamos orientar você na construção de um Assistente de Voz, um sistema Agentic RAG (Geração Aumentada por Recuperação) especializado, projetado para interações por voz. Usando projetos de código aberto como Milvus para o banco de dados vetorial, Llama 3.2 e várias tecnologias de GenAI, incluindo Assemby AI, DuckDuckGo e ElevenLabs, este assistente de voz vai além do mero processamento — ele entende e responde de forma inteligente a consultas por voz.
Principais tecnologias que usaremos
- Milvus é um banco de dados vetorial de código aberto, alto desempenho e altamente escalável, que armazena, indexa e pesquisa dados não estruturados em escala de bilhões por meio de embeddings vetoriais de alta dimensão. Ele é perfeito para criar aplicações modernas de IA, como Geração Aumentada por Recuperação (RAG), busca semântica, busca multimodal e sistemas de recomendação. O Milvus roda de forma eficiente em vários ambientes, de laptops a sistemas distribuídos em larga escala.
- Llama 3.2 é o mais recente modelo de linguagem grande (LLM) fornecido pela Meta. Vamos usá-lo para gerar respostas com base nas informações recuperadas do Milvus.
- Assembly AI fornece APIs avançadas de fala para texto, projetadas para converter linguagem falada em texto escrito com alto grau de precisão.
- DuckDuckGo é um mecanismo de busca que enfatiza a privacidade do usuário e fornece os mesmos resultados de pesquisa para todos os usuários, ao contrário dos mecanismos de busca tradicionais, que personalizam os resultados com base nos dados do usuário.
- ElevenLabs é especializada em síntese de voz avançada, permitindo que os usuários criem clones de voz realistas a partir de breves amostras de áudio.
O que vamos construir: um sistema Agentic RAG para interações por voz
Existem várias maneiras de construir um sistema Agentic RAG. Para quem tiver interesse, escrevi um blog explicando passo a passo como construir um sistema agentic RAG local usando Llama 3.2, LangChain e LangGraph.
No entanto, desta vez vamos seguir um caminho diferente, construindo um agente do zero, sem depender de nenhum framework existente. A arquitetura deste sistema RAG é dividida em vários componentes (como mostrado abaixo), cada um lidando com uma parte específica deste processo.
Figura- a arquitetura deste sistema agentic RAG.png
Figura: A arquitetura deste sistema agentic RAG
Abaixo está uma visão geral de como este sistema agentic RAG funciona.
- O usuário envia sua consulta por voz ao sistema, iniciando a interação.
- Assembly AI transcreve a voz do usuário para texto em tempo real.
- O texto transcrito é processado pelo Processador de Consultas, que o prepara para análise vetorial e detecção de palavras-chave no sistema RAG agêntico.
- O banco de dados vetorial Milvus realiza buscas por similaridade semântica e recupera documentos com alta similaridade semântica em relação à consulta.
- Simultaneamente, o Detector de Palavras-chave examina o texto em busca de palavras-chave específicas que possam acionar ações específicas, como acessar a Google Calendar API se palavras-chave relacionadas a calendário forem identificadas.
- Os documentos recuperados do Milvus são verificados quanto à sua relevância para a consulta pelo nosso sistema agêntico. Se forem relevantes, eles seguem para a geração de resposta usando Llama 3.2; caso contrário, uma busca na web é iniciada. Se os documentos do Milvus não forem relevantes, o DuckDuckGo então realiza uma busca na web.
- O Llama 3.2 usa as informações do Milvus, do DuckDuckGo ou do Detector de Palavras-chave, dependendo da verificação de relevância, para gerar uma resposta coerente e apropriada ao contexto.
- A resposta gerada pelo Llama 3.2 é convertida em fala usando a tecnologia Text-to-Speech da ElevenLabs.
- Por fim, a resposta de voz sintetizada é entregue de volta ao usuário, completando o ciclo de interação com uma resposta inteligente e consciente do contexto.
Na próxima seção, discutiremos como construímos este sistema RAG agêntico, particularmente como este sistema lida simultaneamente com vários tipos de buscas.
Orquestração de Múltiplas Fontes
Diferentemente dos sistemas RAG tradicionais que seguem um padrão linear consulta → recuperar → gerar, nosso sistema pensa por si mesmo. Vamos explorar os principais componentes da nossa implementação:
💡 Observação: Para maior clareza e legibilidade, vamos nos concentrar aqui nos trechos de código mais importantes. A implementação completa está disponível em nosso repositório GitHub.
Primeiro, Busca Vetorial no 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 você faz uma pergunta, primeiro verificamos nossa base de conhecimento do Milvus em busca de resultados relevantes. Se encontrarmos algo relevante (similaridade > 0.6), usamos isso para responder à sua consulta.
Segundo, Integração com Calendário
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 você estiver perguntando sobre sua agenda, pulamos completamente a base de conhecimento e vamos direto para o seu calendário. Não há necessidade de pesquisar entre vetores quando sabemos exatamente onde está a informação!
Por fim, Fallback de Busca na 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 não conseguirmos encontrar nada relevante no Milvus e não for uma consulta de calendário, recorremos ao DuckDuckGo para uma busca na web. Então obtemos os principais resultados, extraímos os parágrafos mais relevantes e enviamos isso de volta ao nosso LLM Llama 3.2.
Por fim, o Llama 3.2 usa as informações como contexto para gerar uma resposta coerente e precisa.
Por que Milvus para RAG?
Sistemas RAG são tão bons quanto sua velocidade de recuperação e a qualidade de sua recuperação. É por isso que o Milvus é essencial aqui:
- Velocidade Importa: Quando você está criando um assistente de voz, ninguém quer esperar 5 segundos por uma resposta. O Milvus pode pesquisar entre milhões de vetores em milissegundos.
- Precisão em Escala: O Milvus se destaca no gerenciamento de pesquisas vetoriais de alta dimensionalidade por meio de algoritmos de Vizinhos Mais Próximos Aproximados (ANN). Com opções robustas de indexação como IVF_FLAT, HNSW e DiskANN, o Milvus garante altas taxas de recall mesmo à medida que o banco de dados vetorial escala, mantendo a integridade dos resultados de busca em sistemas extensos.
Os Resultados?
Nosso assistente de voz DIY pode não ser o melhor que existe, mas tem alguns pontos fortes únicos:
- Design modular: Troque qualquer componente (experimente o Whisper em vez do AssemblyAI, por que não?)
- Controle total: Sem caixas-pretas, apenas código transparente e hackeável
- Foco em privacidade: Seus dados continuam sendo seus
Conclusão
Embora este projeto esteja obviamente longe do que o modo OpenAI Advanced Voice consegue fazer, além disso, há algo satisfatório em criar seu próprio assistente de IA. Ele pode não ter o charme do Claude ou o acabamento do ChatGPT, mas tem personalidade. Mais importante ainda, oferece verdadeira propriedade e controle da sua stack de IA. Usando ferramentas de código aberto como o banco de dados vetorial Milvus, mostramos como podemos criar algo que é:
- Verdadeiramente Seu: Cada componente é transparente e modificável
- Geograficamente Irrestrito: Implante em qualquer lugar, atenda qualquer pessoa
- Sempre Disponível: Sem mudanças repentinas de API ou descontinuações de serviço
- Totalmente Personalizável: Adicione recursos, modifique o comportamento ou otimize para necessidades específicas
- Privacidade em Primeiro Lugar: Seus dados permanecem na sua infraestrutura, sob seu controle
E, ao contrário de algumas outras ferramentas de IA que eu poderia mencionar, esta definitivamente sabe onde fica a Europa no mapa!
O código completo está disponível no nosso Github.
Adoraríamos Saber o Que Você Acha!
Se você gostou desta publicação do blog, considere:
- ⭐ Dar-nos uma estrela no GitHub
- 💬 Entrar na nossa comunidade Milvus no Discord para compartilhar suas experiências
- 🔍 Explorar nosso repositório Bootcamp para mais exemplos de aplicações RAG com Milvus
Continue lendo

Why We Built Vector Lakebase: Rethinking Unstructured Data Architecture for AI
Vector Lakebase: a unified, lake-native data foundation for AI workloads — and an answer to what happens after vector databases succeed.

Zilliz Cloud Now Available in AWS Asia Pacific (Seoul)
Zilliz Cloud is now available in AWS Seoul — low-latency vector search, in-country data residency, and one-step migration for Korean AI teams. 31 regions across 5 clouds.

Zilliz Cloud Introduces Advanced BYOC-I Solution for Ultimate Enterprise Data Sovereignty
Explore Zilliz Cloud BYOC-I, the solution that balances AI innovation with data control, enabling secure deployments in finance, healthcare, and education sectors.



