O Qwen-Audio é um modelo de interação de voz em tempo real ponta a ponta que utiliza o protocolo de streaming WebSocket para conversas de voz com baixa latência. Os casos de uso incluem assistentes de voz, atendimento ao cliente inteligente e companheiros de IA.
Visão geral
O Qwen-Audio converte áudio em tempo real em fala e texto por meio de uma conexão full-duplex, com entrada e saída em streaming.
Além do WebSocket, este modelo também suporta os protocolos AOQ e WebRTC. Para integrações no lado do cliente que priorizam latência estável, resiliência em redes instáveis e supressão de ruído e cancelamento de eco full-duplex integrados, recomenda-se o uso do AOQ. Para obter uma comparação entre os protocolos, consulte Realtime API overview.
- Três modos de interação: VAD acústico (server_vad), detecção inteligente de turnos semânticos (smart_turn) e controle manual (push-to-talk)
- No modo smart_turn, o modelo combina percepção acústica e compreensão semântica para determinar os limites dos turnos, evitando que sons de hesitação como "uh" ou "hmm" interrompam a conversa
- O suporte a Function Calling permite que o modelo decida quando invocar ferramentas externas para obter informações adicionais
- Gerenciamento de contexto de conversa: crie, recupere e exclua itens de conversa para injetar contexto histórico ou remover itens irrelevantes
- Saída de voz expressiva que ajusta dinamicamente o tom, o ritmo e a emoção com base no contexto da conversa
- Suporte a vozes do sistema e vozes clonadas; use o Voice Cloning para criar uma voz de IA personalizada para a saída de fala
- Aprimoramento de falante no modo smart_turn: forneça áudio pré-gravado de um usuário-alvo para que o modelo possa fixar nesse falante durante conversas duplex, bloqueando efetivamente outras vozes e ruídos de fundo
Como funciona
O Qwen-Audio utiliza uma conexão full-duplex via WebSocket com arquitetura orientada a eventos. O cliente e o servidor trocam dados simultaneamente por uma conexão persistente: o cliente transmite continuamente o áudio do microfone enquanto o servidor retorna respostas de fala e texto em tempo real. Toda a interação é orientada a eventos: o cliente envia eventos como session.update e input_audio_buffer.append, e o servidor responde com eventos como response.audio.delta e response.done. Não é necessário fazer polling.
O ciclo de vida típico de uma conexão consiste em: estabelecer a conexão WebSocket, enviar session.update para configurar os parâmetros da sessão, transmitir áudio e receber respostas e, em seguida, fechar a conexão.
Formato de áudio
Direção | Formato | Especificação |
|---|---|---|
Entrada (cliente para servidor) | PCM | Taxa de amostragem de 16 kHz, profundidade de 16 bits, mono |
Saída (servidor para cliente) | PCM | Taxa de amostragem de 24 kHz, profundidade de 16 bits, mono |
Capacidade de contexto
O modelo mantém o histórico da conversa. Quando o número de turnos ou a duração acumulada do áudio excede os limites abaixo, o histórico mais antigo é descartado automaticamente. A duração máxima representa o limite superior de áudio acumulado que o contexto do modelo consegue reter.
Modelo | Máx. de turnos de áudio | Duração máx. de áudio |
|---|---|---|
qwen-audio-3.0-realtime-plus | 50 | 300 segundos |
qwen-audio-3.0-realtime-flash | 50 | 300 segundos |
Pré-requisitos
- Obtain an API key e configure it as an environment variable.
- Para usar o protocolo AOQ, baixe e integre o SDK do cliente AOQ. Para mais detalhes, consulte SDK overview.
Início rápido
Siga estas etapas para iniciar uma conversa de voz em tempo real com o modelo Qwen-Audio.
- WebSocket native
server_vad. Antes de executar, instale as dependências necessárias:realtime_quickstart.py:python realtime_quickstart.py e fale ao microfone para iniciar uma conversa em tempo real. O servidor detecta automaticamente a atividade de fala e aciona as respostas.Exemplo completoO exemplo a seguir estende a conversa básica com tratamento de interrupção de voz e cancelamento de eco. Crie os dois arquivos no mesmo diretório:B64PCMPlayer.py
B64PCMPlayer.py
realtime_demo.py
realtime_demo.py
websockets for anterior à 11, altere additional_headers para extra_headers no código ou faça a atualização: pip install --upgrade websockets.python realtime_demo.py e fale ao microfone para iniciar uma conversa em tempo real. O sistema detecta automaticamente a atividade de fala e aciona as respostas.Configuração da sessão
Modos de interação
O Qwen-Audio suporta três modos de interação: server_vad (VAD acústico para detecção automática de fala), smart_turn (detecção inteligente de turnos semânticos, combinando análise acústica e semântica) e push-to-talk (controle manual pelo cliente). Para descrições detalhadas e diagramas de fluxo de interação de eventos, consulte Interaction modes.
turn_detection só pode ser definido antes do envio do primeiro áudio (estado IDLE). Para alternar os modos de interação durante uma sessão, feche e restabeleça a conexão.turn_detection em um evento session.update:
- server_vad:
- smart_turn:
- push-to-talk:
manual_funchat.py
manual_funchat.py
Instruções do sistema
Utilize o parâmetro instructions para definir a função do modelo, o estilo de resposta e as preferências comportamentais. Configure esse parâmetro em session.update para aplicá-lo a toda a sessão.
- Defina uma identidade clara para a função (por exemplo, "Você é um assistente de voz inteligente" ou "Você é um tutor de conversação em inglês") e, opcionalmente, inclua detalhes como nome ou gênero.
- Especifique um tom de conversa e um estilo de fraseado, enfatizando que um tom natural não compromete a integridade do conteúdo — detalhes, números e recomendações específicas ainda devem ser incluídos, apenas expressos de forma relaxada e natural.
- Oriente o modelo a considerar todas as restrições de contexto na conversa (como orçamento, preferências, restrições ou acordos anteriores). Quando várias condições se aplicarem, aborde cada uma delas e não omita informações críticas.
- Controle o formato de saída: a menos que o usuário solicite o contrário, evite emojis, outros caracteres especiais e formatação Markdown. Gere texto simples para garantir uma reprodução natural via TTS.
- Defina a estratégia de resposta: mantenha saudações simples e trocas casuais breves e naturais; para raciocínios, problemas com múltiplas condições, listas de recomendações ou conselhos de segurança, priorize a integridade — garanta que as informações-chave (como preços, locais e condições) estejam totalmente presentes, sem preâmbulos, repetições ou preenchimentos desnecessários.
- Estabeleça uma estratégia de acompanhamento: siga o princípio de "responder primeiro à pergunta atual do usuário e, em seguida, fazer naturalmente uma pergunta de acompanhamento no final para avançar a conversa". Faça apenas uma pergunta por vez; não faça várias perguntas em sequência nem confirme repetidamente.
instructions para cenários gerais de conversa por voz. Ela abrange definição de função, estilo de conversa, controle de formato e estratégia de acompanhamento. Use-a diretamente ou adapte-a às suas necessidades:
instructions a seguir abrangem uma variedade de estilos de persona. Escolha aquele que melhor se adapta ao seu caso de uso ou personalize-o ainda mais:
- Daisy (Companheira Doce & Descolada):
- Len (Frio & Língua Afiada):
- Mochen (Calmo & Carismático):
- Hannibal (Elegante & Incisivo):
- Heizi (Parceiro do Nordeste):
Configuração de voz
Use o parâmetro voice para definir a voz TTS nas respostas do modelo. O padrão é longanqian. Dois tipos de vozes são suportados.
Vozes do sistema: especifique diretamente o nome da voz. Valores disponíveis: longanqian, longanlingxin, longanlingxi, longanxiaoxin, longanlufeng.
target_model como qwen-audio-3.0-realtime-plus ou qwen-audio-3.0-realtime-flash) e, em seguida, passe o voice_id retornado como o valor de voice.
Modalidades de saída
Utilize o parâmetro modalities para controlar os tipos de saída do modelo:
["audio", "text"](padrão): gera tanto fala quanto texto.["text"]: gera apenas texto, sem fala. Adequado para depuração, logs ou cenários que precisam apenas de respostas em texto.
response.modalities em response.create para substituir a configuração de modalidade para uma única resposta.
Configuração de VAD
No modo server_vad, configure os seguintes parâmetros no objeto session.turn_detection para ajustar o comportamento do VAD (esses parâmetros não têm efeito no modo smart_turn):
Parâmetro | Tipo | Descrição |
|---|---|---|
| float | Sensibilidade do VAD. Valores menores aumentam a sensibilidade do VAD, facilitando a detecção de sons fracos (incluindo ruído de fundo) como fala. Valores maiores diminuem a sensibilidade, exigindo uma fala mais clara e alta para acionar a detecção. Intervalo: [-1,0, 1,0]. Padrão: 0,5. |
| integer | Duração mínima de silêncio (em milissegundos) após o término da fala antes de acionar uma resposta do modelo. Valores menores produzem respostas mais rápidas, mas podem causar acionamentos falsos durante pausas breves. Intervalo: [200, 6000]. Padrão: 800. Intervalo recomendado para conversas: 400-800. |
Controle de turnos do histórico
Use o parâmetro max_history_turns para controlar quantos turnos históricos de perguntas e respostas o modelo referencia durante a inferência. Valores mais altos permitem que o modelo revise mais histórico de conversa para uma melhor compreensão do contexto, mas aumentam o consumo de tokens e a latência de inferência.
max_history_turns: 1-50. Padrão: 20.
Dicas de ajuste:
- Conversas curtas (como perguntas e respostas rápidas): defina um valor menor (por exemplo, 5-10) para reduzir a latência.
- Conversas longas (como atendimento ao cliente com múltiplos turnos): defina um valor maior (por exemplo, 30-50) para ajudar o modelo a compreender todo o contexto.
Recursos avançados
Function Calling
O Qwen-Audio suporta Function Calling, o que permite ao modelo decidir quando invocar ferramentas externas com base no contexto da conversa.
1. Registrar ferramentas
Configure tools por meio de session.update:
response.function_call_arguments.done, execute a ferramenta no cliente e envie o resultado de volta via conversation.item.create:
response.create para que o modelo gere uma resposta com base no resultado da ferramenta:
function_call e pode incluir tanto mensagens regulares quanto chamadas de função. O conteúdo da chamada de função não é enviado ao TTS para reprodução.realtime_demo.py do início rápido. Certifique-se de que B64PCMPlayer.py esteja no mesmo diretório antes de executar.
realtime_fc_demo.py
realtime_fc_demo.py
python realtime_fc_demo.py e fale ao microfone para experimentar conversas em tempo real com Function Calling. Por exemplo, pergunte "Qual é o clima em Hangzhou?" ou "Quanto custa uma passagem de trem de Pequim para Xangai?" e o modelo invocará automaticamente a ferramenta correspondente e responderá com o resultado.
Gerenciamento de contexto de conversa
O Qwen-Audio permite gerenciar itens de conversa no contexto por meio de eventos do cliente. Use isso para injetar contexto histórico, adicionar informações de texto ou remover itens de conversa irrelevantes.
-
Criar um item de conversa (
conversation.item.create): insere um item de conversa no contexto. Os seguintes três valores deitem.typesão suportados:message: uma mensagem de conversa regular. Especifiquerole(system,userouassistant) e um arraycontent. Use isso para injetar histórico de conversa ou instruções do sistema.function_call: uma solicitação de chamada de função. Especifiquecall_id,nameearguments(string JSON). Geralmente gerado pelo servidor, mas o cliente também pode usar isso para injetar registros históricos de chamadas de função.function_call_output: um resultado de execução de ferramenta. Especifiquecall_ideoutput(string JSON). Após receber umfunction_call, execute a ferramenta no cliente e retorne o resultado com este tipo.
previous_item_idespecifica o item de conversa existente após o qual o novo item deve ser inserido. Isso permite inserir conteúdo em qualquer posição no histórico da conversa. Se omitido, o novo item é anexado ao final.- Inserir uma mensagem do usuário em uma posição específica:
- Retornar um resultado de Function Calling:
item.id especificado em conversation.item.create já existir na conversa, um erro será retornado.- Recuperar um item de conversa (
conversation.item.retrieve): consulta um item de conversa armazenado no servidor. Para conteúdo do tipo áudio, apenas o texto da transcrição é retornado, não os dados brutos de áudio.
- Excluir um item de conversa (
conversation.item.delete): remove um item específico do contexto da conversa.
Transcrição de áudio ambiente
Apenas modo smart_turn. Quando o VAD detecta atividade de fala, mas a análise semântica determina que não é um turno válido (como ruído ou sons de hesitação como "uh" ou "hmm"), o servidor não aciona um turno de conversa. Em vez disso, ele envia o resultado do ASR para o cliente como um evento ambient_audio_transcription. Essa transcrição não é gravada no contexto da conversa.
delta e completed. Use este evento para implementar monitoramento de áudio ambiente ou consciência de cena de conversa.
Aprimoramento de falante
Apenas modo smart_turn. Forneça URLs de áudio pré-gravado do usuário-alvo em session.update. O modelo se fixará nesse falante durante conversas duplex, ignorando efetivamente outras vozes e ruídos de fundo, permitindo interações duplex fluidas em ambientes abertos.
Configuração: forneça URLs de áudio de impressão vocal acessíveis publicamente em turn_detection.voiceprint_audio_urls dentro da primeira chamada de session.update.
- Até 5 URLs. O áudio deve estar no formato PCM ou WAV de 16 kHz.
- Este parâmetro só tem efeito na primeira chamada de
session.update. O campo é ignorado nas chamadas subsequentes.
voiceprint_audio_list.in_progress: o registro foi iniciado. Enviado antes desession.updated, carregandoitem_id.voiceprint_audio_list.completed: registro bem-sucedido. Oitem_idcorresponde ao dein_progress.voiceprint_audio_list.failed: falha no registro, com um camporeasondescrevendo o erro (por exemplo, URL de áudio inacessível). Uma falha no registro não bloqueia a conversa em andamento.
Indo para produção
Configurar tolerância a falhas
- Reconexão do cliente: implemente reconexão automática para lidar com instabilidade de rede. Defina um sinal de reconexão no callback
on_errore use backoff exponencial (por exemplo, aguarde 1s, 2s, 4s) para novas tentativas. - Classificação de erros: erros do cliente (
invalid_request_error) não desconectam a sessão; registre-os em log ou ajuste os parâmetros. Erros do servidor (server_error) encerram a conexão e exigem reconexão. - Tratamento de interrupções: nos modos server_vad / smart_turn, uma nova fala do usuário interrompe automaticamente a resposta em andamento do modelo (
response.doneretornastatus=cancelled). Ao receberinput_audio_buffer.speech_started, limpe imediatamente o buffer de reprodução local para evitar sobreposição de áudio.
Ciclo de vida da conexão
Uma sessão WebSocket típica segue este ciclo de vida:
- Conectar: o cliente inicia uma conexão WebSocket e o servidor retorna um evento
session.created. - Configurar: o cliente envia
session.updatepara definir o modo de interação, voz, ferramentas e outros parâmetros. Conclua esta etapa antes de enviar qualquer áudio. - Interagir: o cliente transmite continuamente áudio (
input_audio_buffer.append). O servidor realiza a inferência com base na detecção de VAD ou gatilhos manuais e retorna fala e texto em streaming. - Fechar: o cliente fecha a conexão WebSocket. O servidor também pode desconectar se a conexão ficar ociosa por muito tempo.
Otimização de latência
- Tamanho do bloco de áudio: envie cerca de 100 ms de dados de áudio por bloco (16 kHz x 16 bits x mono = 3.200 bytes por bloco). Isso equilibra o desempenho em tempo real com a eficiência da rede.
- Reprodução em streaming: comece a reproduzir o áudio assim que
response.audio.deltachegar. Não espere porresponse.donepara reproduzir a resposta completa. - Limpar buffer na interrupção: ao receber
input_audio_buffer.speech_started, limpe imediatamente o buffer de reprodução local para evitar que áudio obsoleto continue sendo reproduzido.
Modelos e regiões suportados
China (Beijing)
Use uma chave de API da região de Pequim ao chamar os seguintes modelos:
- qwen-audio-3.0-realtime-plus
- qwen-audio-3.0-realtime-flash
- China (Beijing)
- qwen-audio-3.0-realtime-plus
- qwen-audio-3.0-realtime-flash
Referência da API
- WebSocket API
- Client events
- Server events
- AOQ Client SDK
- Realtime API overview (Descrição do protocolo WebRTC)