语音配置#

要为机器人启用语音 I/O,需要使用聊天控制器。聊天控制器是一个 gRPC 服务器,它使用图形来启用语音 I/O,并由各种组件组成。这些组件公开各种参数。您可以根据需要设置聊天控制器图形组件的参数。这些参数可以在文件 samples/{bot-name}/speech_config.yaml 中修改,该文件位于相应的机器人目录下。

BotRuntimeGrpc#

BotRuntimeGrpc 组件运行 gRPC 服务器并公开 gRPC API。客户端可以连接到此服务器以访问聊天控制器的服务。您可以设置 gRPC 服务器组件的以下参数。

  • port_number - gRPC 服务器监听客户端请求的端口号,默认为 50055

  • virtual_assistant_num_instances - gRPC 服务器支持的并发客户端实例数。每个实例都使用客户端的 stream_id 映射到唯一的客户端。

  • virtual_assistant_pipeline_idle_threshold_secs - 空闲管线检测阈值时间(秒)。如果管线空闲时间超过此持续时间,它将自动释放/释放。默认为 600 秒。

  • virtual_assistant_pipeline_idle_handler_wakeup_rate_secs - 空闲管线处理程序线程唤醒速率(秒)。此线程将在指定的秒数后唤醒,以检查空闲管线,如果某些管线空闲时间超过 virtual_assistant_pipeline_idle_threshold_secs,则将释放该管线。默认为 10 秒。

    grpc_server:
    nvidia::rrt::BotRuntimeGrpc:
        port_number: 50055
        virtual_assistant_num_instances: 10
        virtual_assistant_pipeline_idle_threshold_secs: 600
        virtual_assistant_pipeline_idle_handler_wakeup_rate_secs: 10
    

SpeechPipelineManager#

SpeechPipelineManager 组件负责维护对话流程。它协调 ASR、聊天引擎和 TTS 之间的对话流程。它接受语音输入,将其传递给 ASR,获取 ASR 文本记录,然后将其发送到聊天引擎并接收聊天引擎响应,并将其发送到 TTS。

此组件支持以下参数进行自定义。

  • asr_idle_timeout_ms - ASR 的空闲超时时间(毫秒)。如果 ASR 处于活动状态,并且在此时间内未收到语音输入,则指示 ASR 组件关闭与 Riva Skills 服务器的连接。

  • tts_eos_delay_ms - 当收到 TTS 流结束 (EOS) 时,其报告将延迟 tts_eos_delay_ms 时间。默认值为 0。此参数可用于避免馈送 tts 播放的数据。

  • enable_barge_in - 用于启用/禁用强行介入支持的标志。默认为 false,表示禁用。此参数仅在 use_umim=false 时有效。

  • barge_in_words_list - 用于强行介入的逗号分隔单词列表。每当检测到列表中的任何单词时,正在进行的 TTS 播放将停止。此参数仅在 use_umim=false 时有效。

  • always_on - 用于使 ASR 始终保持活动状态的标志,如果为 true,则 ASR 始终处于活动状态;如果为 false,则 ASR 仅在 TTS 完成后才处于活动状态。

  • use_umim - 用于启用 umim 模式的标志,如果为 true,则将使用 umim 总线来发送/接收事件。默认为 false。

speech_pipeline_manager:
SpeechPipelineManager:
    asr_idle_timeout_ms: 200000
    tts_eos_delay_ms: 2000
    always_on: true
    enable_barge_in: true
    barge_in_words_list: ["please stop", "cancel", "abandon", "break"]
    use_umim: false

Riva ASR#

Riva ASR 组件接受音频数据并生成文本记录。它调用 Riva Skills 服务器以获取 asr 文本记录。此组件支持以下参数。

  • language - 语言代码,仅支持 en-US

  • server - 托管 Riva ASR 服务器的服务器地址和端口。

  • ratelimit_log_period_ms - 以毫秒为单位的时间段,用于设置速率限制的调试日志频率。默认设置为 0,这将禁用调试日志。ASR 的调试日志还会打印 ASR 缓冲区能量。

  • enable_profanity_filter - 用于启用/禁用不雅内容过滤器的标志。

  • word_boost_file_path - JSON 文件路径,用于指定要提升的单词和提升强度值。例如,下面显示了一个 JSON 文件。

