自定义参考工作流程#

参考工作流程 部分中描述的参考工作流程为 Tokkio 提供了高级起点。本节列出了可以为这些工作流程执行的常见自定义。

其中一些自定义需要使用 UCS 工具重建应用程序,以创建更新的 helm chart。每个自定义部分都使用指示器 is_rebuild_needed: Yes/No 来指示这一点。

注意

本节假定您已成功部署其中一个参考工作流程。

RAG 端点自定义#

is_rebuild_needed: No

这是最常见的自定义之一,只需进行单行更改即可轻松完成。LLM RAG 工作流程默认使用 NIM 端点。按照以下步骤调整选项,以满足以下描述的用例

用例

  • 使用 OpenAI 作为 LLM 端点(而不是默认的 NIM 端点)

  • 使用 RAG 管线和自定义 RAG 部署 URL

  • 更改用作 LLM 端点的 NIM 或 OpenAI 模型。

下面列出的步骤对 LLM RAG Bot 的任何渲染变体都有效,但以单流 OV 渲染 helm chart 为例列出

  1. 从 NGC 下载示例 LLM RAG 工作流程的 helm chart。例如,这是单流 OV 渲染变体的 helm chart 的链接:https://catalog.ngc.nvidia.com/orgs/nvidia/teams/ace/helm-charts/ucs-tokkio-app-base-1-stream-llm-rag-3d-ov

  2. 从下载的 helm chart 文件夹的 values.yaml 中找到要更新的相关代码块。将其复制到一个新的 yaml 文件中。此自定义的相关代码块如下所示。确保复制整个代码块,以便它保留 yaml 文件中的相关路径。您可以在更新后使用任何名称保存新文件。例如:my_override_values.yaml

    ace-agent-plugin-server:
      pluginConfig:
        plugins:
          rag:
            parameters:
                USE_RAG: false
                RAG_SERVER_URL: http://IP:PORT
                NIM_MODEL: "meta/llama3-8b-instruct" #as defined at https://build.nvidia.com/meta/llama-3_1-8b-instruct
                USE_OPENAI: false
                OPENAI_MODEL: "gpt-4"
    
  3. 要使用 OpenAI 作为 LLM 端点(而不是默认的 NIM 端点),请设置 USE_OPENAI: true

  4. 要使用 RAG 管线和自定义 RAG 部署 URL,请更新 USE_RAG: trueRAG_SERVER_URL: http://IP:PORT

  5. 要更改用作 LLM 端点的 NIM 或 OpenAI 模型,请通过指定 NIM_MODELOPENAI_MODEL 的值来相应地更新选择。

    注意

    确保所选 LLM 模型或 RAG 端点的响应格式与 LLM RAG Bot 的开箱即用实现兼容。如果不是,则需要从下载的源文件中更新 rag.py,以适应所需的请求/响应格式。LLM RAG 资源的源代码和实现细节在此处提供:此处

  6. 按照 集成无需重建的自定义更改 中列出的步骤操作,以反映已部署的 Tokkio 工作流程中的更改。

头像和场景自定义#

is_rebuild_needed: No

用例

  • 在 Tokkio 部署的 UI 中显示的自定义头像/场景

Tokkio 使您能够使用 头像配置器 自定义头像,或者,您可以按照自定义头像指南导入第三方头像。有关更多信息,请参阅 头像自定义 部分。

请注意,有多种 替代方法 上传头像场景。

本文档描述了如何使用 NGC 资源下载器 将 ACE 头像场景上传到 NGC,以及如何更新 UCS 配置以引用这些新场景文件。这些说明适用于自定义头像场景和使用头像配置器创建的场景。

