装 whisperx 3.3 跑 diarize,执行到加载 pyannote/speaker-diarization-3.1 时抛 401,原文是 Could not download model,本机已经登录过 Hugging Face。
真正麻烦的地方在于,几个原因的现象几乎一样。模型页面的使用协议没有点同意,token 无权拉取;环境变量 HF_TOKEN 写在 .env 里但未被当前进程继承;token 只有 read 权限却建在另一个组织下;本地缓存目录属于 root,当前用户写入被拒后回落成 401。
第一件事是确认进程能读到的 token 是否存在
python -c "import os;k=os.getenv('HF_TOKEN');print(bool(k), (k or '')[:6])"
再往下用 huggingface-cli 直接登录并验证身份
huggingface-cli whoami --token $env:HF_TOKEN
手动下载一次模型确认协议已同意
huggingface-cli download pyannote/speaker-diarization-3.1 --token $env:HF_TOKEN
等前面都确认过,再清掉半截缓存后重新初始化分离流程
python -c "import shutil,os;shutil.rmtree(os.path.expanduser('~/.cache/huggingface/hub/models--pyannote--speaker-diarization-3.1'),ignore_errors=True)"
别只看报错消失,验证要多做一步。分离流程能加载模型并输出带 SPEAKER_00 标记的段落,两小时会议说话人切换次数与实际发言轮次接近。
容易忽略的是,401 在这类私有模型上多数是协议没点同意而不是 token 写错,先去模型页面确认授权状态,再排查环境变量。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
