## 现象 设置页选择 MLX Whisper 并保存成功(`TranscriberConfigManager` 正确落盘,`/api/transcriber_config` 也返回 `transcriber_type: "mlx-whisper"`),但点生成笔记必报"服务器错误"。后端日志: ``` 请求转录器类型: mlx-whisper 创建 MLXWhisperTranscriber 实例: TranscriberType.MLX_WHISPER MLXWhisperTranscriber 创建失败: 必须设置环境变量 TRANSCRIBER_TYPE=mlx-whisper 才能使用 MLX Whisper ``` ## 根因 `app/transcriber/mlx_whisper_transcriber.py` 的 `__init__`: ```python if platform.system() != "Darwin": raise RuntimeError("MLX Whisper 仅支持 Apple 平台") if os.environ.get("TRANSCRIBER_TYPE") != "mlx-whisper": raise RuntimeError("必须设置环境变量 TRANSCRIBER_TYPE=mlx-whisper 才能使用 MLX Whisper") ``` 问题: 1. **守卫读的是环境变量,而转写器选择的 source of truth 是配置文件**(`TranscriberConfigManager`,env 仅作缺省 fallback)。UI 保存的 `mlx-whisper` 不会写进进程环境变量 → 两者永远对不上,UI 路径选 MLX 必然失败。 2. **守卫不对称**:`WhisperTranscriber`/`Bcut`/`Groq`/`快手` 都没有同类检查,唯独 MLX 有。且上一行已经有 `platform.system() != "Darwin"` 的平台守卫,env 检查属于冗余。 3. **对桌面版(PyInstaller)用户是无解的**:冻结环境无法设环境变量,等于 UI 里的 MLX 选项永远点不通。 ## 建议修复 直接删除该 env 检查(平台检查已足够);如确需保留开关语义,应由调用方(`transcriber_provider` 按配置路由)传入,而不是在构造器里读全局环境变量。 ## 桌面版临时绕过 在后端 cwd 放 `.env` 写入 `TRANSCRIBER_TYPE=mlx-whisper`(`main.py` 的 `load_dotenv()` 会加载),守卫即放行。已在 macOS 桌面版 v2.4.5 + 注入 mlx-whisper 0.4.3 的环境实测放行成功。 ## 环境 - BiliNote 桌面版 v2.4.5(macOS arm64,Apple Silicon) - mlx-whisper 0.4.3 / mlx 0.32.4(手工注入验证可用,`mlx_whisper_available: true`)
Activity