下面列出的步骤对 LLM RAG Bot 的任何渲染变体都有效,但以单流 OV 渲染 helm chart 为例列出

  1. 从 NGC 下载示例 LLM RAG 工作流程的 helm chart。例如,这是单流 OV 渲染变体的 helm chart 的链接:https://catalog.ngc.nvidia.com/orgs/nvidia/teams/ace/helm-charts/ucs-tokkio-app-base-1-stream-llm-rag-3d-ov

  2. 从下载的 helm chart 文件夹的 values.yaml 中找到要更新的相关代码块。将其复制到一个新的 yaml 文件中。此自定义的相关代码块如下所示。确保复制整个代码块,以便它保留 yaml 文件中的相关路径。将 PATH_TO_REMOTE_RESOURCE 值替换为您的资源位置的路径。您可以在更新后使用任何名称保存新文件。例如 my_override_values.yaml

    ia-animation-graph-microservice:
      initContainers:
      - command:
        - /bin/bash
        - download_resource.sh
        env:
        - name: REMOTE_RESOURCE_PATH
          value: "<PATH_TO_REMOTE_RESOURCE>"
    
      resourceDownload:
        remoteResourcePath: "<PATH_TO_REMOTE_RESOURCE>"
    
    ia-omniverse-renderer-microservice:
      initContainers:
      - command:
        - /bin/bash
        - download_resource.sh
        env:
        - name: REMOTE_RESOURCE_PATH
          value: "<PATH_TO_REMOTE_RESOURCE>"
      resourceDownload:
          remoteResourcePath: "<PATH_TO_REMOTE_RESOURCE>"
    
  3. 按照 集成无需重建的自定义更改 中列出的步骤操作,以反映已部署的 Tokkio 工作流程中的更改。

头像语音自定义(Nvidia Riva TTS)#

is_rebuild_needed: No

用例

  • 使用 Riva TTS(Tokkio 的默认配置)时,为自定义头像选择语音选项

Tokkio 使用户能够通过 Riva TTS 配置轻松自定义头像语音。有关选择可用性的更多信息,请查看 Riva TTS

下面列出的步骤对 LLM RAG Bot 的任何渲染变体都有效,但以单流 OV 渲染 helm chart 为例列出

  1. 从 NGC 下载示例 LLM RAG 工作流程的 helm chart。例如,这是单流 OV 渲染变体的 helm chart 的链接:https://catalog.ngc.nvidia.com/orgs/nvidia/teams/ace/helm-charts/ucs-tokkio-app-base-1-stream-llm-rag-3d-ov

  2. 从下载的 helm chart 文件夹的 values.yaml 中找到要更新的相关代码块。将其复制到一个新的 yaml 文件中。此自定义的相关代码块如下所示。确保复制整个代码块,以便它保留 yaml 文件中的相关路径。将 voice_name 值替换为您从 Riva TTS 中选择的与语音模型选择兼容的选项。TTS 的语音模型也列在下面。您可以在更新后使用任何名称保存新文件。例如 my_override_values.yaml

    riva:
      ngcModelConfigs:
        triton0:
          models:
          - nvidia/ace/rmir_asr_parakeet_1-1b_en_us_str_vad:2.17.0
          - nvidia/riva/rmir_tts_fastpitch_hifigan_en_us_ipa:2.17.0
      .
      .
    riva_tts:
      RivaTTS:
        voice_name: English-US.Male-1 # Replace with a voice selection of choice
    
  3. 按照 集成无需重建的自定义更改 中列出的步骤操作,以反映已部署的 Tokkio 工作流程中的更改。

插件资源自定义#

is_rebuild_needed: No

用例

  • 更改对话开始/停止时的问候语

  • 更新请求或响应模式以连接到自定义 RAG 管线

  • 添加填充词以掩盖从管线获取响应的延迟

  • 更改头像名称

  • 更新 Bot 手势

  • 更新 TTS 发音

请参阅 Tokkio LLM RAG 以实现上述用例中提到的各种自定义。

使用以下命令将 Bot(插件资源)发布到您的 NGC 存储库

$ ngc registry resource upload-version --source BOT_FOLDER_NAME targeted_ngc_path:version

