Azure Web App部署Orchestrator机器人时报vocabulary无UNK token错误求助
排查方向与解决方案
- 文件编码问题
本地开发环境(多为Windows)的vocab.txt可能保存为UTF-8带BOM格式,或其他非标准编码,部署到Linux环境的Azure Web App后,读取时编码解析异常,[UNK]标识会被识别为乱码无法匹配。
排查操作:SSH进入Web App,执行cat vocab.txt | grep UNK确认输出的[UNK]是否正常显示,执行file -i vocab.txt检查文件编码是否为无BOM的UTF-8,编码异常则转码后重新部署即可。 - 大小写匹配问题
Windows文件系统不区分大小写,而Linux环境的Azure Web App严格区分大小写。即使你确认tokenizer_config.json的unk_token配置和vocab.txt中的值一致,也要核对字符大小写完全匹配,比如config中写的[unk]/[Unk]和vocab中的[UNK]在本地不会报错,部署后就会触发校验失败。 - 依赖包版本不一致问题
本地安装的botbuilder-ai-orchestrator包版本和部署后Azure Web App环境安装的版本不匹配,若package.json中使用了^/~等允许自动升版的版本标识,部署时会安装最新版,新版本的UNK校验逻辑和旧版本不兼容也会触发该报错。
排查操作:本地执行npm list botbuilder-ai-orchestrator查看本地版本,SSH进入Web App执行相同命令对比版本,不一致则在package.json中固定该包的版本为本地使用的版本,重新发布即可。 - 工作目录匹配问题
若你配置的ModelFolder、VocabFile为相对路径,Azure Web App的Node.js进程启动时的工作目录默认不是wwwroot文件夹,可能导致Orchestrator加载vocab文件时读取到错误路径下的无效文件,即使配置的路径触发找不到文件的报错也不代表加载的vocab是你预期的文件。
排查操作:代码中新增日志打印process.cwd()和VocabFile的绝对路径,确认路径完全匹配你上传的vocab.txt文件路径。 - 部署文件完整性问题
若你使用zip部署、CI/CD流水线部署,可能出现文件传输截断,vocab.txt没有完整上传,[UNK]标识所在的行丢失。排查操作:SSH进入Web App执行wc -l vocab.txt对比本地相同文件的行数,确认文件完整上传。
内容的提问来源于stack exchange,提问作者Marcel Dillen
相关产品推荐
相关产品推荐

