Visão geral
A integração de voz consiste em três componentes principais:- Token de Sala: Um JWT que concede acesso a uma sala LiveKit
- Conexão LiveKit: Comunicação em tempo real baseada em WebRTC
- Agente de Voz: Processa entrada de áudio/texto e gera respostas faladas
- STT (Speech-to-Text): O áudio é transmitido via WebSocket a 16kHz e transcrito
- LLM: O texto transcrito é processado pela API de Respostas MKA1
- TTS (Text-to-Speech): A saída do LLM é sintetizada em áudio a 24kHz
"voice_mode": "true" no metadata da requisição. Isso permite distinguir respostas originadas por voz das baseadas em texto ao revisar o uso ou histórico de respostas.
Obtendo um token de sala
Para iniciar uma sessão de voz, primeiro solicite um token de sala à API MKA1. O endpoint de token exige uma chave de API e aceita opcionalmente o cabeçalhoX-On-Behalf-Of para identificar usuários finais. Veja Autenticação para detalhes.
Parâmetros
O corpo da requisição possui dois objetos de nível superior:llm — configuração do LLM (obrigatório)
O objeto llm aceita os mesmos campos do corpo da requisição da API de Respostas, exceto campos gerenciados pelo agente de voz (input, stream, store, background).
Você não pode especificar ambos
previous_response_id e conversation.
Os metadados do token são incorporados em um JWT, que é passado como cabeçalho HTTP. Mantenha o payload total de
llm abaixo de ~8 KB — arrays grandes de tools podem precisar ser reduzidos.stt — configuração de Speech-to-Text (opcional)
Controla a detecção de atividade de voz (VAD) e o comportamento de endpointing no servidor.
Configuração avançada
Você pode passar ferramentas, instruções personalizadas e ajuste de STT em uma única requisição de token:Resposta
O token inclui metadados que o agente de voz usa para configurar a sessão.
Continuando uma sessão
Para continuar a partir de uma resposta anterior:Conectando-se a uma sala
Depois de obter um token, use o SDK do LiveKit para conectar-se à sala.Enviando entrada de áudio
O agente aceita entrada de áudio através do track de áudio da sala LiveKit. O áudio é processado a 16kHz.Comportamento do áudio
- Detecção de Atividade de Voz (VAD): O VAD é tratado no servidor pelo agente MKA1, não localmente. O agente detecta automaticamente quando você para de falar e inicia o processamento.
- Taxa de amostragem: O áudio é transmitido a 16kHz para o serviço de STT.
- Endpointing: O agente usa endpointing no servidor para determinar quando a fala termina. Não há atraso de endpointing local.
Enviando entrada de texto
Você também pode enviar mensagens de texto diretamente ao agente sem falar.Recebendo respostas do agente
O agente responde de três formas:- Saída de áudio: Fala sintetizada via track de áudio
- Transcrição: Texto do que o agente está dizendo (para legendas)
- Metadados da resposta: ID da resposta e ID da conversa via data channel
Inscrevendo-se na saída de áudio
Recebendo transcrições
O agente publica transcrições de sua fala. Você pode usá-las para legendas ou registro.Recebendo metadados da resposta
O agente publica oresponse_id e o conversation_id (se aplicável) quando começa a gerar uma resposta. Salve o response_id para encadear sessões futuras usando previous_response_id.
Continuidade de conversas
O agente suporta conversas de múltiplas interações com memória persistente. Cada resposta recebe automaticamente umresponse_id, enquanto conversas precisam ser explicitamente criadas e gerenciadas pela API de Conversas.
Há duas formas de continuar uma conversa:
llm.previous_response_id encadeia uma nova sessão a uma resposta específica. O agente recebe o contexto daquela resposta e todas as anteriores na cadeia. Use quando:
- Você deseja continuar de um ponto específico em uma conversa
- Está construindo um fluxo de conversa linear
- Deseja ramificar a partir de uma resposta específica
llm.conversation referencia uma conversa criada via a API de Conversas. Use quando:
- Precisa gerenciar metadados da conversa (títulos, tags, etc.)
- Deseja listar ou buscar conversas passadas
- Está construindo uma interface de chat com histórico persistente
- Múltiplos clientes precisam acessar a mesma conversa
Iniciando uma nova sessão
Continuando de uma resposta anterior
Useprevious_response_id para encadear uma nova sessão à última resposta, preservando o contexto da conversa:
Continuando de uma conversa
Useconversation_id para continuar uma conversa existente criada via a API de Conversas:
Lidando com desconexão
Tokens expiram após 5 minutos. Se precisar de sessões mais longas, implemente lógica de reconexão:Exemplo completo
Veja um exemplo completo integrando tudo:Tratamento de erros
Erros do endpoint de token
São retornados como respostas HTTP ao solicitar um token de sala:Erros durante a sessão
Durante uma sessão de voz ativa, o agente publica erros via data channel do LiveKit. Ouça-os junto com os metadados de resposta:
Códigos de erro:
Erros de conexão
Próximos passos
- Explore o endpoint de token do LiveKit na referência da API
- Saiba mais sobre a API de Respostas que alimenta o agente de voz
- Revise os endpoints de TTS e STT para casos de uso não em tempo real