下面列出的步骤对 LLM RAG Bot 的任何渲染变体都有效,但以单流 OV 渲染 helm chart 为例列出

  1. 从 NGC 下载示例 LLM RAG 工作流程的 helm chart。例如,这是单流 OV 渲染变体的 helm chart 的链接:https://catalog.ngc.nvidia.com/orgs/nvidia/teams/ace/helm-charts/ucs-tokkio-app-base-1-stream-llm-rag-3d-ov

  2. 从下载的 helm chart 文件夹的 values.yaml 中找到要更新的相关代码块。将其复制到一个新的 yaml 文件中。此自定义的相关代码块如下所示。确保复制整个代码块,以便它保留 yaml 文件中的相关路径。您可以在更新后使用任何名称保存新文件。例如 my_override_values.yaml

    ace-agent-chat-controller:
        configNgcPath: "<path to the custom bot resource on ngc>"
        .
        .
    ace-agent-chat-engine:
        configNgcPath: <path to the custom bot resource on ngc>
        .
        .
    ace-agent-plugin-server:
        configNgcPath: "<path to the custom bot resource on ngc>"
        .
        .
    # Optional edit. Only applicable is using NLP server
    ace-agent-nlp-server:
        configNgcPath: "<path to the custom bot resource on ngc>"
    
  3. 按照 集成无需重建的自定义更改 中列出的步骤操作,以反映已部署的 Tokkio 工作流程中的更改。

禁用用户注意力#

is_rebuild_needed: No

用例

  • 禁用 Bot 仅在用户直接看向摄像头时才响应用户查询的行为。

下面列出的步骤对 LLM RAG Bot 的任何渲染变体都有效,但以单流 OV 渲染 helm chart 为例列出

  1. 从 NGC 下载示例 LLM RAG 工作流程的 helm chart。例如,这是单流 OV 渲染变体的 helm chart 的链接:https://catalog.ngc.nvidia.com/orgs/nvidia/teams/ace/helm-charts/ucs-tokkio-app-base-1-stream-llm-rag-3d-ov

  2. 从下载的 helm chart 文件夹的 values.yaml 中找到要更新的相关代码块。将其复制到一个新的 yaml 文件中。此自定义的相关代码块如下所示。确保复制整个代码块,以便它保留 yaml 文件中的相关路径。要禁用用户注意力,请在代码块中将 enableUserAttention 标志设置为 false,如下所示。您可以在更新后使用任何名称保存新文件。例如 my_override_values.yaml

    ace-agent-chat-engine:
        enableUserAttention: "false"
    
  3. 按照 集成无需重建的自定义更改 中列出的步骤操作,以反映已部署的 Tokkio 工作流程中的更改。

视觉 AI 自定义#

is_rebuild_needed: Yes

用例

  • 在不使用网络摄像头或摄像头的情况下使用 Tokkio

  • 禁用 Tokkio 后端中的计算机视觉服务

说明

  • 在不使用网络摄像头或摄像头的情况下使用 Tokkio

要在不使用网络摄像头的情况下移除视觉 Tokkio,请参阅(UI 前端修改)部分。在这种情况下,由于只是 UI 更改,因此不需要重建 chart。

  • 禁用 Tokkio 后端中的计算机视觉服务

要禁用 Tokkio 后端中的计算机视觉服务,请参阅 通过后端修改禁用视觉。在这种情况下,需要重建 chart,并且可以按照 集成需要重建的自定义更改 中列出的步骤操作,通过重新部署 Tokkio 工作流程来反映更改。

第三方 TTS 语音自定义#

is_rebuild_needed: Yes

用例

  • 将 Eleven Labs 或其他第三方 TTS 解决方案与 Tokkio 一起使用

请参阅 使用第三方 TTS 解决方案 以配置用于语音响应的第三方 TTS 解决方案。请注意,此自定义需要使用额外的微服务 NLP 服务器。教程中引用的 app.yamlapp-params.yaml 对于 Tokkio 而言是 tokkio-app.yamltokkio-app-params.yaml。按照上面链接的教程中的说明更新这些文件。

按照 集成需要重建的自定义更改 中列出的步骤操作,通过重新部署 Tokkio 工作流程来反映更改。

A2F-2D 自定义#

is_rebuild_needed: Yes

用例

  • 自定义 A2F-2D 渲染,例如动画质量、动画属性调整、输入/输出媒体规格等。

1. 创建 JSON 配置文件#

在启动与 A2F-2D 微服务的 gRPC 连接时,将使用存储在文件中的 JSON 对象来指定动画和输入/输出媒体配置。

