Un asistente de inteligencia artificial conversacional en tiempo real que combina transcripción de voz, procesamiento de lenguaje natural y síntesis de voz usando Google Gemini 2.5 Flash.
RealtimeVoiceAssistant es una aplicación de asistente conversacional de última generación que permite interacciones de voz completamente naturales en tiempo real. Construido con tecnologías de alto rendimiento:
- Rust: Backend altamente optimizado para procesamiento de audio de baja latencia
- WebSocket: Comunicación bidireccional en tiempo real
- Google Gemini 2.5 Flash: LLM más rápido y eficiente del mercado
- Streaming en vivo: Respuestas que comienzan antes de terminar de procesar
Este proyecto demuestra la integración de sistemas críticos de rendimiento (Rust) con IA moderna (Gemini) para crear experiencias conversacionales fluidas e inmersivas.
- Comprensión de audio bidireccional en múltiples idiomas
- Respuestas de IA en streaming (transmisión en vivo)
- Conversación continua sin necesidad de reactivación
- Latencia optimizada con componentes críticos en Rust
- Soporte automático para múltiples idiomas (inglés, español, etc.)
- Detección automática de idioma del usuario
- Respuestas en el mismo idioma
- Backend Rust: Procesamiento de audio ultrarrápido y seguro en memoria
- STT (Speech-to-Text): Web Speech API del navegador
- LLM: Google Gemini 2.5 Flash con streaming
- TTS (Text-to-Speech): Web Speech API + Google Cloud Text-to-Speech
- WebSocket: Comunicación persistente en tiempo real servidor-cliente
- RAG Simulado: Base de contexto empresarial inteligente
- Visualizador de frecuencia de audio en vivo
- Diseño inmersivo estilo Gemini Live (tema oscuro)
- Estados visuales claros: escuchando, procesando, respondiendo
- Historial de conversación scrollable
- Python 3.9+
- Rust (para compilar componentes de rendimiento crítico)
- Node.js (opcional, si usas frontend separado)
- Google API Key (para Gemini y Text-to-Speech)
- Navegador moderno con soporte WebSocket y Web Audio API
git clone https://github.com/Dan178A/RealtimeVoiceAssistant.git
cd RealtimeVoiceAssistantCrea un archivo .env en la raíz del proyecto:
GEMINI_API_KEY=tu_api_key_de_google_aquiObtener API Key:
- Ve a Google Cloud Console
- Habilita la API de Gemini y Text-to-Speech
- Crea una clave API
Para aprovechar el máximo rendimiento del backend:
cargo build --releasepip install -r requirements.txtO manualmente:
pip install fastapi uvicorn websockets python-dotenv google-genai google-cloud-texttospeechpython main.pyo con uvicorn directamente:
uvicorn main:app --reload --host 0.0.0.0 --port 8000Abre en tu navegador:
http://localhost:8000/index.html
- Haz clic en "INICIAR SISTEMA"
- Di "asistente" para activar
- ¡Comienza a conversar! 🎤
Comandos:
- Di "asistente" → Activa el modo conversación
- Di "adiós" o "apagar" → Vuelve al modo durmiente
Abre en tu navegador:
http://localhost:8000/test.html
Esta versión envía audio binario real a Gemini para transcripción más precisa.
RealtimeVoiceAssistant/
├── src/ # Código fuente Rust para rendimiento crítico
│ ├── main.rs # Punto de entrada del procesamiento de audio
│ └── audio.rs # Optimizaciones de procesamiento de audio
├── main.py # Backend FastAPI - Modo transcripción en Frontend
├── test.py # Backend FastAPI - Modo audio binario a Gemini
├── chirp3.py # Utilidad de síntesis de voz con Google Cloud
├── index.html # Frontend principal (STT en navegador)
├── test.html # Frontend hibrido (audio binario)
├── Cargo.toml # Configuración de Rust
├── .env # Variables de entorno (no incluir en git)
├── .gitignore # Archivos a ignorar
└── README.md # Este archivo
┌─────────────────────────────┐
│ Navegador (Vue.js/JS) │
├─────────────────────────────┤
│ • Web Speech API │
│ • WebSocket │
│ • Canvas Visualizer │
└──────────────┬──────────────┘
│ WebSocket
▼
┌─────────────────────────────┐
│ FastAPI Server (Python) │
├─────────────────────────────┤
│ • Gemini 2.5 Flash │
│ • Streaming en tiempo real │
│ • RAG inteligente │
│ • Rust backend (opcional) │
└──────────────┬──────────────┘
│
▼
┌──────────────────────┐
│ Google Cloud APIs │
│ • Gemini AI │
│ • Text-to-Speech │
└──────────────────────┘
- Usuario habla → Web Speech API transcribe en frontend
- Frontend envía texto → WebSocket al servidor
- Servidor ejecuta RAG → Busca contexto relevante
- Gemini procesa → Con contexto + prompt optimizado
- Streaming en vivo → Servidor envía chunks de respuesta
- Frontend reproduce → TTS del navegador lee la respuesta
- Loop continuo → Vuelve a escuchar automáticamente
- Usuario habla → MediaRecorder captura audio binario
- Frontend envía Blob → WebSocket binario al servidor
- Gemini transcribe → Audio real → Texto preciso (potenciado por Rust)
- Resto igual → Procesa con RAG y genera respuesta
- Streaming + TTS → Igual que arriba
En index.html (línea 66):
palabraActivacion: 'tu_palabra',En main.py (línea 51):
model='gemini-2.0-flash-exp', # o el modelo que prefierasEn main.py (línea 19):
return "Tu contexto empresarial personalizado aquí"En index.html (línea 235):
locucion.rate = 1.1; // Rango: 0.5 - 2.0Usuario: "¿Cuál es tu horario de atención?"
Asistente: "Nuestro horario es 24/7, estamos disponibles las 24 horas del día..."
Usuario: "Good morning, what languages do you support?"
Asistente: "We support multiple languages including English and Spanish..."
Usuario: "¿Cómo estás?"
Asistente: "¡Estoy bien, gracias! ¿En qué puedo ayudarte?"
Usuario: "Cuéntame un chiste"
Asistente: (Automáticamente escuchando y respondiendo)
Los componentes críticos del sistema que requieren baja latencia están implementados en Rust:
- Procesamiento de audio: Decodificación y análisis de frecuencia de ultrabajalencia
- Gestión de buffers: Asignación segura de memoria sin garbage collection
- WebSocket binario: Transferencia eficiente de chunks de audio
El backend Python actúa como orquestador mientras que Rust maneja las operaciones críticas, garantizando respuestas <100ms.
Solución: Permite el acceso al micrófono cuando el navegador lo solicite.
Solución: Verifica que:
- Creaste el archivo
.env - Agregaste
GEMINI_API_KEY=tu_clave_aqui - Ejecutas
dotenv.load_dotenv()en el servidor
Solución: Compila los componentes Rust en modo release:
cargo build --release- Conexión bidireccional persistente
- Permite streaming en tiempo real
- Bajo overhead en comparación con HTTP polling
- Respuestas fragmentadas en chunks
- Menor latencia percibida por el usuario
- Sensación de respuesta "en vivo"
- Búsqueda de contexto + Generación de IA
- Mejora precisión de respuestas
- En este proyecto es simulado (mejora futura)
- STT: Speech Recognition (transcripción)
- TTS: Speech Synthesis (síntesis de voz)
- Sin dependencias externas en el navegador
- Rendimiento garantizado sin garbage collection
- Seguridad de memoria en tiempo de compilación
- Paralelismo seguro con traits y ownership
- Integración de base de datos real (PostgreSQL)
- Sistema RAG con embeddings (Pinecone/Weaviate)
- Persistencia de conversaciones
- Sistema de autenticación de usuarios
- Interfaz de administración
- Estadísticas y analytics avanzadas
- Soporte para múltiples idiomas UI
- Caché de respuestas con Redis
- Rate limiting inteligente
- Componentes adicionales en Rust para optimización
Frontend: HTML5 | JavaScript | Web Audio API | Canvas
Backend: Python (FastAPI, uvicorn)
Performance: Rust (audio processing, critical paths)
LLM: Google Gemini 2.5 Flash
Communication: WebSocket (bidireccional)
TTS: Web Speech API + Google Cloud Text-to-Speech
Cloud: Google Cloud Platform
Este proyecto está bajo licencia MIT. Ver LICENSE para más detalles.
Creado por Dan178A | GitHub Profile
Las contribuciones son bienvenidas. Por favor:
- Haz un Fork del proyecto
- Crea una rama (
git checkout -b feature/mejora) - Commit tus cambios (
git commit -am 'Agrega mejora') - Push a la rama (
git push origin feature/mejora) - Abre un Pull Request
Si tienes preguntas o problemas:
- Abre un Issue en el repositorio
- Revisa la sección de Troubleshooting
- Consulta la documentación de Google Gemini
- Explora la documentación de Rust
🌟 RealtimeVoiceAssistant - Asistente IA conversacional en tiempo real con Rust 🌟
Última actualización: Junio 2026 Stack: Rust + Python + Gemini AI + WebSocket
