自定义参考工作流程#
参考工作流程 部分中描述的参考工作流程为 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 为例列出
从 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。
从下载的 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"
要使用 OpenAI 作为 LLM 端点(而不是默认的 NIM 端点),请设置 USE_OPENAI: true。
要使用 RAG 管线和自定义 RAG 部署 URL,请更新 USE_RAG: true 和 RAG_SERVER_URL: http://IP:PORT。
要更改用作 LLM 端点的 NIM 或 OpenAI 模型,请通过指定 NIM_MODEL 或 OPENAI_MODEL 的值来相应地更新选择。
注意
确保所选 LLM 模型或 RAG 端点的响应格式与 LLM RAG Bot 的开箱即用实现兼容。如果不是,则需要从下载的源文件中更新 rag.py,以适应所需的请求/响应格式。LLM RAG 资源的源代码和实现细节在此处提供:此处。
按照 集成无需重建的自定义更改 中列出的步骤操作,以反映已部署的 Tokkio 工作流程中的更改。
头像和场景自定义#
is_rebuild_needed: No
用例
在 Tokkio 部署的 UI 中显示的自定义头像/场景
Tokkio 使您能够使用 头像配置器 自定义头像,或者,您可以按照自定义头像指南导入第三方头像。有关更多信息,请参阅 头像自定义 部分。
请注意,有多种 替代方法 上传头像场景。
本文档描述了如何使用 NGC 资源下载器 将 ACE 头像场景上传到 NGC,以及如何更新 UCS 配置以引用这些新场景文件。这些说明适用于自定义头像场景和使用头像配置器创建的场景。
下面列出的步骤对 LLM RAG Bot 的任何渲染变体都有效,但以单流 OV 渲染 helm chart 为例列出
从 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。
从下载的 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>"
按照 集成无需重建的自定义更改 中列出的步骤操作,以反映已部署的 Tokkio 工作流程中的更改。
头像语音自定义(Nvidia Riva TTS)#
is_rebuild_needed: No
用例
使用 Riva TTS(Tokkio 的默认配置)时,为自定义头像选择语音选项
Tokkio 使用户能够通过 Riva TTS 配置轻松自定义头像语音。有关选择可用性的更多信息,请查看 Riva TTS。
下面列出的步骤对 LLM RAG Bot 的任何渲染变体都有效,但以单流 OV 渲染 helm chart 为例列出
从 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。
从下载的 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
按照 集成无需重建的自定义更改 中列出的步骤操作,以反映已部署的 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 为例列出
从 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。
从下载的 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>"
按照 集成无需重建的自定义更改 中列出的步骤操作,以反映已部署的 Tokkio 工作流程中的更改。
禁用用户注意力#
is_rebuild_needed: No
用例
禁用 Bot 仅在用户直接看向摄像头时才响应用户查询的行为。
下面列出的步骤对 LLM RAG Bot 的任何渲染变体都有效,但以单流 OV 渲染 helm chart 为例列出
从 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。
从下载的 helm chart 文件夹的 values.yaml 中找到要更新的相关代码块。将其复制到一个新的 yaml 文件中。此自定义的相关代码块如下所示。确保复制整个代码块,以便它保留 yaml 文件中的相关路径。要禁用用户注意力,请在代码块中将 enableUserAttention 标志设置为 false,如下所示。您可以在更新后使用任何名称保存新文件。例如 my_override_values.yaml。
ace-agent-chat-engine: enableUserAttention: "false"
按照 集成无需重建的自定义更改 中列出的步骤操作,以反映已部署的 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.yaml
和 app-params.yaml
对于 Tokkio 而言是 tokkio-app.yaml
和 tokkio-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_BLENDmodel_selection
- MODEL_SELECTION_PERF 表示性能模式,MODEL_SELECTION_QUALITY 表示质量模式eye_blink_config
⇒ 自定义头像的眨眼行为,例如 blink_frequency 和 blink_durationgaze_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 为例列出
从 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。
从下载的 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
]
# ...
按照 集成无需重建的自定义更改 中列出的步骤操作,以反映已部署的 Tokkio 工作流程中的更改。
渲染器特定自定义#
请参阅 参考工作流程,了解 Omniverse 渲染器、Live Portrait 或 Unreal Engine 及其相关的自定义。
添加新的微服务#
如果需要,您还可以向 Tokkio 添加新的微服务,以自定义您的用例。请参阅 UCS 工具 以创建和构建新的 UCS 微服务。
注意
将微服务添加到 Tokkio 工作流程必须仔细考虑微服务将与之交互的端点。您可以使用 UCS Studio 可视化和连接其他微服务的微服务端点。
将微服务添加到 UCS Studio 中的 Tokkio 图后,按照 集成需要重建的自定义更改 中列出的步骤操作,通过重新部署 Tokkio 工作流程来反映更改。