为了演示,默认的 lp_config.json 由 Chat-Controller MS 引用,如下所示。用户可以按照以下示例创建自己的 JSON 文件,以根据自己的偏好自定义提到的配置和属性。

{
  "lp_config": {
    "animation_cropping_mode": "ANIMATION_CROPPING_MODE_BLEND",
    "model_selection": "MODEL_SELECTION_PERF",
    "eye_blink_config": {
      "blink_frequency": {
        "value": 15,
        "unit": "UNIT_TIMES_PER_MINUTE"
      },
      "blink_duration": {
        "value": 6,
        "unit": "UNIT_FRAME"
      }
    },
    "gaze_look_away_config": {
      "enable_gaze_look_away": false,
      "max_look_away_offset": {
        "value": 20,
        "unit": "UNIT_DEGREE_ANGLE"
      },
      "min_look_away_interval": {
        "value": 240,
        "unit": "UNIT_FRAME"
      },
      "look_away_interval_range": {
        "value": 60,
        "unit": "UNIT_FRAME"
      }
    },
    "mouth_expression_config": {
      "mouth_expression_multiplier": 1.0
    }
  },
  "endpoint_config": {
    "input_media_config": {
      "audio_input_config": {
        "stream_config": {
          "stream_type": "GRPC"
        },
        "channels": 1,
        "channel_index": 0,
        "layout": "AUDIO_LAYOUT_INTERLEAVED",
        "sample_rate_hz": 16000,
        "chunk_duration_ms": 20,
        "encoding": "AUDIO_ENCODING_RAW",
        "decoder_config": {
          "raw_dec_config": {
            "format": "AUDIO_FORMAT_S16LE"
          }
        }
      }
    },
    "output_media_config": {
      "audio_output_config": {
        "stream_config": {
          "stream_type": "UDP",
          "udp_params": {
            "host": "127.0.0.1",
            "port": "9017"
          }
        },
        "payloader_config": {
          "type": "PAYLOADER_RTP"
        },
        "sample_rate_hz": 16000,
        "chunk_duration_ms": 20,
        "encoding": "AUDIO_ENCODING_RAW",
        "encoder_config": {
          "raw_enc_config": {
            "format": "AUDIO_FORMAT_S16BE"
          }
        }
      },
      "video_output_config": {
        "stream_config": {
          "stream_type": "UDP",
          "udp_params": {
              "host": "127.0.0.1",
              "port": "9019"
            }
        },
        "payloader_config": {
          "type": "PAYLOADER_RTP"
        },
        "encoding": "H264",
        "encoder_config": {
          "h264_enc_config": {
            "idr_frame_interval": 30
          }
        }
      }
    }
  },
  "quality_profile": "SPEECH_LP_QUALITY_PROFILE_LOW_LATENCY"
}

配置选项

  • animation_cropping_mode - 肖像图像裁剪首选项 - ANIMATION_CROPPING_MODE_FACEBOX、ANIMATION_CROPPING_MODE_BLEND、ANIMATION_CROPPING_MODE_INSET_BLEND

  • model_selection - MODEL_SELECTION_PERF 表示性能模式,MODEL_SELECTION_QUALITY 表示质量模式

  • eye_blink_config ⇒ 自定义头像的眨眼行为,例如 blink_frequency 和 blink_duration

  • gaze_look_away_config ⇒ 重定向眼睛看向别处,并指定角度和间隔

  • mouth_expression_config ⇒ 用于夸大嘴部表情的乘数

  • quality_profile ⇒ 基于性能与质量偏好的不同执行模式 - SPEECH_LP_QUALITY_PROFILE_LOW_LATENCY、SPEECH_LP_QUALITY_PROFILE_ULTRA_LOW_LATENCY、SPEECH_LP_QUALITY_PROFILE_HIGH_QUALITY、SPEECH_LP_QUALITY_PROFILE_ULTRA_HIGH_QUALITY

有关配置选项的详细信息,请参阅 A2F-2D 快速入门指南文件浏览器 下的 protos/v1/speech_live_portrait.proto

通过替换 <path_to_lp_config>,在 tokkio-app.yaml 中指定从上述步骤创建的 JSON 文件的路径,如下所示

