Principais interfaces e parâmetros de solicitação do Qwen-Omni real-time com o DashScope Python SDK.
Pré-requisitos
A versão do SDK deve ser 1.25.17 ou posterior. Antes de começar, consulte Real-time multimodal interaction flow.
Primeiros passos
Baixe o código de exemplo no GitHub. Há três métodos de chamada disponíveis:
-
Exemplo de conversa por áudio: Captura entrada de áudio em tempo real do microfone, permite que o VAD mode detecte automaticamente o início e o fim da fala e suporta interrupção de voz.
Defina o parâmetro
enable_turn_detectioncomo True.Recomendamos o uso de fones de ouvido para reprodução de áudio a fim de evitar que ecos acionem a interrupção de voz.
-
Exemplo de conversa por áudio e vídeo: Captura entradas de áudio e vídeo em tempo real do microfone e da câmera, permite que o VAD mode detecte automaticamente o início e o fim da fala e suporta interrupção de voz.
Defina o parâmetro
enable_turn_detectioncomo True.Recomendamos o uso de fones de ouvido para reprodução de áudio a fim de evitar que ecos acionem a interrupção de voz.
-
Chamada local: Usa arquivos locais de áudio e imagem como entrada e habilita o Manual mode, permitindo controle manual do ritmo de envio.
Defina o parâmetro
enable_turn_detectioncomo False.
Parâmetros de solicitação
Defina os seguintes parâmetros de solicitação no construtor (init) da classe OmniRealtimeConversation.
Parâmetro | Tipo | Descrição |
|---|---|---|
model | str | Modelo Qwen-Omni a ser usado. Consulte Lista de modelos. |
callback |
| Instância de callback que processa eventos do lado do servidor. |
url | str | Endereço da chamada:
Substitua |
| Parâmetro | Tipo | Descrição |
|---|---|---|
| output_modalities | list[MultiModality] | Modalidade de saída do modelo. Defina como [MultiModality.TEXT] para apenas texto ou [MultiModality.TEXT, MultiModality.AUDIO] para áudio e texto simultaneamente. |
| voice | str | Voz para a saída de áudio. Para vozes compatíveis, consulte Voice list.Vozes padrão:
|
| input_audio_format | AudioFormat | Formato do áudio de entrada do usuário. Atualmente, oferece suporte apenas a PCM_16000HZ_MONO_16BIT, que representa um fluxo de áudio PCM com taxa de amostragem de 16 kHz. |
| output_audio_format | AudioFormat | Formato do áudio de saída do modelo. Atualmente, oferece suporte apenas a PCM_24000HZ_MONO_16BIT, que representa um fluxo de áudio PCM com taxa de amostragem de 24 kHz. |
| smooth_output | bool | Parâmetro compatível apenas com a série Qwen3-Omni-Flash-Realtime.
|
| instructions | str | Mensagem de sistema que define o objetivo ou a função do modelo.Por exemplo: Você é um agente de IA para um hotel cinco estrelas. Responda às perguntas dos clientes sobre tipos de quartos, instalações, preços e políticas de reserva. Seja preciso e amigável. Responda sempre com uma atitude profissional e prestativa. Não forneça informações não verificadas ou fora do escopo de services do hotel. |
| enable_input_audio_transcription | bool | Ative o reconhecimento de fala para o áudio de entrada. |
| input_audio_transcription_model | str | Modelo de reconhecimento de fala para transcrição do áudio de entrada. O valor é sempre qwen3-asr-flash-realtime. Este parâmetro não é configurável. |
| turn_detection_type | str | Tipo de Detecção de Atividade de Voz (VAD). Valores válidos:
|
| turn_detection_threshold | float | Limiar de detecção VAD. Aumente em ambientes ruidosos e diminua em ambientes silenciosos.
|
| turn_detection_silence_duration_ms | int | Duração do silêncio que indica o fim da fala. Se excedida, o modelo aciona uma resposta. Padrão: 800. Valores válidos: [200, 6000]. |
| turn_detection_param | dict | Parâmetros adicionais de configuração de turn_detection. Atualmente, oferece suporte a idle_timeout_ms (int): o tempo limite de ociosidade em milissegundos. Aplica-se apenas aos modelosqwen3.5-omni-plus-realtimeeqwen3.5-omni-flash-realtimeno modoserver_vad. Após o servidor concluir a reprodução de áudio e o usuário permanecer em silêncio além dessa duração (sem acionar speech.started), o modelo gera proativamente uma resposta para incentivar o usuário a continuar a conversa. Intervalo válido: [5000, 30000].Exemplo: turn_detection_param={'idle_timeout_ms': 5000} |
| enable_search | bool | Este parâmetro tem efeito apenas ao usar a série de modelos Qwen3.5-Omni-Realtime.Ative a pesquisa na web. Padrão: false. Quando ativado, o modelo pesquisa na web para responder a perguntas em tempo real.A chamada de ferramentas (tools) e a pesquisa na web (enable_search) são incompatíveis. Não é possível ativar ambas simultaneamente. |
| search_options | object | Opções de pesquisa na web. Tem efeito apenas quando enable_search está ativado.Atualmente, é possível definir apenas enable_source (Boolean), que controla se as fontes dos resultados da pesquisa devem ser retornadas. Defina como true para ativar. Exemplo: search_options={'enable_source': True}. |
| tools | list[dict] | Este parâmetro tem efeito apenas ao usar a série de modelos Qwen3.5-Omni-Realtime.Definições de ferramentas. Quando fornecidas, o modelo chama ferramentas externas para responder às perguntas do usuário. Se uma ferramenta for chamada, o modelo não gera áudio e retorna apenas os parâmetros de chamada da ferramenta.Cada ferramenta é um dicionário contendo os seguintes campos:
|
| temperature | float | Temperatura de amostragem que controla a diversidade do conteúdo.Valores mais altos produzem conteúdo mais diversificado; valores mais baixos produzem conteúdo mais determinístico.Valores válidos: [0, 2).Como tanto temperature quanto top_p controlam a diversidade do conteúdo, recomendamos definir apenas um deles.
Modelos |
| top_p | float | Limiar de probabilidade para amostragem de núcleo que controla a diversidade do conteúdo.Valores mais altos produzem conteúdo mais diversificado; valores mais baixos produzem conteúdo mais determinístico.Valores válidos: (0, 1,0].Como tanto temperature quanto top_p controlam a diversidade do conteúdo, recomendamos definir apenas um deles.Valores padrão de top_p:
Modelos |
| top_k | integer | Tamanho do conjunto de candidatos para amostragem. Por exemplo, 50 significa que apenas os 50 tokens com maior pontuação formam o conjunto de candidatos. Valores maiores aumentam a aleatoriedade; valores menores aumentam o determinismo. Defina como None ou um valor maior que 100 para desativar top_k e usar apenas top_p.O valor deve ser maior ou igual a 0.Valores padrão de top_k:
Modelos |
| max_tokens | integer | Número máximo de tokens a serem retornados.A configuração deOs valores padrão e máximo correspondem ao comprimento máximo de saída do modelo. Consulte o console do Model Studio para obter detalhes.Use max_tokens para limitar o comprimento da saída ao gerar resumos, palavras-chave, controlar custos ou reduzir o tempo de resposta.
Modelos |
| repetition_penalty | float | Controla a repetição nas sequências geradas. Valores mais altos reduzem a repetição. 1,0 significa nenhuma penalidade. Deve ser maior que 0.Valores padrão de repetition_penalty:
Modelos |
| presence_penalty | float | Controla a repetição de conteúdo na saída do modelo.Valores válidos: [-2,0, 2,0]. Valores positivos reduzem a repetição; valores negativos a aumentam.Valores padrão de presence_penalty:
Modelos |
| seed | integer | Torna a geração mais determinística, garantindo resultados consistentes entre execuções.Passar a mesma seed com parâmetros idênticos produz o mesmo resultado sempre que possível.Valores válidos: 0 a 231−1. Valor padrão: -1.
Modelos |
Interfaces principais
Classe OmniRealtimeConversation
Importe com from dashscope.audio.qwen_omni import OmniRealtimeConversation.
| Assinatura do método | Evento de resposta do servidor (entregue via callback) | Descrição |
|---|---|---|
Server-side eventSessão criadasession.updated Configuração da sessão atualizada | Crie uma conexão com o servidor. | |
session.updatedConfiguração da sessão atualizada | Atualize a configuração da sessão. Para detalhes dos parâmetros, consulte Parâmetros de solicitação.Após a conexão, o servidor retorna configurações de sessão padrão. Chame este método imediatamente após conectar para atualizar as definições.Quando o servidor recebe o evento session.update, ele valida os parâmetros. Parâmetros inválidos retornam um erro; caso contrário, o servidor atualiza a configuração da sessão. | |
| None | Adiciona áudio codificado em Base64 ao buffer de entrada na cloud. O buffer é um armazenamento temporário que pode ser gravado e confirmado posteriormente.
| |
| None | Adiciona dados de imagem codificados em Base64 ao buffer de vídeo na cloud. Aceita imagens locais ou capturas de fluxo de vídeo em tempo real.Limites de entrada de imagem:
| |
input_audio_buffer.clearedExclui o áudio recebido pelo servidor | Exclui o áudio do buffer atual na cloud. | |
input_audio_buffer.committedServidor recebeu o áudio confirmado | Confirma áudio e vídeo do buffer na cloud. Retorna um erro se o buffer estiver vazio.
| |
Server-side eventServidor começa a gerar uma respostaresponse.output_item.added Novo conteúdo de saída disponível na respostaServer-side event Item de conversa criadoresponse.content_part.added Novo conteúdo de saída adicionado ao item de mensagem do assistenteresponse.audio_transcript.delta Texto transcrito gerado incrementalmenteresponse.audio.delta Áudio gerado incrementalmente pelo modeloresponse.audio_transcript.done Transcrição de texto concluídaresponse.audio.done Geração de áudio concluídaresponse.content_part.done Streaming de conteúdo de texto ou áudio para a mensagem do assistente concluídoresponse.output_item.done Streaming de todo o item de saída para a mensagem do assistente concluídoresponse.done Resposta concluída | Instrui o servidor a criar uma resposta do modelo.Ao configurar uma sessão no modo "turn_detection", o servidor cria automaticamente uma resposta do modelo. | |
| None | Cancele a resposta em andamento. Se não houver resposta para cancelar, o servidor responde com um erro. | |
| None | Envia um evento conversation.item.create para o servidor. Em cenários de chamada de ferramentas, use este método para enviar o resultado da execução da ferramenta de volta ao servidor.O parâmetro item é um dicionário que deve conter os seguintes campos:
| |
| None | Encerra a tarefa e fecha a conexão. | |
| None | Obtém o session_id da tarefa atual. | |
| None | Obtém o response_id da última resposta. |
Interface de callback (OmniRealtimeCallback)
O servidor retorna eventos de resposta e dados via callbacks. Implemente métodos de callback para processar as respostas do servidor.
Importe com from dashscope.audio.qwen_omni import OmniRealtimeCallback.
| Método | Parâmetros | Valor de retorno | Descrição |
|---|---|---|---|
| None | None | Chamado após o estabelecimento da conexão com o servidor. | |
| message: Um evento de resposta do servidor. | None | Contém respostas de chamadas de interface e texto e áudio gerados pelo modelo. Consulte Server-side events. | |
| close_status_code: Código de status para fechamento do WebSocket.close_msg: Mensagem de fechamento do WebSocket. | None | Chamado após o servidor fechar a conexão. |
Perguntas frequentes
P: Como alinhar áudio e imagens de entrada?
O modelo em tempo real Qwen-Omni usa o fluxo de áudio como linha do tempo de entrada. As imagens são inseridas no fluxo de áudio com base no momento em que são enviadas. É possível adicionar imagens em qualquer ponto da linha do tempo do áudio.
Em cenários de interação em tempo real, você pode ativar ou desativar a entrada de vídeo a qualquer momento.
P: Qual é a frequência recomendada para entrada de imagens e áudio?
Em cenários de interação em tempo real, recomendamos enviar imagens com taxa de quadros de 1 ou 2 fps e enviar áudio em pacotes de 100 ms.
P: Quais são as diferenças entre os dois modos da chave turn_detection?
Quando turn_detection está ativado, ele suporta dois modos: server_vad e semantic_vad:
-
Ativar "turn_detection":
- Estado de entrada: O VAD baseado em cloud detecta o fim de uma frase no áudio de entrada e aciona imediatamente a inferência do Qwen-Omni para retornar o texto e a fala de resposta.
- Estado de resposta: Neste estado, você continua enviando entradas de áudio e vídeo sem interrupção enquanto o modelo responde. Após a conclusão da resposta, o estado retorna ao estado de entrada para aguardar a próxima entrada de fala.
- Interrupção: Se o usuário começar a falar enquanto o modelo responde, uma interrupção é acionada. O service interrompe imediatamente a resposta atual e muda para o estado de entrada.
-
Desativar "turn_detection":
- Você deve determinar manualmente o fim de uma rodada de entrada de áudio e vídeo e acionar a inferência do Qwen-Omni para obter uma resposta usando commit e create_response.
- Enquanto o modelo responde, você deve parar de enviar entradas de áudio e vídeo. Só é possível retomar a entrada para a próxima rodada após o modelo terminar de responder.
- Use o método cancel_response para interromper a resposta do modelo.