Saltar al contenido principal
LiveKit Agents es un framework para construir IA de voz en tiempo real. Venice puede impulsar las tres etapas de un agente de voz: reconocimiento de voz (STT), el LLM y síntesis de voz (TTS). El plugin livekit-plugins-openai se encarga del STT y del LLM cuando lo apuntas a la URL base de Venice. Para el TTS, una breve clase VeniceTTS llama directamente al endpoint /audio/speech de Venice.
Venice encaja en la arquitectura de tubería STT-LLM-TTS de LiveKit Agents. Venice no expone una API WebSocket Realtime (voz a voz) de OpenAI, por lo que la ruta RealtimeModel / multimodal no está disponible. Utiliza la tubería por componentes que se muestra a continuación — te da control total sobre cada modelo y mantiene la inferencia en la infraestructura privada de Venice.

Cómo se corresponde Venice con LiveKit Agents

Configuración

Instala el framework y los plugins que se usan a continuación:
Establece tu clave de API de Venice y los detalles de conexión de LiveKit:
El plugin de OpenAI recurre a OPENAI_API_KEY cuando se omite api_key. Como lo estás apuntando a Venice, pasa siempre api_key de forma explícita (o la clave se leería de la variable equivocada). Los ejemplos a continuación leen VENICE_API_KEY.

Clase Venice TTS

No uses la clase openai.TTS del plugin con Venice. Las versiones actuales de livekit-plugins-openai envían un campo stream_format en cada solicitud de voz, y el endpoint /audio/speech de Venice lo rechaza con un 400. En su lugar, guarda esta clase como venice_tts.py junto a tu agente. Llama a /audio/speech solo con los campos que Venice acepta y entrega el audio a LiveKit a medida que llega.
venice_tts.py
response_format debe ser un formato compatible con el modelo. Consulta model_spec.supported_formats en GET /models?type=tts. Usa pcm con tts-kokoro, que LiveKit reproduce sin paso de decodificación. Para otros modelos, pasa mp3 o wav y LiveKit decodificará el audio.

Agente de voz completo

Este es un agente de voz completo que transcribe con Venice STT, piensa con un LLM de Venice y habla con Venice TTS mediante la clase VeniceTTS anterior. Silero proporciona detección de actividad de voz local para que el STT por lotes sepa cuándo termina un turno.
agent.py
Ejecútalo en desarrollo:

Configuración de cada componente

LLM

El LLM es la correspondencia más limpia — Venice /chat/completions admite streaming SSE, llamadas a herramientas y visión, todo lo cual LiveKit utiliza directamente. venice-uncensored-1-2 mantiene la inferencia privada y sin censura mientras alimenta la tubería de TTS; recurre a un modelo de clase flash solo si necesitas un menor tiempo hasta el primer token.
Pasa opciones específicas de Venice (búsqueda web, personas de personajes, control del razonamiento) a través de extra_body:

Reconocimiento de voz (Speech-to-Text)

El STT de OpenAI de LiveKit llama a /audio/transcriptions por cada segmento de habla, por lo que necesita un VAD (Silero, arriba) para detectar cuándo termina un turno. Anula el modelo predeterminado con un modelo STT de Venice. nvidia/parakeet-tdt-0.6b-v3 es la opción más pequeña y de menor latencia; stt-xai-v1 y elevenlabs/scribe-v2 son alternativas más recientes si quieres mayor precisión.

Síntesis de voz (Text-to-Speech)

VeniceTTS llama a /audio/speech. Las voces son específicas de cada modelo en Venice — pasa un par model/voice del mismo modelo. tts-kokoro mantiene la etapa de voz privada y sin censura para que pueda pronunciar la salida del LLM de forma literal, y su salida pcm evita un paso de decodificación de MP3 y reduce un poco la latencia. Las voces más rápidas respaldadas por proveedores (por ejemplo, Gemini) pueden aplicar filtrado de contenido, así que evítalas si necesitas voz sin censura.