...
- name: chat-controller
  type: ucf.svc.ace-agent.chat-controller
  parameters:
    imagePullSecrets:
      - name: ngc-docker-reg-secret
  secrets:
    ngc-api-key-secret: k8sSecret/ngc-api-key-secret/NGC_CLI_API_KEY
  files:
    lp_config.json: <path_to_lp_config>
...

按照 集成需要重建的自定义更改 中列出的步骤操作,通过重新部署 Tokkio 工作流程来反映更改。

UI 自定义#

is_rebuild_needed: No

用例

  • 为 Tokkio 使用自定义 UI 布局

UI 当前不是 Tokkio helm chart 的一部分。因此,UI 更改独立于 Tokkio 微服务的其余部分。有关不同的 UI 自定义选项,请参阅 UI 自定义指南

Audio2Face-3D 微服务自定义#

is_rebuild_needed: No

用例

  • 调整头像的面部动画和嘴唇运动

Tokkio 使用 Audio2Face 微服务 来驱动头像的面部动画,包括嘴唇运动。Audio2Face-3D 微服务将头像语音作为输入,并生成面部动画流。面部动画的质量取决于 3D 头像模型及其 blendshape 设置。此外,生成还取决于驱动动画的语音。为了考虑不同的头像资产和不同的语音输入,Audio2Face-3D 微服务公开了一些参数,可以对其进行调整以提高面部动画的视觉质量。

有关各种参数的更多信息,请参阅 Audio2Face-3D 参数调整指南

下面列出的步骤对 LLM RAG Bot 的任何渲染变体都有效,但以单流 OV 渲染 helm chart 为例列出

  1. 从 NGC 下载示例 LLM RAG 工作流程的 helm chart。这是单流 OV 渲染变体的 helm chart 的链接:https://catalog.ngc.nvidia.com/orgs/nvidia/teams/ace/helm-charts/ucs-tokkio-app-base-1-stream-llm-rag-3d-ov

  2. 从下载的 helm chart 文件夹的 values.yaml 中找到要更新的相关代码块。将其复制到一个新的 yaml 文件中。此自定义的相关代码块如下所示。确保复制整个代码块,以便它保留 yaml 文件中的相关路径。以下 Audio2Face-3D 示例配置已针对 ElevenLab 的 Jessica 语音和 Claire 头像模型进行了优化。您可以在更新后使用任何名称保存新文件。例如 my_override_values.yaml

注意

Claire 头像资产未公开提供。请联系您的 NVIDIA 联系人以获取访问权限。

# These parameters are tuned for the Claire avatar asset and ElevenLabs' Jessica voice.

# ...

