Qwen-Audio-3.0-Realtime conversa por voz em tempo real iOS SDK
Use o SDK do iOS para Qwen-Audio-3.0-Realtime para construir conversas de voz em tempo real com entrada de áudio e saída de áudio ou texto.
Guia do usuário: Para apresentações de modelos e conselhos de seleção, consulte Conversa por voz em tempo real.
Início rápido
-
Obtenha uma chave de API: Obtenha e configure uma chave API.
-
Baixe o SDK e execute o código de exemplo:
- Baixe o pacote SDK mais recente.
- Extraia o pacote ZIP e adicione
nuisdk.xcframeworkao seu projeto. - Em Fases de construção > Vincular binário a bibliotecas, adicione
nuisdk.xcframework. - Em Geral > Frameworks, bibliotecas e conteúdo incorporado, definir
nuisdk.xcframeworkpara Incorporar e assinar. - Abra o projeto no Xcode. O código de exemplo está em
DashQwenAudioChatViewController.m. Substitua a chave API para testar o recurso.
Procedimento de chamada
- Inicialize o SDK.
- Defina parâmetros para seu caso de uso. Use o
parametersargumento de nui_initialize para definir os parâmetros de conexão e controle e use nui_set_params para definir os parâmetros de conversação por voz. - Chame nui_dialog_start para iniciar a conversa.
- Em onNuiAudioStateChanged, inicie o dispositivo de gravação com base no estado do áudio.
- Forneça continuamente dados de gravação em onNuiNeedAudioData ou ligue para nui_update_audio_data para enviar ativamente dados de gravação.
- Receba continuamente o áudio retornado pelo modelo em onNuiAssistEventCallback.
- Ouça eventos e obtenha informações sobre eventos em onNuiEventCallback.
- Ligue para nui_dialog_cancel para interromper a conversa e ouvir
EVENT_TRANSCRIBER_COMPLETEpara confirmar que terminou. - Quando o recurso de conversa não for mais necessário, ligue para nui_release para liberar os recursos do SDK.
Parâmetros de solicitação
Parâmetros de conexão e controle
Passe uma string JSON no parameters argumento de nui_initialize.
Exemplo: A sequência JSON a seguir não lista todos os parâmetros. Adicione parâmetros conforme necessário para seu caso de uso.
{
"url": "wss://maas.qwencloudapi.com/api-ws/v1/realtime?model=<model_name>",
"apikey": "st-****",
"device_id": "my_device_id",
"service_mode": "1"
}
Parâmetros
<table> <colgroup> <col style={{ width: "20%" }} />
<col style={{ width: "20%" }} />
<col style={{ width: "20%" }} />
<col style={{ width: "40%" }} />
</colgroup>
<thead> <tr> <th> Parâmetro </th>
<th>
**Tipo**
</th>
<th>
**Obrigatório**
</th>
<th>
**Descrição**
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
url
</td>
<td>
`String`
</td>
<td>
Sim
</td>
<td>
Ponto final do serviço: `wss://maas.qwencloudapi.com/api-ws/v1/realtime?model=<model_name>`.
</td>
</tr>
<tr>
<td>
`apikey`
</td>
<td>
`String`
</td>
<td>
Sim
</td>
<td>
Chave de API.
</td>
</tr>
<tr>
<td>
`service_mode`
</td>
<td>
`String`
</td>
<td>
Sim
</td>
<td>
Modo de tempo de execução. Defina este parâmetro como `"1"` para conversação por voz em tempo real.
</td>
</tr>
<tr>
<td>
`device_id`
</td>
<td>
`String`
</td>
<td>
Sim
</td>
<td>
Uma string exclusiva que identifica o usuário final. Você pode usar um ID de usuário no aplicativo ou um identificador de dispositivo gerado pelo cliente. Esse ID é usado principalmente para rastreamento de log e solução de problemas.
</td>
</tr>
<tr>
<td>
`audio_update_manually`
</td>
<td>
`String`
</td>
<td>
Não
</td>
<td>
Se deve enviar ativamente dados de áudio. Padrão: `"false"`. Se definido para `"true"` e o SDK oferece suporte a recursos de áudio no dispositivo, como AEC e VAD, esses recursos são habilitados por padrão.
</td>
</tr>
<tr>
<td>
`workspace`
</td>
<td>
`String`
</td>
<td>
Não
</td>
<td>
O caminho de armazenamento para arquivos de recursos no dispositivo. Este parâmetro é necessário quando `audio_update_manually` é `"true"` e um recurso de áudio no dispositivo, como AEC ou VAD, está ativado.
</td>
</tr>
<tr>
<td>
`debug_path`
</td>
<td>
`String`
</td>
<td>
Não
</td>
<td>
O caminho de armazenamento do arquivo de log. Este parâmetro entra em vigor somente quando `save_log` é `true` em `nui_initialize`. Neste caso, o caminho é obrigatório. O SDK retém no máximo dois arquivos de log localmente.
</td>
</tr>
<tr>
<td>
`save_wav`
</td>
<td>
`String`
</td>
<td>
Não
</td>
<td>
Se deseja salvar o áudio de depuração em `debug_path`. Padrão: `"false"`. Os valores válidos são `"true"` e `"false"`. Este parâmetro entra em vigor somente quando `save_log` é `true`e `debug_path` também deve ser definido.
</td>
</tr>
<tr>
<td>
`max_log_file_size`
</td>
<td>
`int`
</td>
<td>
Não
</td>
<td>
O tamanho máximo do arquivo de log em bytes. Este parâmetro entra em vigor somente quando `save_log` é `true`. Padrão: `104857600` (100 × 1024 × 1024 bytes ou 100 MiB).
</td>
</tr>
<tr>
<td>
`log_track_level`
</td>
<td>
`int`
</td>
<td>
Não
</td>
<td>
O nível de filtro para logs enviados por meio `onNuiLogTrackCallback`. Padrão: `2`. Valores válidos: `0` (VERBOSO), `1` (DEBUGAR), `2` (INFORMAÇÕES), `3` (AVISO), `4` (ERRO) e `5` (NENHUMA). Um log é retornado somente quando seu nível é maior ou igual a ambos `log_track_level` e o `level` passou para `nui_initialize`. Por exemplo, se `log_track_level` é `2` (INFORMAÇÕES) e `level` é `3` (WARNING), apenas WARNING e logs de nível superior (valores maiores ou iguais a `3`) são retornados.
</td>
</tr>
</tbody> </table>
Parâmetros de conversação por voz
Passe uma string JSON no params argumento de nui_set_params.
Exemplo: A sequência JSON a seguir não lista todos os parâmetros. Adicione parâmetros conforme necessário para seu caso de uso.
{
"service_type": 4,
"nls_config": {
"model": "qwen-audio-3.1-realtime-plus",
"sr_format": "pcm"
}
}
Parâmetros
<table style={{ display: "table", tableLayout: "fixed", width: "100%", overflowWrap: "anywhere" }}> <colgroup> <col style={{ width: "20%" }} />
<col style={{ width: "20%" }} />
<col style={{ width: "20%" }} />
<col style={{ width: "40%" }} />
</colgroup>
<thead> <tr> <th style={{ verticalAlign: "top" }}> Parâmetro de nível superior </th>
<th style={{ verticalAlign: "top" }}>
**Tipo**
</th>
<th style={{ verticalAlign: "top" }}>
**Obrigatório**
</th>
<th style={{ verticalAlign: "top" }}>
**Descrição**
</th>
</tr>
</thead>
<tbody>
<tr>
<td style={{ verticalAlign: "top" }}>
service_type
</td>
<td style={{ verticalAlign: "top" }}>
`int`
</td>
<td style={{ verticalAlign: "top" }}>
Sim
</td>
<td style={{ verticalAlign: "top" }}>
Tipo de serviço de voz. Defina este parâmetro como `4` para conversação por voz em tempo real.
</td>
</tr>
<tr>
<td style={{ verticalAlign: "top" }}>
`nls_config`
</td>
<td style={{ verticalAlign: "top" }}>
`object`
</td>
<td style={{ verticalAlign: "top" }}>
Sim
</td>
<td style={{ verticalAlign: "top" }}>
Configuração central de conversação por voz, incluindo seleção de modelo e comportamento de conversação.
</td>
</tr>
<tr>
<td style={{ verticalAlign: "top" }}>
`nls_config.model`
</td>
<td style={{ verticalAlign: "top" }}>
`string`
</td>
<td style={{ verticalAlign: "top" }}>
Sim
</td>
<td style={{ verticalAlign: "top" }}>
Nome do modelo. Suporta o `qwen-audio-3.1-realtime-plus`, `qwen-audio-3.0-realtime-plus`e `qwen-audio-3.0-realtime-flash` série de modelos.
</td>
</tr>
<tr>
<td style={{ verticalAlign: "top" }}>
`nls_config.sr_format`
</td>
<td style={{ verticalAlign: "top" }}>
`string`
</td>
<td style={{ verticalAlign: "top" }}>
Sim
</td>
<td style={{ verticalAlign: "top" }}>
Formato de áudio de entrada. Somente `pcm` é suportado. O formato padrão é PCM mono de 16 kHz, 16 bits.
</td>
</tr>
<tr>
<td style={{ verticalAlign: "top" }}>
`nls_config.modalities`
</td>
<td style={{ verticalAlign: "top" }}>
`string`
</td>
<td style={{ verticalAlign: "top" }}>
Não
</td>
<td style={{ verticalAlign: "top" }}>
Uma string contendo uma matriz de modalidades de saída. Valores válidos:<ul><li><code>\["texto"]</code>: retorna apenas texto.</li><li><code>\["áudio", "texto"]</code> (padrão): retorna áudio e texto.</li></ul>
</td>
</tr>
<tr>
<td style={{ verticalAlign: "top" }}>
`nls_config.voice`
</td>
<td style={{ verticalAlign: "top" }}>
`string`
</td>
<td style={{ verticalAlign: "top" }}>
Não
</td>
<td style={{ verticalAlign: "top" }}>
Voz TTS. O padrão é `longanqian_v3.1` para 3.1 Plus e `longanqian` para 3.0 Plus/Flash. Este parâmetro pode ser definido apenas no primeiro `session.update`; valores posteriores são ignorados. Vozes do sistema: `longanqian`, `longanlingxin`, `longanlingxi`, `longanxiaoxin`e `longanlufeng`. Você também pode especificar um clone `voice_id` criado por meio da API de clonagem de voz. Consulte [Configuração de voz](/developer-guides/speech/qwen-audio-realtime#voice-configuration).
3.1 Plus também suporta `longanqian_v3.1`, `longanhuan_v3.1`, `longanlingxin_v3.1`, `longanfengyue_v3.1`, `xunanchuan_v3.1`, `beth_v3.1`, `betty_v3.1`, `cally_v3.1`.
</td>
</tr>
<tr>
<td style={{ verticalAlign: "top" }}>
`nls_config.enable_speech_emotion`
</td>
<td style={{ verticalAlign: "top" }}>
`BOOL`
</td>
<td style={{ verticalAlign: "top" }}>
Não
</td>
<td style={{ verticalAlign: "top" }}>
Seja para permitir uma expressão emocional aprimorada. Quando ativada, a voz de resposta apresenta variação emocional mais perceptível. Padrão: `YES`. Valores válidos: `YES` e `NO`.
</td>
</tr>
<tr>
<td style={{ verticalAlign: "top" }}>
`nls_config.instructions`
</td>
<td style={{ verticalAlign: "top" }}>
`string`
</td>
<td style={{ verticalAlign: "top" }}>
Não
</td>
<td style={{ verticalAlign: "top" }}>
Instruções do sistema que definem a função do modelo, o estilo de resposta e as preferências comportamentais para toda a sessão.
</td>
</tr>
<tr>
<td style={{ verticalAlign: "top" }}>
`nls_config.max_history_turns`
</td>
<td style={{ verticalAlign: "top" }}>
`int`
</td>
<td style={{ verticalAlign: "top" }}>
Não
</td>
<td style={{ verticalAlign: "top" }}>
Número máximo de turnos históricos de perguntas e respostas permitidos em uma solicitação. Valores válidos: 1 a 50. Padrão: `20`.
</td>
</tr>
<tr>
<td style={{ verticalAlign: "top" }}>
`nls_config.tools`
</td>
<td style={{ verticalAlign: "top" }}>
`string`
</td>
<td style={{ verticalAlign: "top" }}>
Não
</td>
<td style={{ verticalAlign: "top" }}>
Uma string contendo uma matriz de definições de ferramentas de chamada de função. Depois de configurar esse parâmetro, o modelo decide se chamará uma ferramenta com base na entrada do usuário. Cada definição usa `type` (necessário e fixado para `function`) e um `function` objeto contendo `name` (obrigatório), `description` (opcional) e `parameters` (opcional). Se uma função não tiver argumentos, omita `parameters`.
Exemplo:
```json
[
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Queries weather information for a specified city.",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City"
}
},
"required": [
"city"
]
}
}
}
]
```
</td>
</tr>
<tr>
<td style={{ verticalAlign: "top" }}>
`nls_config.turn_detection`
</td>
<td style={{ verticalAlign: "top" }}>
`string`
</td>
<td style={{ verticalAlign: "top" }}>
Não
</td>
<td style={{ verticalAlign: "top" }}>
Uma string contendo um objeto JSON para detecção de curva. Se omitido, a sessão usa o modo push-to-talk, no qual o áudio é confirmado e a inferência é acionada manualmente. Se definido, o modo de conversação duplex será ativado.
</td>
</tr>
<tr>
<td style={{ verticalAlign: "top" }}>
`nls_config.turn_detection.type`
</td>
<td style={{ verticalAlign: "top" }}>
`string`
</td>
<td style={{ verticalAlign: "top" }}>
Não
</td>
<td style={{ verticalAlign: "top" }}>
Tipo VAD. `server_vad` (padrão) detecta limites de fala de recursos acústicos e aciona automaticamente a inferência. `smart_turn` combina sinais acústicos e semânticos; sons sem conteúdo semântico, como sons de preenchimento, não iniciam uma curva nem interrompem a reprodução do modelo.
</td>
</tr>
<tr>
<td style={{ verticalAlign: "top" }}>
`nls_config.turn_detection.threshold`
</td>
<td style={{ verticalAlign: "top" }}>
`float`
</td>
<td style={{ verticalAlign: "top" }}>
Não
</td>
<td style={{ verticalAlign: "top" }}>
Sensibilidade do DAV. Este parâmetro se aplica apenas a `server_vad` e não tem efeito `smart_turn`. Valores mais baixos tornam o VAD mais sensível a sons baixos e ruídos de fundo; valores mais altos requerem uma fala mais clara e mais alta. Intervalo válido: `[-1.0, 1.0]`. Padrão: `0.5`.
</td>
</tr>
<tr>
<td style={{ verticalAlign: "top" }}>
`nls_config.turn_detection.silence_duration_ms`
</td>
<td style={{ verticalAlign: "top" }}>
`int`
</td>
<td style={{ verticalAlign: "top" }}>
Não
</td>
<td style={{ verticalAlign: "top" }}>
Duração mínima do silêncio após a fala, em milissegundos, antes que a resposta do modelo seja acionada. Este parâmetro se aplica apenas a `server_vad` e não tem efeito `smart_turn`. Valores mais baixos reduzem a latência, mas podem ser acionados em breves pausas. Intervalo válido: `[200, 6000]`. Padrão: `800`. Recomendado para conversa: `400` para `800`.
</td>
</tr>
<tr>
<td style={{ verticalAlign: "top" }}>
`nls_config.turn_detection.voiceprint_audio_urls`
</td>
<td style={{ verticalAlign: "top" }}>
`string`
</td>
<td style={{ verticalAlign: "top" }}>
Não
</td>
<td style={{ verticalAlign: "top" }}>
Uma string contendo uma matriz de URLs de áudio pré-gravados publicamente acessíveis para o locutor alvo. Este parâmetro se aplica apenas a `smart_turn`. Em conversas duplex, ajuda o modelo a focar no alto-falante alvo e ignorar outros alto-falantes e ruídos de fundo. Até cinco URLs são suportados. O áudio deve ser PCM ou WAV de 16 kHz.
</td>
</tr>
</tbody> </table>
Principais APIs
NeoNui
nui_initialize
Inicializa a instância do SDK de conversação por voz. O SDK é um singleton. Não inicialize-o novamente antes de chamar nui_release.
Assinatura do método
-(NuiResultCode) nui_initialize:(const char *)parameters
logLevel:(NuiSdkLogLevel)level
saveLog:(BOOL)save_log;
Descrições dos parâmetros
<table><colgroup><col style={{ width: "20%" }} /><col style={{ width: "20%" }} /><col style={{ width: "60%" }} /></colgroup><thead><tr><th> Parâmetro </th><th> Tipo </th><th> Descrição </th></tr></thead><tbody><tr><td> <code>parâmetros</code> </td><td> <code>caractere*</code> </td><td> Uma string JSON que contém parâmetros de autenticação, conexão e depuração. Veja <a href="#connection-and-control-parameters">Parâmetros de conexão e controle</a>. </td></tr><tr><td> <code>nível</code> </td><td> <code>NuiSdkLogLevel</code> </td><td> Nível de impressão para os próprios logs do SDK. </td></tr><tr><td> <code>salvar_log</code> </td><td> BOOL </td><td> Se os logs devem ser salvos localmente. Se definido para <code>SIM</code>, especifique um caminho com <code>depuração_caminho</code> em <a href="#connection-and-control-parameters">Parâmetros de conexão e controle</a>e, opcionalmente, defina o tamanho do arquivo com <code>max_log_arquivo_tamanho</code>. </td></tr></tbody></table>
Valor de retorno
Retorna um código de erro. Consulte Referência do código de erro.
####nui_set_params
Define os Parâmetros de conversação por voz no formato JSON. Chame este método antes de nui_dialog_start.
Assinatura do método
-(NuiResultCode) nui_set_params:(const char *)params;
Descrições dos parâmetros
<table><colgroup><col style={{ width: "20%" }} /><col style={{ width: "20%" }} /><col style={{ width: "60%" }} /></colgroup><thead><tr><th> Parâmetro </th><th> Tipo </th><th> Descrição </th></tr></thead><tbody><tr><td> <code>parâmetros</code> </td><td> <code>caractere*</code> </td><td> <a href="#conversation-parameters">Parâmetros de conversação por voz</a>. </td></tr></tbody></table>
Valor de retorno
Retorna um código de erro. Consulte Referência do código de erro.
nui_dialog_start
Inicia a conversa.
Assinatura do método
-(NuiResultCode) nui_dialog_start:(NuiVadMode)vad_mode
dialogParam:(const char *)dialog_params;
Parâmetros
<table> <colgroup> <col style={{ width: "20%" }} />
<col style={{ width: "20%" }} />
<col style={{ width: "60%" }} />
</colgroup>
<thead> <tr> <th> Parâmetro </th>
<th>
**Tipo**
</th>
<th>
**Descrição**
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
vad_mode
</td>
<td>
`NuiVadMode`
</td>
<td>
Modo VAD. Corrigido para `MODE_P2T`.
</td>
</tr>
<tr>
<td>
`dialog_params`
</td>
<td>
`char*`
</td>
<td>
Se `apikey` nos [parâmetros de conexão e controle](#connection-and-control-parameters) é uma [chave de API temporária](/api-reference/more/generate-a-temporary-api-key), atualize-o aqui depois que ele expirar.
Formato JSON:
```json
{
"apikey": "st-****"
}
```
</td>
</tr>
</tbody> </table>
Valor de retorno
Um código de erro. Consulte Referência do código de erro.
nui_dialog_cancel
Termina a conversa ou cancela imediatamente a interação atual.
Assinatura do método
-(NuiResultCode) nui_dialog_cancel:(BOOL)force;
Descrições dos parâmetros
<table><colgroup><col style={{ width: "20%" }} /><col style={{ width: "20%" }} /><col style={{ width: "60%" }} /></colgroup><thead><tr><th> Parâmetro </th><th> Tipo </th><th> Descrição </th></tr></thead><tbody><tr><td> <code>força</code> </td><td> <code>BOOL</code> </td><td> Seja para terminar à força e descartar o resultado final. <ul><li> <code>SIM</code>: encerre a tarefa imediatamente, sem esperar que o servidor retorne o resultado final da conversa. </li> <li> <code>NÃO</code>: Finalize a tarefa, mas aguarde o retorno do resultado completo. </li></ul></td></tr></tbody></table>
Valor de retorno
Retorna um código de erro. Consulte Referência do código de erro.
nui_dialog_action
Envia um comando de ação de conversa durante uma interação para atualizar o comportamento do tempo de execução, como o contexto da conversa.
Assinatura do método
- (NuiResultCode) nui_dialog_action:(const char *)params;
Parâmetros
<table> <colgroup> <col style={{ width: "20%" }} />
<col style={{ width: "20%" }} />
<col style={{ width: "60%" }} />
</colgroup>
<thead> <tr> <th> Parâmetro </th>
<th>
**Tipo**
</th>
<th>
**Descrição**
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
params
</td>
<td>
`char*`
</td>
<td>
Uma string JSON usada para atualizar o comportamento do tempo de execução, como o contexto da conversa.
</td>
</tr>
<tr>
<td>
`params.type`
</td>
<td>
`String`
</td>
<td>
Definir como `"action"`.
</td>
</tr>
<tr>
<td>
`params.command`
</td>
<td>
`String`
</td>
<td>
Comando de tempo de execução. Valores válidos:<ul><li><code>função\_chamada</code>: atualiza uma solicitação de chamada de função.</li><li><code>jogar\_iniciar</code>: quando o AEC no dispositivo é usado, notifica o SDK de que a reprodução de áudio foi iniciada.</li><li><code>jogar\_over</code>: quando o AEC no dispositivo é usado, notifica o SDK de que a reprodução de áudio foi encerrada.</li></ul>
</td>
</tr>
<tr>
<td>
`params.context`
</td>
<td>
`String`
</td>
<td>
Atualização de solicitação de chamada de função. Usado quando `command` é `"function_call"`.
</td>
</tr>
<tr>
<td>
`params.context.type`
</td>
<td>
`String`
</td>
<td>
Tipo de evento. Este parâmetro é necessário quando `command` é `"function_call"`. `conversation.item.create` insere um item de conversa para contexto histórico, texto suplementar ou resultado de ferramenta. Depois de enviar `conversation.item.create`, usar `response.create` para desencadear outra inferência.
</td>
</tr>
<tr>
<td>
`params.context.item`
</td>
<td>
`object`
</td>
<td>
Obrigatório quando `params.context.type` é `conversation.item.create`. O item de conversa a ser criado.
</td>
</tr>
<tr>
<td>
`params.context.response`
</td>
<td>
`object`
</td>
<td>
Opcional quando `params.context.type` é `response.create`. Substitui os padrões de sessão para esta inferência. Se omitido, a configuração da sessão atual será usada.
</td>
</tr>
</tbody> </table>
context.item parâmetros:
<table> <colgroup> <col style={{ width: "20%" }} />
<col style={{ width: "20%" }} />
<col style={{ width: "60%" }} />
</colgroup>
<thead> <tr> <th> Parâmetro </th>
<th>
**Tipo**
</th>
<th>
**Descrição**
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
id
</td>
<td>
`String`
</td>
<td>
ID de item de conversa exclusivo opcional. Se omitido, o servidor gera um. Um erro será retornado se o ID especificado já existir.
</td>
</tr>
<tr>
<td>
`type`
</td>
<td>
`String`
</td>
<td>
Tipo de item obrigatório. Valores válidos:<ul><li><code>mensagem</code>: uma mensagem normal.</li><li><code>função\_chamada</code>: uma solicitação de chamada de função. Esse tipo normalmente é gerado pelo servidor. O cliente também pode usá-lo para adicionar contexto histórico.</li><li><code>função\_chamada\_saída</code>: um resultado de execução da ferramenta. Depois de receber um <code>função\_chamada</code>, o cliente executa a ferramenta e usa esse tipo para gravar o resultado.</li></ul>
</td>
</tr>
<tr>
<td>
`role`
</td>
<td>
`String`
</td>
<td>
Obrigatório para `message`. Valores válidos: `system`, `user`e `assistant`.
</td>
</tr>
<tr>
<td>
`content`
</td>
<td>
`array`
</td>
<td>
Obrigatório para `message`. Cada item contém um `type` e o campo de dados associado. `system` suporta `input_text` com `text`; `user` suporta `input_text` com `text` e `input_audio` com codificação Base64 `audio`; `assistant` suporta `output_text` com `text`.
</td>
</tr>
<tr>
<td>
`call_id`
</td>
<td>
`String`
</td>
<td>
Obrigatório para `function_call` e `function_call_output`. O ID exclusivo que associa uma solicitação de chamada de função ao seu resultado.
</td>
</tr>
<tr>
<td>
`name`
</td>
<td>
`String`
</td>
<td>
Obrigatório para `function_call`. O nome da função a ser chamada.
</td>
</tr>
<tr>
<td>
`arguments`
</td>
<td>
`String`
</td>
<td>
Obrigatório para `function_call`. Argumentos de função como uma string JSON.
</td>
</tr>
<tr>
<td>
`output`
</td>
<td>
`String`
</td>
<td>
Obrigatório para `function_call_output`. Resultado da execução da ferramenta como uma string JSON.
</td>
</tr>
</tbody> </table>
context.response parâmetros:
<table> <colgroup> <col style={{ width: "20%" }} />
<col style={{ width: "20%" }} />
<col style={{ width: "60%" }} />
</colgroup>
<thead> <tr> <th> Parâmetro </th>
<th>
**Tipo**
</th>
<th>
**Descrição**
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
modalities
</td>
<td>
`array`
</td>
<td>
Modalidades de saída. `["text"]` retorna apenas texto. `["audio", "text"]` (padrão) retorna áudio e texto.
</td>
</tr>
<tr>
<td>
`voice`
</td>
<td>
`string`
</td>
<td>
Substitui a voz TTS para esta inferência.
</td>
</tr>
</tbody> </table>
Exemplo:
{
"type": "action",
"command": "function_call",
"context": {
"item": {
"call_id": "call_xxxx",
"output": "{\"city\":\"Hangzhou\",\"condition\":\"sunny\",\"temperature\":18}",
"type": "function_call_output"
},
"type": "conversation.item.create"
}
}
{
"type": "action",
"command": "function_call",
"context": {
"response": {
"modalities": ["text", "audio"]
},
"type": "response.create"
}
}
Valor de retorno
Um código de erro. Consulte Referência do código de erro.
nui_update_audio_data
Quando audio_update_manually está definido para "true", os dados de gravação não são mais fornecidos através onNuiNeedAudioData. Use este método para pressioná-lo ativamente.
Assinatura do método
-(NuiResultCode) nui_update_audio_data:(const char *)data
Len:(int)length
FirstPack:(BOOL)first_pack;
Descrições dos parâmetros
<table><colgroup><col style={{ width: "20%" }} /><col style={{ width: "20%" }} /><col style={{ width: "60%" }} /></colgroup><thead><tr><th> Parâmetro </th><th> Tipo </th><th> Descrição </th></tr></thead><tbody><tr><td> <code>dados</code> </td><td> <code>const caracter *</code> </td><td> Os dados de áudio a serem enviados. </td></tr><tr><td> <code>comprimento</code> </td><td> <code>interno</code> </td><td> O comprimento dos dados de áudio, em bytes. </td></tr><tr><td> <code>primeiro_pacote</code> </td><td> <code>BOOL</code> </td><td> Você não precisa usar este parâmetro. </td></tr></tbody></table>
Valor de retorno
Retorna um código de erro. Consulte Referência do código de erro.
nui_push_referência_data
Quando audio_update_manually está definido para "true" e o cancelamento de eco acústico (AEC) no dispositivo estiver ativado, use este método para enviar o áudio reproduzido pelo player como sinal de referência.
Assinatura do método
-(NuiResultCode) nui_push_reference_data:(const char *)data
Len:(int)length
FirstPack:(BOOL)first_pack;
Descrições dos parâmetros
<table><colgroup><col style={{ width: "20%" }} /><col style={{ width: "20%" }} /><col style={{ width: "60%" }} /></colgroup><thead><tr><th> Parâmetro </th><th> Tipo </th><th> Descrição </th></tr></thead><tbody><tr><td> <code>dados</code> </td><td> <code>const caracter *</code> </td><td> Os dados de áudio a serem enviados. </td></tr><tr><td> <code>comprimento</code> </td><td> <code>interno</code> </td><td> O comprimento dos dados de áudio, em bytes. </td></tr><tr><td> <code>primeiro_pacote</code> </td><td> <code>BOOL</code> </td><td> Você não precisa usar este parâmetro. </td></tr></tbody></table>
Valor de retorno
Retorna um código de erro. Consulte Referência do código de erro.
nui_lançamento
Libera todos os recursos internos do SDK e encerra à força todas as tarefas em execução. Depois de chamar esse método, a instância do SDK fica indisponível. Para usá-lo novamente, você deve chamar nui_initialize para inicializá-lo novamente.
Assinatura do método
-(NuiResultCode) nui_release;
Valor de retorno
Retorna um código de erro. Consulte Referência do código de erro.
nui_get_version
Obtém a versão atual do SDK. Este método retorna um valor somente após nui_initialize é chamado.
Assinatura do método
-(const char*) nui_get_version;
Valor de retorno
A versão atual do SDK.
nui_get_all_response
Obtém as informações completas do retorno de chamada do evento atual.
Assinatura do método
-(const char*) nui_get_all_response;
Valor de retorno
As informações completas do evento como uma string JSON.
NeoNuiSdkDelegate: ouvintes de retorno de chamada
onNuiEventCallback: ouça informações do evento
Assinatura do método
-(void) onNuiEventCallback:(NuiCallbackEvent)nuiEvent
dialog:(long)dialog
kwsResult:(const char *)wuw
asrResult:(const char *)asr_result
ifFinish:(BOOL)finish
retCode:(int)code;
Descrições dos parâmetros
<table><colgroup><col style={{ width: "20%" }} /><col style={{ width: "20%" }} /><col style={{ width: "60%" }} /></colgroup><thead><tr><th> Parâmetro </th><th> Tipo </th><th> Descrição </th></tr></thead><tbody><tr><td> <code>nuiEvento</code> </td><td> <a href="#event-types">Evento NuiCallback</a> </td><td> Evento de retorno de chamada. </td></tr><tr><td> <code>diálogo</code> </td><td> <code>longo</code> </td><td> ID da sessão. Você não precisa usar este parâmetro. </td></tr><tr><td> <code>uau</code> </td><td> <code>caractere*</code> </td><td> Ativação por voz. Você não precisa usar este parâmetro. </td></tr><tr><td> <code>asr_resultado</code> </td><td> <code>caractere*</code> </td><td> Resultado do reconhecimento de fala. </td></tr><tr><td> <code>terminar</code> </td><td> <code>BOOL</code> </td><td> Se a atual rodada de reconhecimento terminou. </td></tr><tr><td> <code>código</code> </td><td> <code>interno</code> </td><td> Código de erro. Válido quando ocorre o evento EVENT_ASR_ERROR. Veja <a href="/api-reference/preparation/error-messages">Referência de código de erro</a>. </td></tr></tbody></table>
onNuiAudioStateChanged: ouça o estado do áudio
O SDK usa esse retorno de chamada para notificá-lo quando iniciar ou interromper a gravação.
Assinatura do método
-(void) onNuiAudioStateChanged:(NuiAudioState)state;
Estados NuiAudioState
<table><colgroup><col style={{ width: "25%" }} /><col style={{ width: "75%" }} /></colgroup><thead><tr><th> Parâmetro </th><th> Descrição </th></tr></thead><tbody><tr><td> <code>ESTADO_OPEN</code> </td><td> A interação começou. Você pode abrir o dispositivo de gravação e começar a gravar. </td></tr><tr><td> <code>ESTADO_PAUSA</code> </td><td> A interação foi interrompida. Você pode parar de gravar. </td></tr><tr><td> <code>ESTADO_CLOSE</code> </td><td> A instância do SDK foi lançada. Você pode fechar o dispositivo de gravação completamente. </td></tr></tbody></table>
onNuiNeedAudioData: fornece dados de áudio
Após o início da conversa, esse retorno de chamada é acionado continuamente. Forneça os dados de áudio neste retorno de chamada. Você não precisa usar esse retorno de chamada quando audio_update_manually está definido para "true".
Assinatura do método
-(int) onNuiNeedAudioData:(char *)audioData length:(int)len;
Descrições dos parâmetros
<table><colgroup><col style={{ width: "20%" }} /><col style={{ width: "20%" }} /><col style={{ width: "60%" }} /></colgroup><thead><tr><th> Parâmetro </th><th> Tipo </th><th> Descrição </th></tr></thead><tbody><tr><td> <code>dados de áudio</code> </td><td> <code>caracter *</code> </td><td> Os dados de áudio a serem fornecidos. </td></tr><tr><td> <code>lento</code> </td><td> <code>interno</code> </td><td> O tamanho dos dados de áudio fornecidos, em bytes. </td></tr></tbody></table>
onNuiAssistEventCallback: receba dados e informações auxiliares
Recebe eventos auxiliares e dados relacionados do SDK.
Assinatura do método
-(void) onNuiAssistEventCallback:(NuiCallbackEvent)nuiEvent
info:(char*)info
infoLen:(int)info_len
buffer:(char*)buffer
len:(int)len;
Descrições dos parâmetros
<table><colgroup><col style={{ width: "20%" }} /><col style={{ width: "20%" }} /><col style={{ width: "60%" }} /></colgroup><thead><tr><th> Parâmetro </th><th> Tipo </th><th> Descrição </th></tr></thead><tbody><tr><td> <code>nuiEvento</code> </td><td> <code>Evento NuiCallback</code> </td><td> O evento de retorno de chamada. </td></tr><tr><td> <code>informações</code> </td><td> <code>caracter *</code> </td><td> Você não precisa usar este parâmetro. </td></tr><tr><td> <code>informações_len</code> </td><td> <code>interno</code> </td><td> Você não precisa usar este parâmetro. </td></tr><tr><td> <code>buffer</code> </td><td> <code>caracter *</code> </td><td> Dados auxiliares, como áudio TTS retornado pelo modelo. </td></tr><tr><td> <code>lento</code> </td><td> <code>interno</code> </td><td> O comprimento dos dados auxiliares, em bytes. </td></tr></tbody></table>
onNuiLogTrackCallback: ouça registros de rastreamento
Esse retorno de chamada recebe logs internos detalhados do SDK para ajudar você a localizar e depurar problemas.
-(void) onNuiLogTrackCallback:(NuiSdkLogLevel)level
logMessage:(const char *)log;
NuiCallbackEvent: tipos de eventos
<table> <colgroup> <col style={{ width: "25%" }} />
<col style={{ width: "75%" }} />
</colgroup>
<thead> <tr> <th> Evento </th>
<th>
**Descrição**
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
EVENT_TRANSCRIBER_STARTED
</td>
<td>
A tarefa foi iniciada com sucesso.
</td>
</tr>
<tr>
<td>
`EVENT_VAD_START`
</td>
<td>
Acionado imediatamente após o início da tarefa. Isto não significa que o início da fala tenha sido detectado.
</td>
</tr>
<tr>
<td>
`EVENT_VAD_END`
</td>
<td>
O final da fala foi detectado.
</td>
</tr>
<tr>
<td>
`EVENT_ASR_PARTIAL_RESULT`
</td>
<td>
Um resultado intermediário de reconhecimento de fala.
</td>
</tr>
<tr>
<td>
`EVENT_ASR_ERROR`
</td>
<td>
Ocorreu um erro durante a conversa de voz.
</td>
</tr>
<tr>
<td>
`EVENT_MIC_ERROR`
</td>
<td>
Disparado quando nenhum dado de áudio é recebido por dois segundos consecutivos.
</td>
</tr>
<tr>
<td>
`EVENT_SENTENCE_END`
</td>
<td>
O final de uma frase foi detectado e um resultado de reconhecimento completo foi retornado.
</td>
</tr>
<tr>
<td>
`EVENT_TRANSCRIBER_COMPLETE`
</td>
<td>
A conversa de voz terminou.
</td>
</tr>
<tr>
<td>
`EVENT_AUDIO_TRANSCRIPTION`
</td>
<td>
Um evento incremental de transcrição de texto para saída de áudio. Os segmentos de transcrição são retornados no modo de streaming.
</td>
</tr>
<tr>
<td>
`EVENT_AUDIO_TRANSCRIPTION_COMPLETED`
</td>
<td>
A transcrição para saída de áudio está completa.
</td>
</tr>
<tr>
<td>
`EVENT_OTHER_RESULT`
</td>
<td>
Outras informações de evento, como o resultado de uma chamada de função.
</td>
</tr>
<tr>
<td>
`EVENT_ASR_TTS_START`
</td>
<td>
O modelo começou a retornar áudio TTS.
</td>
</tr>
<tr>
<td>
`EVENT_ASR_TTS_DATA`
</td>
<td>
Áudio TTS retornado pelo modelo.
</td>
</tr>
<tr>
<td>
`EVENT_ASR_TTS_COMPLETE`
</td>
<td>
O modelo terminou de retornar o áudio TTS.
</td>
</tr>
<tr>
<td>
`EVENT_AEC_DATA`
</td>
<td>
Dados de áudio processados pelo AEC.
</td>
</tr>
</tbody> </table>