Qwen-Omni eventos do servidor
Referência do servidor WebSocket
Eventos do servidor para o Qwen-Omni-Realtime API, incluindo eventos de chamada de ferramenta (chamada de função).
Referência: Multimodal em tempo real.
erro
Mensagem de erro do servidor.
{
"event_id": "event_RoUu4T8yExPMI37GKwaOC",
"type": "error",
"error": {
"type": "invalid_request_error",
"code": "invalid_value",
"message": "Invalid modalities: ['audio']. Supported combinations are: ['text'] and ['audio', 'text'].",
"param": "session.modalities"
}
}
Identificador exclusivo do evento.
Sempre error.
Detalhes do erro.
Tipo de erro.
Código de erro.
Mensagem de erro.
Parâmetro relacionado (como `session.modalities`).
sessão.criada
Primeiro evento após a conexão. Contém a configuração de sessão padrão.
{
"event_id": "event_RdvlSpbBb2ssyBjYrDHjt",
"type": "session.created",
"session": {
"object": "realtime.session",
"model": "qwen3.8-omni-flash-realtime",
"modalities": [
"text",
"audio"
],
"voice": "Cherry",
"input_audio_format": "pcm",
"output_audio_format": "pcm",
"input_audio_transcription": {
"model": "qwen3-asr-flash-realtime"
},
"turn_detection": {
// The value can be server_vad or semantic_vad (supported by qwen3.8-omni-flash-realtime and qwen3.5-omni-realtime models).
"type": "server_vad",
"threshold": 0.5,
"prefix_padding_ms": 300,
"silence_duration_ms": 800,
"create_response": true,
"interrupt_response": true
},
"enable_search": false,
"search_options": {},
"tools": [],
"temperature": 0.8,
"id": "sess_Ov7GOXoNXhNjlxXtOGKQS"
}
}
Identificador exclusivo do evento.
Sempre session.created.
Configuração da sessão.
Sempre `realtime.session`.
Nome do modelo.
Modalidades de saída.
Voz para saída de áudio.
O formato do áudio de entrada do usuário. Atualmente só suporta `pcm`. O áudio de entrada deve ser um fluxo de áudio PCM com taxa de amostragem de 16 kHz.
O formato do áudio de saída do modelo. Atualmente só suporta `pcm`. O áudio de saída é um fluxo de áudio PCM com taxa de amostragem de 24 kHz.
Configuração de transcrição de fala.
Modelo de transcrição. Sempre `qwen3-asr-flash-realtime`. Este parâmetro não é configurável.
Configuração de detecção de atividade de voz (VAD).
Tipo VAD. Os valores válidos são `server_vad` (padrão) ou `semantic_vad`. Consulte [Eventos do cliente](/api-reference/real-time-multimodal/client-events).
Limiar de detecção de VAD.
Duração do silêncio (ms) antes que a fala seja considerada encerrada.
O tempo limite de inatividade em milissegundos. Devolvido apenas em `server_vad` modo com `qwen3.5-omni-plus-realtime` ou `qwen3.5-omni-flash-realtime` modelos.
Se deve ativar a pesquisa na web. Apoiado por Qwen3.8-Omni-Flash-Realtime e Qwen3.5-Omni-Realtime modelos.
Opções para pesquisa na web.
Temperatura de amostragem.
sessão.atualizada
Enviado após um sucesso session.update pedido. Em caso de erro, o servidor envia um error evento em vez disso.
{
"event_id": "event_X1HsXS4b4uptp6yo1LgKd",
"type": "session.updated",
"session": {
"id": "sess_Aih6vAcY5Ddt6jwFx1tCa",
"object": "realtime.session",
"model": "qwen3.8-omni-flash-realtime",
"modalities": [
"text",
"audio"
],
"instructions": "You are Xiao Yun, a personal assistant. Answer user questions accurately and in a friendly manner. Always respond with a helpful attitude.",
"voice": "Cherry",
"input_audio_format": "pcm",
"output_audio_format": "pcm",
"input_audio_transcription": {
"model": "qwen3-asr-flash-realtime"
},
"turn_detection": {
// The value can be server_vad or semantic_vad (supported by qwen3.8-omni-flash-realtime and qwen3.5-omni-realtime models).
"type": "server_vad",
"threshold": 0.1,
"prefix_padding_ms": 500,
"silence_duration_ms": 900,
"create_response": true,
"interrupt_response": true
},
"enable_search": true,
"search_options": {
"enable_source": true
},
"tools": [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Useful for querying the weather in a specific city.",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "The city name"}
},
"required": ["location"]
}
}
}
],
"temperature": 0.8,
"max_response_output_token": "inf",
"max_tokens": 16384,
"repetition_penalty": 1.05,
"presence_penalty": 0.0,
"top_k": 50,
"top_p": 1.0,
"seed": -1
}
}
Identificador exclusivo do evento.
Sempre session.updated.
Configuração da sessão.
Temperatura de amostragem.
Modalidades de saída.
Voz para saída de áudio.
Instruções do sistema para o modelo.
O formato do áudio de entrada do usuário. Atualmente só suporta `pcm`. O áudio de entrada deve ser um fluxo de áudio PCM com taxa de amostragem de 16 kHz.
O formato do áudio de saída do modelo. Atualmente só suporta `pcm`. O áudio de saída é um fluxo de áudio PCM com taxa de amostragem de 24 kHz.
Configuração de transcrição de fala.
Modelo de transcrição. Sempre `qwen3-asr-flash-realtime`. Este parâmetro não é configurável.
Configuração do VAD.
Tipo VAD. Os valores válidos são `server_vad` (padrão) ou `semantic_vad`. Consulte [Eventos do cliente](/api-reference/real-time-multimodal/client-events).
Limiar de detecção de VAD.
Duração do silêncio (ms) antes que a fala seja considerada encerrada.
O tempo limite de inatividade em milissegundos. Devolvido apenas em `server_vad` modo com `qwen3.5-omni-plus-realtime` ou `qwen3.5-omni-flash-realtime` modelos.
Se deve ativar a pesquisa na web. Apoiado por Qwen3.8-Omni-Flash-Realtime e Qwen3.5-Omni-Realtime modelos.
Opções de pesquisa na web.
Uma lista de definições de ferramentas. Ao configurar ferramentas, o modelo pode decidir se deseja chamar uma ferramenta com base na entrada do usuário.
Sempre `function`.
O nome da função da ferramenta personalizada, como `get_current_weather`.
Uma descrição da finalidade da função da ferramenta. O modelo usa isso para decidir se deve usar a ferramenta.
Uma descrição dos parâmetros de entrada da função da ferramenta.
Sempre `object`.
Descreve o nome, o tipo de dados e a descrição de cada parâmetro de entrada.
Especifica quais parâmetros de entrada são necessários.
Limiar de probabilidade de amostragem de núcleo.
Número de principais candidatos para amostragem.
Máximo de tokens na resposta.
Penalidade por sequências repetidas.
Penalidade por conteúdo repetido.
Semente para resultados reproduzíveis.
input_audio_buffer.speech_started
Enviado no modo VAD quando a fala começa no buffer de áudio.
Também pode ser acionado sempre que o áudio é adicionado ao buffer antes que a fala seja detectada.
{
"event_id": "event_Pvp8nEhsQuGCQbFJ9x58n",
"type": "input_audio_buffer.speech_started",
"audio_start_ms": 3647,
"item_id": "item_YbAiGvK2H7YaS34o4R6Ba"
}
Identificador exclusivo do evento.
Sempre input_audio_buffer.speech_started.
Milissegundos desde o início da entrada de áudio até a primeira fala detectada.
ID do item da mensagem do usuário, criado quando a fala é interrompida. Este item anexa a entrada do usuário ao histórico de conversação para inferência.
input_audio_buffer.speech_stopped
Enviado no modo VAD quando a fala termina no buffer de áudio. O servidor também envia conversation.item.created para criar o item de mensagem do usuário.
{
"event_id": "event_UhQiqNVRsgUiq4KUS5Xb5",
"type": "input_audio_buffer.speech_stopped",
"audio_end_ms": 4453,
"item_id": "item_YbAiGvK2H7YaS34o4R6Ba"
}
Identificador exclusivo do evento.
Sempre input_audio_buffer.speech_stopped.
Milissegundos desde o início da sessão até o final da fala.
ID do item da mensagem do usuário (será criado).
entrada_audio_buffer.comprometido
Enviado quando o buffer de áudio de entrada é confirmado.
-
No modo VAD, o buffer é confirmado automaticamente quando o usuário termina de falar.
-
No modo manual, enviado após o envio do cliente
input_audio_buffer.commit.
{
"event_id": "event_Iy6sUzL1nmdFgshFYxJEz",
"type": "input_audio_buffer.committed",
"item_id": "item_YbAiGvK2H7YaS34o4R6Ba"
}
Identificador exclusivo do evento.
Sempre input_audio_buffer.committed.
ID do item da mensagem do usuário (será criado).
entrada_audio_buffer.cleared
Enviado após o cliente enviar input_audio_buffer.clear.
{
"event_id": "event_RoUu4T8yExPMI37GKwaOC",
"type": "input_audio_buffer.cleared"
}
Identificador exclusivo do evento.
Sempre input_audio_buffer.cleared.
conversa.item.criado
Enviado quando um item de conversa é criado.
{
"event_id": "event_JEfkrr9gO3Ny7Xcv9bGVd",
"type": "conversation.item.created",
"item": {
"id": "item_YbAiGvK2H7YaS34o4R6Ba",
"object": "realtime.item",
"type": "message",
"status": "in_progress",
"role": "assistant",
"content": [
{
"type": "input_audio"
}
]
}
}
// Tool calling scenario
{
"event_id": "event_S1hkaIQgcuQD8OEdOpGHQ",
"type": "conversation.item.created",
"item": {
"id": "item_FEG9qJGNkPcdf4et3p7BV",
"object": "realtime.item",
"type": "function_call",
"status": "in_progress",
"call_id": "call_bc0a7fb7235840f69ecfe4",
"name": "get_current_weather",
"arguments": ""
}
}
Identificador exclusivo do evento.
Sempre conversation.item.created.
Item de conversa.
ID de item exclusivo.
Sempre `realtime.item`.
O tipo de item de conversa inclui `message` e `function_call`. Qwen3.8-Omni-Flash-Realtime também retorna `mcp_list_tools`, `mcp_call`e `mcp_approval_request`; veja [itens MCP](#mcp-items).
Estado do item.
Função da mensagem.
Conteúdo da mensagem. Retornou quando `type` é `message`.
Nome da função. Retornou quando `type` é `function_call`.
ID exclusivo da invocação da função. Retornou quando `type` é `function_call`.
Argumentos de chamada de função como uma string JSON. Retornou quando `type` é `function_call`.
conversa.item.input_audio_transcription.delta
Quando a transcrição de áudio de entrada está habilitada, esse evento é enviado frequentemente enquanto o usuário está falando. Ele fornece resultados de transcrição intermediários em tempo real. Concatenar text + stash para obter a visualização da frase mais completa a qualquer momento.
{
"event_id": "event_C7jzoeSFuiwOZS6tR14yx",
"type": "conversation.item.input_audio_transcription.delta",
"item_id": "item_ThVYhLHOdeXb4bBSvzSFF",
"content_index": 0,
"text": "",
"stash": "How is the weather today?",
"language": "en",
"emotion": "neutral",
"obfuscation": "ABEXGYmxdmc97u"
}
Identificador exclusivo do evento.
Sempre conversation.item.input_audio_transcription.delta.
O ID do item de conversa associado.
O índice da parte do conteúdo que contém o áudio.
O prefixo de texto confirmado. Esta parte da frase atual foi confirmada pelo modelo e não será alterada.
O sufixo do texto preliminar. Esta minuta temporária segue a parcela confirmada e poderá ser revisada pelo modelo.
O idioma detectado do áudio reconhecido.
A emoção detectada do áudio reconhecido. Valores válidos: neutral, happy, sad, angry, surprised, disgusted, fearful.
Exemplo: como os campos de texto e de esconderijo trabalham juntos.
Suponha que o usuário diga: “O tempo está bom hoje, ensolarado e quente”.
| Tempo | Discurso do usuário | texto | esconderijo | Exibir (texto + estoque) |
|---|---|---|---|---|
| T1 | "O tempo..." | "" |
"The weather" |
O clima |
| T2 | "...é legal..." | "" |
"The weather is nice" |
O tempo está bom |
| T3 | "...hoje," | "The weather" |
" is nice today," |
O tempo está bom hoje, |
| T4 | (breve pausa) | "The weather is nice today, " |
"" |
O tempo está bom hoje, |
| T5 | "ensolarado..." | "The weather is nice today, " |
"sunny" |
O tempo está bom hoje, ensolarado |
| T6 | "...e quente." | "The weather is nice today, " |
"sunny and warm." |
O tempo está bom hoje, ensolarado e quente. |
| T7 | (para) | - | - | Usar conversation.item.input_audio_transcription.completed como resultado final. |
conversa.item.input_audio_transcription.completed
Enviado após o áudio ser armazenado em buffer e transcrito. A transcrição usa um modelo separado (qwen3-asr-flash-realtime).
O texto transcrito pode diferir do texto processado por Qwen-Omni-Realtime. Trate-o como uma referência.
{
"event_id": "event_FrrZcxiDfTB9LD9p4pVng",
"type": "conversation.item.input_audio_transcription.completed",
"item_id": "item_YbAiGvK2H7YaS34o4R6Ba",
"content_index": 0,
"transcript": "Hello."
}
Identificador exclusivo do evento.
Sempre conversation.item.input_audio_transcription.completed.
ID do item da mensagem do usuário.
Fixado em 0.
Texto transcrito.
conversa.item.input_audio_transcription.failed
Enviado quando a transcrição de áudio de entrada falha (se habilitada). Separado do error evento.
{
"type": "conversation.item.input_audio_transcription.failed",
"item_id": "<item_id>",
"content_index": 0,
"error": {
"code": "<code>",
"message": "<message>",
"param": "<param>"
}
}
Identificador exclusivo do evento.
Sempre conversation.item.input_audio_transcription.failed.
ID do item da mensagem do usuário.
Fixado em 0.
Detalhes do erro.
Código de erro.
Mensagem de erro.
Parâmetro relacionado.
resposta.criada
Enviado quando o modelo começa a gerar uma resposta.
{
"event_id": "event_XuDavMzQN3KKepqGu3KRh",
"type": "response.created",
"response": {
"id": "resp_HaVOPdbmX6vifiV5pAfJY",
"object": "realtime.response",
"conversation_id": "conv_FjJaccpnvwHNo9cPVuzGc",
"status": "in_progress",
"modalities": [
"text",
"audio"
],
"voice": "Cherry",
"output_audio_format": "pcm",
"output": []
}
}
Identificador exclusivo do evento.
Sempre response.created.
Objeto de resposta.
ID de resposta exclusivo.
ID da sessão.
Sempre `realtime.response`.
Estado da resposta: `completed`, `failed`, `in_progress`, ou `incomplete`.
Modalidades de resposta.
Voz para saída de áudio.
Vazio para este evento.
resposta.concluído
Enviado após a conclusão da geração da resposta. O response O objeto contém todos os itens de saída, exceto dados de áudio brutos.
{
"event_id": "event_CSaxRRYLvbrfexDXAEuDG",
"type": "response.done",
"response": {
"id": "resp_HaVOPdbmX6vifiV5pAfJY",
"object": "realtime.response",
"conversation_id": "conv_FjJaccpnvwHNo9cPVuzGc",
"status": "completed",
"modalities": [
"text",
"audio"
],
"voice": "Cherry",
"output_audio_format": "pcm",
"output": [
{
"id": "item_Ls6MtCUWO7LM4E59QziNv",
"object": "realtime.item",
"type": "message",
"status": "completed",
"role": "assistant",
"content": [
{
"type": "audio",
"transcript": "Hello! How can I help you?"
}
]
}
],
"usage": {
"total_tokens": 377,
"input_tokens": 336,
"output_tokens": 41,
"input_tokens_details": {
"text_tokens": 228,
"audio_tokens": 108
},
"output_tokens_details": {
"text_tokens": 9,
"audio_tokens": 32
},
"plugins": {
"search": {
"count": 1,
"strategy": "agent"
}
}
}
}
}
// Tool calling scenario
{
"event_id": "event_T1EFAJp43X2DWtDRmxTtx",
"type": "response.done",
"response": {
"id": "resp_TucN5QgymL5MA8vkJvFlS",
"object": "realtime.response",
"conversation_id": "conv_SEDZESRlefT8WvLSmEn6E",
"status": "completed",
"modalities": ["text", "audio"],
"voice": "Ethan",
"output_audio_format": "pcm",
"output": [
{
"id": "item_FEG9qJGNkPcdf4et3p7BV",
"object": "realtime.item",
"type": "function_call",
"status": "completed",
"call_id": "call_bc0a7fb7235840f69ecfe4",
"name": "get_current_weather",
"arguments": " {\"location\": \"Hangzhou\"}"
}
],
"usage": {
"total_tokens": 567,
"input_tokens": 524,
"output_tokens": 43,
"input_tokens_details": {
"text_tokens": 487,
"audio_tokens": 37
},
"output_tokens_details": {
"text_tokens": 43
}
}
}
}
Identificador exclusivo do evento.
Sempre response.done.
Objeto de resposta.
ID de resposta exclusivo.
ID da sessão.
Sempre `realtime.response`.
Estado da resposta.
Modalidades de resposta.
Voz para saída de áudio.
Saída de resposta.
ID do item de saída.
Tipo de item de saída. Os valores incluem `message` e `function_call`. Qwen3.8-Omni-Flash-Realtime também suporta [`mcp_call`](#mcp-items).
Tipo de objeto de item de saída. Sempre `realtime.item`.
Status do item de saída.
Função do item de saída.
Conteúdo do item de saída. Devolvido somente quando `type` é `message`.
Tipo de conteúdo: `text` para texto simples, `audio` para saída de áudio.
Conteúdo de texto.
Transcrição do áudio.
Nome da função. Retornou quando `type` é `function_call`.
ID exclusivo da invocação da função. Retornou quando `type` é `function_call`.
Argumentos completos para a chamada de função como uma string JSON. Retornou quando `type` é `function_call`.
Uso de token para esta resposta.
Número total de tokens usados.
Número de tokens de entrada.
Número de tokens de saída.
Detalhamento do token de entrada, incluindo `text_tokens` e `audio_tokens`.
Detalhamento do token de saída, incluindo `text_tokens` e `audio_tokens`.
Métricas de uso do plug-in. Retornado quando pesquisa na web (`enable_search`) está habilitado.
Pesquise dados de medição.
Número de pesquisas.
Estratégia de pesquisa.
resposta.texto.delta
Enviado quando a modalidade de saída é somente texto e o modelo gera um bloco de texto.
{
"delta": "Hello",
"event_id": "event_TH49MauuPmRo1RGaMSlP7",
"type": "response.text.delta",
"response_id": "resp_PrRSvPVpnCExdUOGHHLuP",
"item_id": "item_L8IRm9kRXFpxoOjDqDC96",
"output_index": 0,
"content_index": 0
}
Identificador exclusivo do evento.
Sempre response.text.delta.
Pedaço de texto incremental.
ID de resposta.
ID do item da mensagem. Use isto para associar itens da mesma mensagem.
Índice de item de saída. Fixado em 0.
Índice da parte do conteúdo. Fixado em 0.
resposta.texto.done
Enviado quando a saída somente texto termina de ser gerada.
Também enviado quando a resposta é interrompida, incompleta ou cancelada.
{
"event_id": "event_B1lIeE2Nac33zn5V7h2mm",
"type": "response.text.done",
"response_id": "resp_B1lIdtjF4Noqpn5NOjznj",
"item_id": "item_B1lIdJsAJlJiFs8ztWpJt",
"output_index": 0,
"content_index": 0,
"text": "How can I assist you today?"
}
Identificador exclusivo do evento.
Sempre response.text.done.
ID de resposta.
ID do item da mensagem.
Índice de item de saída.
Índice da parte do conteúdo.
Saída de texto completa.
resposta.audio.delta
Enviado quando a modalidade de saída inclui áudio e o modelo gera um pedaço de áudio.
{
"event_id": "event_B1osWMZBtrEQbiIwW0qHQ",
"type": "response.audio.delta",
"response_id": "resp_P79OOMs8LnrXVpiIHUCKR",
"item_id": "item_OFaPGtzfWCPyGzxnuEX9i",
"output_index": 0,
"content_index": 0,
"delta": "{base64 audio}"
}
Identificador exclusivo do evento.
Sempre response.audio.delta.
ID de resposta.
ID do item da mensagem.
Índice de item de saída.
Índice da parte do conteúdo.
Pedaço de áudio codificado em Base64.
resposta.audio.done
Enviado quando a saída de áudio termina de ser gerada.
Também enviado quando a resposta é interrompida, incompleta ou cancelada.
{
"event_id": "event_Le1TDl7VfyHQxl47DtGxI",
"type": "response.audio.done",
"response_id": "resp_HaVOPdbmX6vifiV5pAfJY",
"item_id": "item_Ls6MtCUWO7LM4E59QziNv",
"output_index": 0,
"content_index": 0
}
Identificador exclusivo do evento.
Sempre response.audio.done.
ID de resposta.
ID do item da mensagem.
Índice de item de saída.
Índice da parte do conteúdo.
resposta.audio_transcript.delta
Enviado quando a modalidade de saída inclui áudio e o modelo gera um pedaço de transcrição.
{
"event_id": "event_BksW7fOwnyavZdDxIzZYM",
"type": "response.audio_transcript.delta",
"response_id": "resp_HaVOPdbmX6vifiV5pAfJY",
"item_id": "item_Ls6MtCUWO7LM4E59QziNv",
"output_index": 0,
"content_index": 0,
"delta": "Is there anything"
}
Identificador exclusivo do evento.
Sempre response.audio_transcript.delta.
ID de resposta.
ID do item da mensagem.
Índice de item de saída.
Índice da parte do conteúdo.
Texto de transcrição incremental.
resposta.audio_transcript.done
Enviado quando a transcrição do áudio termina de ser gerada.
{
"event_id": "event_X49tL2WerT4WjxcmH16lS",
"type": "response.audio_transcript.done",
"response_id": "resp_HaVOPdbmX6vifiV5pAfJY",
"item_id": "item_Ls6MtCUWO7LM4E59QziNv",
"output_index": 0,
"content_index": 0,
"transcript": "Hello! Is there anything I can help you with?"
}
Identificador exclusivo do evento.
Sempre response.audio_transcript.done.
ID de resposta.
ID do item da mensagem.
Índice de item de saída.
Índice da parte do conteúdo.
Transcrição completa.
resposta.function_call_arguments.delta
Quando o modelo gera a sequência de argumentos para uma chamada de função em streaming, o servidor envia esse evento para cada novo segmento. Concatene o delta campos em ordem. O conteúdo completo é fornecido na próxima response.function_call_arguments.done evento.
{
"event_id": "event_SlKoJyEbPEqLq14DSM1u5",
"type": "response.function_call_arguments.delta",
"response_id": "resp_JnTOsWXlFhKcFohZbtfz6",
"item_id": "item_Rhcms7CauTNsQprV5S4Hr",
"output_index": 0,
"call_id": "call_2be200f4cafe419b9530dd",
"delta": " {\"location\": \"Beijing\"}"
}
Identificador exclusivo do evento.
Sempre response.function_call_arguments.delta.
ID de resposta.
ID do item da mensagem.
Índice de item de saída.
ID exclusivo para esta invocação de função. Consistente com o done evento no mesmo turno.
Novo segmento da sequência de argumentos. Concatene segmentos em ordem.
resposta.function_call_arguments.done
Indica que os argumentos da chamada de função foram totalmente gerados. O arguments campo contém a string completa do argumento. Após receber este evento, analise os argumentos e chame a função da ferramenta local. Utilize o completo arguments deste evento, não o concatenado delta resultado.
{
"event_id": "event_X6suLyuL5agdH7r6koesM",
"type": "response.function_call_arguments.done",
"response_id": "resp_JnTOsWXlFhKcFohZbtfz6",
"item_id": "item_Rhcms7CauTNsQprV5S4Hr",
"output_index": 0,
"name": "get_current_weather",
"call_id": "call_2be200f4cafe419b9530dd",
"arguments": " {\"location\": \"Beijing\"}"
}
Identificador exclusivo do evento.
Sempre response.function_call_arguments.done.
ID de resposta.
ID do item da mensagem.
Índice de item de saída.
ID exclusivo para esta invocação de função.
Nome da função que foi chamada.
Argumentos completos para a invocação da função, normalmente uma string JSON.
resposta.output_item.added
Enviado quando um novo item é criado durante a geração de resposta. O tipo de item pode ser message ou function_call; Qwen3.8-Omni-Flash-Realtime também suporta mcp_call.
{
"event_id": "event_DsCO341DEVtiATtCB6BUY",
"type": "response.output_item.added",
"response_id": "resp_HaVOPdbmX6vifiV5pAfJY",
"output_index": 0,
"item": {
"id": "item_Ls6MtCUWO7LM4E59QziNv",
"object": "realtime.item",
"type": "message",
"status": "in_progress",
"role": "assistant",
"content": []
}
}
// Tool calling scenario
{
"event_id": "event_HXmKt5pGoiRtXx7Hq7zpN",
"type": "response.output_item.added",
"response_id": "resp_TucN5QgymL5MA8vkJvFlS",
"output_index": 0,
"item": {
"id": "item_FEG9qJGNkPcdf4et3p7BV",
"object": "realtime.item",
"type": "function_call",
"status": "in_progress",
"call_id": "call_bc0a7fb7235840f69ecfe4",
"name": "get_current_weather",
"arguments": ""
}
}
Identificador exclusivo do evento.
Sempre response.output_item.added.
ID de resposta.
Índice de item de saída.
Item de saída.
ID exclusivo do item de saída.
Sempre `realtime.item`.
Tipo de item de saída. Os valores incluem `message` e `function_call`. Qwen3.8-Omni-Flash-Realtime também suporta [`mcp_call`](#mcp-items).
Status do item de saída.
Função do remetente.
Conteúdo da mensagem. Retornou quando `type` é `message`.
Nome da função. Retornou quando `type` é `function_call`.
ID exclusivo da invocação da função. Retornou quando `type` é `function_call`.
Argumentos de chamada de função como uma string JSON. Retornou quando `type` é `function_call`. Inicialmente uma string vazia em um `added` evento.
resposta.output_item.done
Enviado quando um item de saída é concluído.
{
"event_id": "event_MEu5nlLw1LsOguHiehIP8",
"type": "response.output_item.done",
"response_id": "resp_HaVOPdbmX6vifiV5pAfJY",
"output_index": 0,
"item": {
"id": "item_Ls6MtCUWO7LM4E59QziNv",
"object": "realtime.item",
"type": "message",
"status": "completed",
"role": "assistant",
"content": [
{
"type": "audio",
"text": "Hello! How can I help you?"
}
]
}
}
// Tool calling scenario
{
"event_id": "event_FHspdfAnCyjuME3mmAwSY",
"type": "response.output_item.done",
"response_id": "resp_TucN5QgymL5MA8vkJvFlS",
"output_index": 0,
"item": {
"id": "item_FEG9qJGNkPcdf4et3p7BV",
"object": "realtime.item",
"type": "function_call",
"status": "completed",
"call_id": "call_bc0a7fb7235840f69ecfe4",
"name": "get_current_weather",
"arguments": " {\"location\": \"Hangzhou\"}"
}
}
Identificador exclusivo do evento.
Sempre response.output_item.done.
ID de resposta.
Índice de item de saída.
Item de saída.
ID exclusivo do item de saída.
Sempre `realtime.item`.
Tipo de item de saída. Os valores incluem `message` e `function_call`. Qwen3.8-Omni-Flash-Realtime também suporta [`mcp_call`](#mcp-items).
Status do item de saída.
Função do remetente.
Conteúdo da mensagem. Retornou quando `type` é `message`.
Nome da função. Retornou quando `type` é `function_call`.
ID exclusivo da invocação da função. Retornou quando `type` é `function_call`.
Argumentos completos para a chamada de função como uma string JSON. Retornou quando `type` é `function_call`.
resposta.content_part.added
Enviado quando uma nova parte de conteúdo é incluída em uma mensagem do assistente durante a geração de resposta.
{
"event_id": "event_AVBOmrgY3C8bjlRajfSUT",
"type": "response.content_part.added",
"response_id": "resp_HaVOPdbmX6vifiV5pAfJY",
"item_id": "item_Ls6MtCUWO7LM4E59QziNv",
"output_index": 0,
"content_index": 0,
"part": {
"type": "audio",
"text": ""
}
}
Identificador exclusivo do evento.
Sempre response.content_part.added.
ID de resposta.
ID do item da mensagem.
Índice de item de saída. Fixado em 0.
Índice da parte do conteúdo. Fixado em 0.
Parte de conteúdo.
Tipo de conteúdo.
Conteúdo de texto.
resposta.content_part.done
Enviado quando uma parte do conteúdo de uma mensagem do assistente termina o streaming.
{
"event_id": "event_Il8HD19v58Qr5IBkw7LtN",
"type": "response.content_part.done",
"response_id": "resp_HaVOPdbmX6vifiV5pAfJY",
"item_id": "item_Ls6MtCUWO7LM4E59QziNv",
"output_index": 0,
"content_index": 0,
"part": {
"type": "audio",
"text": "Hello! Is there anything I can help you with?"
}
}
Identificador exclusivo do evento.
Sempre response.content_part.done.
ID de resposta.
ID do item da mensagem.
Índice de item de saída. Fixado em 0.
Índice da parte do conteúdo. Fixado em 0.
Parte de conteúdo.
Tipo de conteúdo.
Conteúdo de texto.
eventos MCP
Esta seção descreve eventos e campos WebSocket para qwen3.8-omni-flash-realtime. Outros eventos e campos base usam o protocolo comum documentado acima. Os campos obrigatórios são obrigatórios quando o objeto que os contém está presente. IDs são strings opacas; não confie em seus comprimentos, prefixos ou regras de geração. arguments e output são strings cujo conteúdo requer análise JSON. Conexões, descobertas e chamadas MCP estão sujeitas a cotas e tempos limite de serviço.
mcp_list_tools.*
| Tipo de evento | Quando emitido |
|---|---|
mcp_list_tools.in_progress |
A descoberta de ferramenta é iniciada para um servidor MCP. |
mcp_list_tools.completed |
A descoberta é bem-sucedida e allowed_tools a filtragem é concluída. |
mcp_list_tools.failed |
A descoberta falha, atinge o tempo limite ou excede os limites de serviço. |
Todos os três exigem campos de string event_id (ID de evento exclusivo), type (tipo de evento acima) e item_id (associado mcp_list_tools artigo). in_progress pode chegar antes session.updated. Para completed e failed, conversation.item.created contendo a lista de ferramentas final ou o erro chega primeiro, seguido pelo evento de status com o mesmo item_id.
{
"event_id": "opaque_event_id",
"type": "mcp_list_tools.completed",
"item_id": "opaque_item_id"
}
resposta.mcp_call_arguments.delta
| Campo | Tipo | Obrigatório | Significado |
|---|---|---|---|
event_id |
corda | Sim | ID de evento exclusivo. |
type |
corda | Sim | response.mcp_call_arguments.delta |
response_id |
corda | Sim | ID de resposta dos pais. |
item_id |
corda | Sim | Atual mcp_call ID do item. |
output_index |
inteiro | Sim | Índice baseado em zero na matriz de saída de resposta pai. |
delta |
corda | Sim | Fragmento incremental de string JSON; concatenar na ordem do evento. |
obfuscation |
corda | Não | String de ofuscação opcional; ignore ao montar e analisar argumentos. |
{
"event_id": "opaque_event_id",
"type": "response.mcp_call_arguments.delta",
"response_id": "opaque_response_id",
"item_id": "opaque_item_id",
"output_index": 0,
"delta": "{\"city\":\"杭",
"obfuscation": "opaque-value"
}
resposta.mcp_call_arguments.done
Requer event_id, type, response_ide item_id (cordas), output_index (número inteiro, mesmo significado acima), e arguments (corda). type é response.mcp_call_arguments.done. arguments contém os argumentos completos codificados em JSON e é oficial.
{
"event_id": "opaque_event_id",
"type": "response.mcp_call_arguments.done",
"response_id": "opaque_response_id",
"item_id": "opaque_item_id",
"output_index": 0,
"arguments": "{\"city\":\"杭州\"}"
}
resposta.mcp_call.*
| Tipo de evento | Quando emitido |
|---|---|
response.mcp_call.in_progress |
Os argumentos estão completos e a aprovação foi concedida ou é desnecessária; a chamada MCP é iniciada. |
response.mcp_call.completed |
A chamada MCP foi bem-sucedida. |
response.mcp_call.failed |
Erro comercial de conexão, protocolo ou ferramenta; rejeição de aprovação ou tempo limite; tempo limite da chamada; ou cancelamento. |
Todos os três exigem event_id, typee item_id (cordas) e output_index (inteiro). item_id identifica o atual mcp_call; output_index é o seu índice na matriz de saída Response pai.
{
"event_id": "opaque_event_id",
"type": "response.mcp_call.in_progress",
"item_id": "opaque_item_id",
"output_index": 0
}
Itens de conversa do MCP
Esses objetos são tipos de item campo em eventos, aplicável a Qwen3.8-Omni-Flash-Realtime.
item mcp_list_tools
Retornado como conversation.item.created.item.
| Campo | Tipo | Obrigatório | Significado |
|---|---|---|---|
item.id |
corda | Sim | ID exclusivo do item da lista de ferramentas, evento de descoberta correspondente item_id. |
item.type |
corda | Sim | mcp_list_tools |
item.server_label |
corda | Sim | Rótulo do servidor MCP configurado. |
item.tools |
matriz de objetos | Sim | Definições de ferramentas validadas e filtradas; vazio em caso de falha. |
item.error |
objeto | Não | Erro de descoberta; veja o erro MCP abaixo. |
Cada ferramenta requer name (string, nome original da ferramenta MCP, 1-64 letras/dígitos/sublinhados/pontos/hífens) e input_schema (objeto, mapeado do MCP inputSchema, com raiz type="object"). Os campos opcionais são description (string do servidor) e annotations (objeto, MCP ToolAnnotations).
Campos do esquema JSON padrão, incluindo properties, required, additionalProperties, $defs, oneOf, anyOfe allOf são preservados e encaminhados. O serviço não executa validação semântica completa do esquema JSON; o servidor MCP valida os argumentos reais.
{
"event_id": "opaque_event_id",
"type": "conversation.item.created",
"item": {
"id": "opaque_item_id",
"type": "mcp_list_tools",
"server_label": "amap",
"tools": [
{
"name": "maps_weather",
"description": "查询天气",
"input_schema": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名"
}
},
"required": ["city"]
}
}
]
}
}
Item mcp_call inicial
Quando o modelo seleciona uma ferramenta MCP, este item aparece em response.output_item.added.item e também pode aparecer em conversation.item.created.item. Todos os campos abaixo são strings obrigatórias.
| Campo | Significado |
|---|---|
item.id |
ID exclusivo do item de chamada. |
item.object |
realtime.item |
item.type |
mcp_call |
item.status |
Inicialmente in_progress. |
item.call_id |
ID exclusivo de chamada de ferramenta. |
item.server_label |
Servidor realmente usado para esta chamada. |
item.name |
Nome original da ferramenta. |
item.arguments |
Geralmente vazio inicialmente; usar arguments.done e o item final para argumentos completos. |
{
"event_id": "opaque_event_id",
"type": "response.output_item.added",
"response_id": "opaque_response_id",
"output_index": 0,
"item": {
"id": "opaque_item_id",
"object": "realtime.item",
"type": "mcp_call",
"status": "in_progress",
"call_id": "opaque_call_id",
"server_label": "amap",
"name": "maps_weather",
"arguments": ""
}
}
mcp_approval_item de solicitação
Devolvido em conversation.item.created. O evento requer campos de string event_id, type (conversation.item.created), response_id (Resposta dos pais), item_id (ID de aprovação, igual a item.id) e previous_item_id (o mcp_call item que está sendo revisado), mais o item objeto.
Todos os campos de item são strings obrigatórias: id (copiar inalterado na resposta de aprovação approval_request_id), type (mcp_approval_request), server_label, name, arguments (argumentos completos codificados em JSON) e call_id (ID de chamada de ferramenta).
{
"event_id": "opaque_event_id",
"type": "conversation.item.created",
"response_id": "opaque_response_id",
"item_id": "opaque_approval_id",
"previous_item_id": "opaque_item_id",
"item": {
"id": "opaque_approval_id",
"type": "mcp_approval_request",
"server_label": "amap",
"name": "maps_weather",
"arguments": "{\"city\":\"杭州\"}",
"call_id": "opaque_call_id"
}
}
Item final mcp_call
Depois que uma chamada atinge um estado terminal, o item aparece em response.output_item.done.item e no pai final response.done.response.output instantâneo.
| Campo | Tipo | Obrigatório | Significado |
|---|---|---|---|
item.id |
corda | Sim | ID exclusivo do item de chamada. |
item.type |
corda | Sim | mcp_call |
item.status |
corda | Sim | completed ou failed. |
item.call_id |
corda | Sim | ID de chamada de ferramenta. |
item.server_label |
corda | Sim | Servidor realmente usado. |
item.name |
corda | Sim | Nome original da ferramenta. |
item.arguments |
corda | Sim | Argumentos completos codificados em JSON. |
item.output |
corda | Não | MCP serializado tools/call.result objeto; também pode aparecer em algumas falhas. |
item.error |
objeto | Não | Erro de chamada; Veja abaixo. |
Chamada bem-sucedida:
{
"event_id": "opaque_event_id",
"type": "response.output_item.done",
"response_id": "opaque_response_id",
"output_index": 0,
"item": {
"id": "opaque_item_id",
"type": "mcp_call",
"status": "completed",
"call_id": "opaque_call_id",
"server_label": "amap",
"name": "maps_weather",
"arguments": "{\"city\":\"杭州\"}",
"output": "{\"content\":[{\"type\":\"text\",\"text\":\"...\"}],\"isError\":false}"
}
}
Chamada falhada:
{
"event_id": "opaque_event_id",
"type": "response.output_item.done",
"response_id": "opaque_response_id",
"output_index": 0,
"item": {
"id": "opaque_item_id",
"type": "mcp_call",
"status": "failed",
"call_id": "opaque_call_id",
"server_label": "amap",
"name": "maps_weather",
"arguments": "{\"city\":\"杭州\"}",
"error": {
"type": "tool_execution_error",
"message": "MCP tool call failed (call_timeout)."
}
}
}
Erro MCP
O objeto de erro requer campos de string type (fixado em tool_execution_error) e message (uma descrição de erro segura para o cliente que exclui corpos de resposta upstream confidenciais). Se o servidor MCP retornar isError=true, a chamada final tem status="failed" e pode incluir tanto o original output e uma estrutura error.
Veja Qwen-Omni-Realtime.