audio2face-with-emotion:
    configs:
        a2f_config.yaml:
            # ...

            # Model parameters
            a2fModelName: "claire_v1.3"

            # Face parameters
            # Note: All keys must be provided
            faceParams: |
              {
                "face_params": {
                  "input_strength": 1.0,
                  "prediction_delay": 0.15,
                  "upper_face_smoothing": 0.0010000000474974513,
                  "lower_face_smoothing": 0.00800000037997961,
                  "upper_face_strength": 1.7000000476837158,
                  "lower_face_strength": 1.25,
                  "face_mask_level": 0.6000000238418579,
                  "face_mask_softness": 0.008500000461935997,
                  "emotion": [
                    0.30000001192092896,
                    0.0,
                    0.20000000298023224,
                    0.0,
                    0.0,
                    0.0,
                    0.3499999940395355,
                    0.0,
                    0.0,
                    0.0
                  ],
                  "skin_strength": 1.0,
                  "lip_close_offset": 0.05219999700784683,
                  "eyelid_offset": 0.009999999776482582,
                  "source_shot": "cp1_neutral",
                  "source_frame": 10,
                  "blink_strength": 1.0,
                  "lower_teeth_strength": 1.25,
                  "lower_teeth_height_offset": 0.0,
                  "lower_teeth_depth_offset": 0.0,
                  "tongue_strength": 1.3,
                  "tongue_height_offset": 0.0,
                  "tongue_depth_offset": 0.0,
                  "eyeballs_strength": 1.0,
                  "saccade_strength": 0.6,
                  "right_eye_rot_x_offset": 0.0,
                  "right_eye_rot_y_offset": 0.0,
                  "left_eye_rot_x_offset": 0.0,
                  "left_eye_rot_y_offset": 0.0,
                  "blink_interval": 3.0,
                  "eye_saccade_seed": 0,
                  "keyframer_fps": 60.0
                }
              }

            # Emotion parameters
            a2eEnabled: "True"
            a2eEmotionContrast: "1.0"
            a2eLiveBlendCoef: "1.0"
            a2eEnablePreferredEmotion: "True"
            a2ePreferredEmotionStrength: "0.75"
            a2eEmotionStrength: "1.0"
            a2eMaxEmotions: "3"

            # Blendshape parameters
            bsWeightMultipliers: [
                1.0,                 # EyeBlinkLeft
                1.0,                 # EyeLookDownLeft
                1.0,                 # EyeLookInLeft
                1.0,                 # EyeLookOutLeft
                1.0,                 # EyeLookUpLeft
                1.5,                 # EyeSquintLeft
                1.5,                 # EyeWideLeft
                1.0,                 # EyeBlinkRight
                1.0,                 # EyeLookDownRight
                1.0,                 # EyeLookInRight
                1.0,                 # EyeLookOutRight
                1.0,                 # EyeLookUpRight
                1.5,                 # EyeSquintRight
                1.5,                 # EyeWideRight
                1.0,                 # JawForward
                1.0,                 # JawLeft
                1.0,                 # JawRight
                0.75,                # JawOpen
                0.5299999713897705,  # MouthClose
                1.2999999523162842,  # MouthFunnel
                1.5,                 # MouthPucker
                1.0,                 # MouthLeft
                1.0,                 # MouthRight
                0.8999999761581421,  # MouthSmileLeft
                0.8999999761581421,  # MouthSmileRight
                0.5,                 # MouthFrownLeft
                0.5,                 # MouthFrownRight
                0.800000011920929,   # MouthDimpleLeft
                0.800000011920929,   # MouthDimpleRight
                0.800000011920929,   # MouthStretchLeft
                0.800000011920929,   # MouthStretchRight
                1.0,                 # MouthRollLower
                0.5999999642372131,  # MouthRollUpper
                1.0,                 # MouthShrugLower
                1.0,                 # MouthShrugUpper
                1.0,                 # MouthPressLeft
                1.0,                 # MouthPressRight
                1.2000000476837158,  # MouthLowerDownLeft
                1.2000000476837158,  # MouthLowerDownRight
                1.0,                 # MouthUpperUpLeft
                1.0,                 # MouthUpperUpRight
                1.0,                 # BrowDownLeft
                1.0,                 # BrowDownRight
                1.7599999904632568,  # BrowInnerUp
                1.0,                 # BrowOuterUpLeft
                1.0,                 # BrowOuterUpRight
                0.800000011920929,   # CheekPuff
                0.6000000238418579,  # CheekSquintLeft
                0.6000000238418579,  # CheekSquintRight
                0.6000000238418579,  # NoseSneerLeft
                0.6000000238418579,  # NoseSneerRight
                1.0,                 # TongueOut
            ]
            
# ...
  1. 按照 集成无需重建的自定义更改 中列出的步骤操作,以反映已部署的 Tokkio 工作流程中的更改。

渲染器特定自定义#

请参阅 参考工作流程,了解 Omniverse 渲染器、Live Portrait 或 Unreal Engine 及其相关的自定义。

添加新的微服务#

如果需要,您还可以向 Tokkio 添加新的微服务,以自定义您的用例。请参阅 UCS 工具 以创建和构建新的 UCS 微服务。

注意

将微服务添加到 Tokkio 工作流程必须仔细考虑微服务将与之交互的端点。您可以使用 UCS Studio 可视化和连接其他微服务的微服务端点。

将微服务添加到 UCS Studio 中的 Tokkio 图后,按照 集成需要重建的自定义更改 中列出的步骤操作,通过重新部署 Tokkio 工作流程来反映更改。