Modelos recomendados

Los IDs de los modelos cambian con el tiempo — descubre las opciones actuales en tiempo de ejecución con GET /models?type=... y GET /models/traits en lugar de codificarlos de forma fija. Para agentes de voz, prioriza los niveles de baja latencia (modelos denominados flash, turbo, mini, o con pocos parámetros) ya que la capacidad de respuesta percibida depende del tiempo hasta el primer token y de la velocidad de TTS. Buenos puntos de partida del catálogo actual:

Explorar todos los modelos

Filtra por texto, reconocimiento de voz y síntesis de voz con precios y capacidades en tiempo real.

Latencia y consejos para producción

La calidad del agente de voz está dominada por la latencia en la toma de turnos — el tiempo entre que el usuario termina su frase y el agente comienza a hablar. Con la tubería íntegramente de Venice, calcula aproximadamente: Espera ~0,8–1,5 s hasta el primer audio — genial para una toma de turnos mesurada, estilo asistente. Para conversaciones altamente interrumpibles y solapadas notarás la diferencia respecto a un modelo nativo de voz a voz.

Reducir la latencia

  • Usa tts-kokoro con response_format="pcm", el valor predeterminado de VeniceTTS, para saltarte el paso de decodificación de MP3.
  • Ajusta Silero VAD (silero.VAD.load(min_silence_duration=0.4)) para acortar la detección de fin de turno sin cortar el habla.
  • Prefiere niveles de baja latencia para STT/TTS (por ejemplo, tts-kokoro para TTS, nvidia/parakeet-tdt-0.6b-v3 para STT). Conserva venice-uncensored-1-2 para el LLM y mantén la privacidad y ausencia de censura; cambia a un LLM de clase flash solo si necesitas un menor tiempo hasta el primer token.
  • Mantén las respuestas concisas — la primera frase es la que condiciona la capacidad de respuesta percibida.

Combinar proveedores

LiveKit te permite elegir cada componente de forma independiente, de modo que puedes mantener Venice donde su privacidad y sus modelos sin censura son más importantes y sustituirlo por un proveedor de streaming donde la latencia es crítica. Una configuración común de alta interactividad conserva el LLM de Venice (y opcionalmente el STT) y lo empareja con un TTS de streaming dedicado:
Comienza con una configuración íntegramente de Venice para la instalación más sencilla y privada. Si estás construyendo una experiencia de consumo rápida y altamente conversacional, mantén el LLM de Venice y evalúa un TTS de streaming para la etapa de salida de voz.

Limitaciones y notas

  • Sin API Realtime / voz a voz. Venice no tiene un WebSocket Realtime de OpenAI, por lo que openai.realtime.RealtimeModel y la ruta de agente multimodal no están disponibles. Utiliza la tubería STT-LLM-TTS mostrada arriba.
  • El STT es por lotes, no en streaming. La transcripción de Venice es de solicitud/respuesta, por lo que se requiere un VAD (Silero) para la detección de fin de turno. Esto añade una pequeña cantidad de latencia frente a un socket STT en streaming.
  • El TTS usa la clase VeniceTTS, no openai.TTS. Las versiones actuales de livekit-plugins-openai envían stream_format en las solicitudes de voz, y Venice lo rechaza con un 400. VeniceTTS informa streaming=False, por lo que LiveKit sintetiza la respuesta aproximadamente frase a frase, y no utiliza el flag streaming de Venice. La latencia sigue siendo aceptable para la mayoría de los agentes; usa response_format="pcm" para minimizar la sobrecarga de decodificación.
  • Empareja la voz con el modelo. Los IDs de voice de TTS solo son válidos para su model correspondiente. Consulta Modelos de síntesis de voz.
  • No codifiques listas de modelos de forma fija. Los IDs de los modelos de Venice se deprecian y reemplazan con regularidad — consulta GET /models / GET /models/traits en tiempo de ejecución. Consulta Deprecaciones.

Recursos relacionados