{
"comment": "speech_context can have multiple entries. Each entry has single boost value and multiple phrases.",
"speech_context": [
{
"boost": 50,
"phrases": [
    "wraps"
]
},
{
"boost": 40,
"phrases": [
    "Tops",
    “sides”
]
}
]
  • access_tokens - 用于从 NVIDIA API 目录访问 ASR 服务的访问令牌。它是要发送到服务器的令牌的逗号分隔的键值对 <key,value,...>。( authorization,Bearer <nvidia-api-key>,function-id,22164014-a6cc-4a6f-b048-f3a303e745bb)

  • endpointing_start_threshold - 用于检测话语开始的百分比阈值。(0.0 到 1.0)

  • endpointing_stop_history - 用于检测话语结束的窗口大小(毫秒)。

  • endpointing_stop_threshold - 用于检测话语结束的百分比阈值。(0.0 到 1.0)

  • endpointing_stop_history_eou - 触发话语结束的第一次传递,并生成稳定性为 1 的部分文本记录。( endpointing_stop_history_eou < endpointing_stop_history)

  • endpointing_stop_threshold_eou - 用于触发话语结束的第一次传递的百分比阈值。(0.0 到 1.0)

  • enable_verbatim_transcripts - 启用或禁用逆文本规范化 (ITN)。如果设置为 true,它将返回所说的内容,而不进行反规范化。如果设置为 false,它将应用逆文本规范化。默认设置为 false

  • apply_partial_itn - 启用或禁用部分文本记录的逆文本规范化。默认设置为 true

  • enable_punctuation - 启用或禁用标点符号。默认为 true

单词提升#

单词提升允许您在请求时偏向 ASR 引擎以识别特定的感兴趣单词;通过在解码声学模型的输出时为它们提供更高的分数。对于我们的示例机器人,当菜单中的某些项目具有独特的发音或某些特定领域单词的发音与某些通用常用单词非常匹配时,这非常有用。

注意

建议的提升分数介于 20 和 100 之间。较高的分数会增加提升的单词出现在文本记录中的可能性(如果这些单词出现在音频中)。但是,它也可能增加提升的单词出现在文本记录中的可能性,即使它们没有出现在音频中。

有关更多信息,请参阅 Riva ASR 文档

riva_asr:
RivaASR:
    server: "localhost:50051"
    language: "en-US"
    word_boost_file_path: "/workspace/config/asr_words_to_boost_conformer.txt"
    enable_profanity_filter: false

聊天引擎#

聊天引擎组件与聊天引擎 REST API 交互。它将请求传递到聊天引擎服务器并从中获取响应。您可以设置聊天引擎组件的以下参数

  • server - 托管聊天引擎的服务器地址和端口。

  • ratelimit_log_period_ms - 以毫秒为单位的时间段,用于设置速率限制的调试日志频率。默认设置为 0,这将禁用调试日志。

  • enable - 用于启用/禁用此组件的标志。默认值为 true,表示已启用。对于 UMIM 管线,默认情况下禁用此组件。

  • http_timeout_ms - 访问聊天引擎的 REST API 时要使用的超时值(毫秒)。默认为 20000

  • use_streaming - 用于在 streaming 模式下接收聊天引擎响应的标志。如果聊天引擎未在 streaming 模式下提供响应,则将其设置为 false。默认为 true

  • sentence_breaker_pattern - 当 use_streaming=true 时使用此参数。由于聊天引擎逐个令牌地发送响应,而 tts 需要句子,因此如果流式响应中找到任何这些字符,则可以使用此参数来形成句子。默认模式为 ".!,?"。

  • min_chars_in_sentence - 当 use_streaming=true 时使用此参数。由于聊天引擎逐个令牌地发送响应,而 tts 需要句子,因此可以使用此参数来提及句子中可用的最少字符数。默认为 20

    dialog_manager:
      DialogManager:
        server: "http://127.0.0.1:9000"
        enable: true
    

Riva TTS#

Riva TTS 组件与 Riva Skills TTS 服务器交互。它接受文本输入并提供音频数据作为输出。它支持以下参数

  • voice_name - TTS 服务器支持的声音名称。

  • sample_rate - 合成音频的所需采样率,默认为 16000 Hz。

  • server - 托管 TTS 服务器的服务器地址和端口。

  • language - 语言代码,仅支持 en-US

  • ipa_dict - 自定义单词到 IPA 到发音映射字典,用于自定义发音。

  • ratelimit_log_period_ms - 以毫秒为单位的时间段,用于设置速率限制的调试日志频率。默认设置为 0,这将禁用调试日志。

  • chunk_duration_ms - 音频输出块大小(毫秒)。

  • send_audio_in_realtime - 如果为 true,音频数据将实时发送,否则将以突发方式发送。默认为 false

  • audio_start_threshold_ms - 音频数据将以突发方式发送的持续时间,其余数据将实时发送,必须是 chunk_duration_ms 的多个块。默认值为 400。当启用强行介入时,这是必需的。

  • tts_mode - 用于连接到 TTS 服务器的模式,支持的模式为 grpchttp。默认为 grpc。当使用 TTS 服务(Riva 以外)时,将使用 http 模式。您可以将第三方 TTS 服务部署为 NLP 服务器的一部分。有关更多信息,请参阅 使用第三方文本到语音 (TTS) 解决方案 部分。

  • model_name - TTS 推理模型名称。默认为空。

  • access_tokens - 用于从 NVIDIA API 目录访问 ASR 服务的访问令牌。它是要发送到服务器的令牌的逗号分隔的键值对 <key,value,...>。( authorization,Bearer <nvidia-api-key>,function-id,5e607c81-7aa6-44ce-a11d-9e08f0a3fe49)

  • zero_shot_audio_prompt_file - 语音提示音频文件路径。在声音名称和语音提示的情况下,将使用语音提示。支持的文件格式仅为 wav。Riva TTS 模型基于 PFLOW 支持此功能。

  • zero_shot_quality - 输出音频的所需质量,范围为 1-40。默认为 20。Riva TTS 服务仅支持此功能。

    riva_tts:
      RivaTTS:
        server: "localhost:32001"
        voice_name: "English-US.Female-1"
        language: "en-US"
        ipa_dict: ""
        sample_rate: 16000
        ratelimit_log_period_ms: 0
        chunk_duration_ms: 100
        audio_start_threshold_ms: 400
        send_audio_in_realtime: true
        tts_mode: "grpc"
        model_name: ""
    

以下示例显示了当使用带有 NLP 服务器的第三方 TTS 服务时可以使用的参数。

riva_tts:
  RivaTTS:
    tts_mode: "http"
    voice_name: "Brian"
    server: "http://<ip>:9003/speech/text_to_speech"
    language: "en-US"
    sample_rate: 44100
    model_name: "eleven_monolingual_v1"

IPA 字典#

IPA 调整使您可以使用自定义发音来调整 TTS 模型,以用于某些特定领域的单词或发音不符合预期的单词。该模型将此发音用于指定的单词,同时合成相同单词的音频。

要在 TTS 中使用 IPA 映射,我们需要创建一个字典文件,其中包含单词及其 IPA 表示形式。

每行应包含一个与单词及其 IPA 表示形式对应的条目,格式为 <WORD IN UPPER CASE><SPACE><SPACE><IPA Representation>

3D  'θɹiˌdi
GPU  'dʒi'pi'ju
AI  ˌeɪ'aɪ

Riva Logger#

Riva Logger 组件将音频和文本数据记录到文件中。它将输入音频转储到 ASR、来自 TTS 的合成输出以及聊天引擎响应到文件中。此组件支持以下参数

  • data_dump_path - 要在其中转储日志数据的路径。在此路径目录下,将创建一个 <date-time>。默认为 /tmp/。例如,/tmp/2022-01-31_13-40-40/

  • test_mode - 如果为 true,则为每个回合创建一个新文件,否则文件将被覆盖。默认为 false

  • ratelimit_log_period_ms - 以毫秒为单位的时间段,用于设置速率限制的调试日志频率。默认设置为 0,这将禁用调试日志。

  • enable_logging - 如果为 true,则启用数据日志记录。如果为 false,则不会转储任何数据。默认为 true

    riva_logger:
      RivaLogger:
        data_dump_path: "/workspace/log"
        enable_logging: true
        ratelimit_log_period_ms: 0
        enable_logging: true
    

NvMsgBrokerC2DReceiver#

NvMsgBrokerC2DReceiver 组件用于接收来自消息代理(如 Redis)的消息。支持以下参数

  • conn_str - 连接信息,其中包含 Redis 服务器的 IP 地址和端口,以分号分隔。默认为 127.0.0.1;6379

  • topics - 组件应订阅的主题列表。指定为分号分隔的字符串列表。例如,topic1;topic2;topic3

    nvcloudmsg_receiver:
      NvMsgBrokerC2DReceiver:
        topics: emdat_alert_events
        conn_str: 127.0.0.1;6379
    
  • enable - 用于启用/禁用此组件的标志。默认值为 true,表示已启用。

NvMsgBrokerD2CTransmitter#

NvMsgBrokerD2CTransmitter 组件将消息传输到消息代理(如 Redis)。支持以下参数

  • conn_str - 连接信息,其中包含 Redis 服务器的 IP 地址和端口,以分号分隔。默认为 127.0.0.1;6379

  • payload_key - 要用于有效负载的键名。此键将用于 JSON 对象。默认为 metadata

    d2c_transmitter:
      NvMsgBrokerD2CTransmitter:
        conn_str: 127.0.0.1;6379
    

Audio2FaceGrpc#

Audio2FaceGrpc 组件将音频数据发送到 Audio2Face 微服务。支持以下参数

  • server - 托管 Audio2Face 服务器的服务器地址和端口。

  • avatar_model - 头像模型的名称或标识符。

  • rpc_timeout_ms - 与 gRPC 服务器进行 RPC 通信的超时值(毫秒)。默认为 10000

  • ratelimit_log_period_ms - 以毫秒为单位的时间段,用于设置速率限制的调试日志频率。默认设置为 0,这将禁用调试日志。

  • renderer_latency_ms - 渲染器延迟(毫秒)。如果渲染器具有相当大的延迟,则这对于发送流结束非常有用。默认为 0

  • simulate_eos - 通过等待音频持续时间加上渲染器延迟来模拟 EOS。默认为 true

  • emotion_map - 要发送到 Audio2Face 的情绪映射。这些是键值对。例如,amazement=0.2215;anger=0.0;cheekiness=0.103;disgust=0.0;fear=0.0;grief=0.0;joy=1;outofbreath=0.0;pain=0.0;sadness=0.0

    a2f_grpc:
      Audio2FaceGrpc:
        server: "localhost:50000"
        rpc_timeout_ms: 300000
        renderer_latency_ms: 0
        simulate_eos: true
        emotion_map: "amazement=0.2215;anger=0.0;cheekiness=0.103;joy=1.0"
    

HttpClient#

HttpClient 组件用于将动画命令发送到 REST 端点。支持以下参数

  • server - 托管 HTTP 服务器的服务器地址和端口。

  • enable - 用于启用/禁用此组件的标志。默认值为 true,表示已启用。

    http_client:
      HttpClient:
        server: "http://127.0.0.1:8020"
        enable: true
    

BotControllerUMIM#

BotControllerUMIM 组件使用 umim 总线来发送和接收 umim 事件。支持以下参数

  • enable - 用于 启用/ 禁用 此组件的标志。默认值为 false,表示已禁用。

    entity_umim:
      BotControllerUMIM:
        enable: true
    

LivePortraitGrpc#

LivePortraitGrpc 组件将音频数据发送到 Speech LivePortrait 微服务。支持以下参数

  • server - Speech LivePortrait 服务器托管的地址和端口。

  • sample_rate - PCM 数据的采样率。默认值为 16000 Hz。

  • rpc_timeout_ms - 与 gRPC 服务器进行 RPC 通信的超时值,单位为毫秒。默认值为 90000。

  • lp_config_wait_us - 等待 Speech LivePortrait 服务设置配置的睡眠时间,单位为微秒。默认值为 2000000。

  • silence_buffer_interval_ms - 每个静音缓冲区之间的间隔,单位为毫秒。默认值为 33。

  • silence_buffer_polling_interval_ms - 轮询间隔,用于检查是否应发送静音缓冲区,单位为毫秒。默认值为 1。

  • status_interval_ms - 打印状态的间隔,单位为毫秒。默认值为 0。

  • config_file - LivePortrait 配置 JSON 文件路径。

  • aux_file - H264 png 的辅助文件路径。

    live_portrait_grpc:
      LivePortraitGrpc:
        aux_file: /workspace/riva/lp_portrait.png
        config_file: /opt/ext-files/lp_config.json
        is_dump_audio: true
        lp_config_wait_us: 1000000
        rpc_timeout_ms: 3600000
        sample_rate: 16000
        silence_buffer_interval_ms: 32
        silence_buffer_polling_interval_ms: 1
        status_interval_ms: 2000