临床ASR飞轮设置Skill "digital-health-clinical-asr-setup"

用于临床语音识别评估飞轮的第一阶段环境搭建。该技能验证NVIDIA_API_KEY的有效性、安装Python依赖并执行Magpie TTS到Parakeet ASR的冒烟测试,确保用户能够访问NVIDIA托管的语音服务,为后续临床术语合成与评估做准备。强调安全性(不外泄密钥、不处理真实PHI)并明确数据外发合规。关键词:临床ASR、KER、NVIDIA_API_KEY、Magpie TTS、Parakeet ASR、NVCF、环境搭建、冒烟测试、技能引导。

临床语音 0 次安装 0 次浏览 更新于 9/7/2026

临床ASR飞轮 — 第一阶段(设置)

智能体:此文件是完整的第一阶段流程。 不要寻找安装脚本或隐藏配置——没有。四个部分(出站数据披露、三个编号检查、同级交接)均为必读。函数ID、环境变量约定和冒烟测试门控都内嵌在后面——请根据本文实际内容回答。

第一阶段的目标:证明用户可以使用其当前持有的NVIDIA_API_KEY访问NVIDIA托管的语音栈。一旦一个临床句子成功通过Magpie TTS → Parakeet/Nemotron ASR往返,用户即可进入/digital-health-clinical-asr-build

四阶段飞轮用于降低临床实体(药物、手术、解剖、病情、化验、角色)的KER(关键词错误率)。WER平均值会掩盖临床上有害的失败;KER是第三阶段的衡量指标。

本技能没有脚本安装器——不是install.shsetup.py或任何隐藏文件。第一阶段就是三个步骤:验证密钥、安装Python依赖、运行冒烟测试。任何超出第一阶段的内容由兄弟技能组合。

出站数据流——在任何文本或音频发送前声明

两个外部端点会接收数据。用户必须根据组织的数据治理策略确认。在你的回复中逐字渲染下表:

服务 发送内容 时间 托管方
NVIDIA NVCF (grpc.nvcf.nvidia.com) 合成的临床句子(文本)和需要转写的WAV(音频) 每次TTS/ASR调用 NVIDIA,受build.nvidia.com条款约束
Merriam-Webster (dictionaryapi.commerriam-webster.com) 个体临床术语 第二阶段IPA标注 Merriam-Webster,受其条款约束

数据是合成的,不要输入真实患者数据或PHI。任一外部端点均可关闭:

  • 跳过Merriam-Webster:不设置DICTIONARY_API_KEY,回退到Magpie G2P。
  • 跳过NVCF:会导致本工作流无法适用(需要自托管方案)。

目的

让新环境做好进入第二阶段的准备:密钥存在、依赖可导入、托管栈有响应。并说明下一步技能。

何时使用

激活场景:“搭建临床ASR飞轮”、“初始化临床ASR评估”、“准备运行飞轮”。不要用于已有清单计分或环境搭建需要进入build阶段。

先决条件

  • NVIDIA_API_KEY(必需)
  • Python ≥ 3.10
  • nvidia-riva-client, pandas, soundfile, requests
  • DICTIONARY_API_KEY(可选)
  • jiwer(可选)
  • 阶段4所需环境延迟到后续阶段

说明

本技能执行只读环境检查,不做系统修改。

1a. 验证NVIDIA_API_KEY(仅长度,永不回显值)

test -n "$NVIDIA_API_KEY" && echo "NVIDIA_API_KEY len=${#NVIDIA_API_KEY}"

长度为70+正常,不要打印密钥。可将export加入shell rc。

1b. 安装Python依赖

python3 -m venv .venv && source .venv/bin/activate && pip install nvidia-riva-client pandas soundfile requests

1c. 冒烟测试托管NVCF栈

密钥处理规则: 通过显式函数参数传入,永不echo/print/记录密钥值,不读取env。

import wave, tempfile, riva.client

NVCF_HOST = "grpc.nvcf.nvidia.com:443"
MAGPIE_FUNCTION_ID = "877104f7-e885-42b9-8de8-f6e4c6303969"
PARAKEET_FUNCTION_ID = "d3fe9151-442b-4204-a70d-5fcc597fd610"

def auth_for(function_id, api_key):
    return riva.client.Auth(use_ssl=True, uri=NVCF_HOST, metadata_args=[["function-id", function_id], ["authorization", f"Bearer {api_key}"]])

def smoke_test(api_key):
    # TTS
    tts = riva.client.SpeechSynthesisService(auth_for(MAGPIE_FUNCTION_ID, api_key))
    pcm = b"".join(c.audio for c in tts.synthesize_online(text="The patient was prescribed cefazolin.", voice_name="Magpie-Multilingual.EN-US.Mia", language_code="en-US", sample_rate_hz=16000))
    with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f:
        with wave.open(f, "wb") as w:
            w.setnchannels(1); w.setsampwidth(2); w.setframerate(16000); w.writeframes(pcm)
        wav_path = f.name
    # ASR
    asr = riva.client.ASRService(auth_for(PARAKEET_FUNCTION_ID, api_key))
    with open(wav_path, "rb") as f:
        audio_bytes = f.read()
    config = riva.client.RecognitionConfig(encoding=riva.client.AudioEncoding.LINEAR_PCM, sample_rate_hertz=16000, language_code="en-US", max_alternatives=1, enable_automatic_punctuation=True)
    response = asr.offline_recognize(audio_bytes, config)
    transcript = response.results[0].alternatives[0].transcript if response.results else ""
    print(f"TTS:  The patient was prescribed cefazolin.")
    print(f"ASR:  {transcript}")
    return transcript

运行冒烟测试不能延迟。如果转录匹配,进入第二阶段。失败按错误代码排查。

1d.(可选)验证Merriam-Webster

路径A检查DICTIONARY_API_KEY;路径B检查站点可达性。

示例

  • 新用户环境:先展示披露表,再依次执行1a→1b→1c;成功后引导至/digital-health-clinical-asr-build
  • 老用户环境:只做1a和1c。

产物

导出的NVIDIA_API_KEY、激活的venv和包含riva-client等依赖、一次成功的TTS→ASR往返。

故障排除

  • len=0:未导出。
  • 401:密钥错误/过期。
  • function not found:函数ID过期,去build.nvidia.com更新。
  • 其他常见错误包括参数变更、依赖未安装、NVCF侧故障等,均对应处理。

限制

仅环境就绪范围;假定Magpie英语;仅合成数据;假定托管NVCF。

下一步

成功时必须指引用户到/digital-health-clinical-asr-build,并点名KER为第三阶段主要指标。

参考

references/dependency-ownership.md