MaAI ch_kyoto 本机 CPU 基本运行
验证日期：2026-10-13

环境
Apple M4 Mac mini，16 GB 内存，原生 ARM64 Python 3.11.15。
MaAI 0.2.22，PyTorch 2.14.1，PortAudio 19.7.0，PyAudio 0.2.14。
uv 管理独立 .venv 和 uv.lock；PyPI 使用清华镜像。

复跑
cd "/Users/wangx/Code/晓白灵智能打断/experiments/maai-ch-kyoto"
uv run --locked python smoke_run.py

指定录音与时长
uv run --locked python smoke_run.py --audio "/录音绝对路径.mp3" --seconds 22 --threads 4

输入须为双声道：索引 0 用户、索引 1 机器人。脚本读取头部指定时长，重采样至 16 kHz；按两路各 1600 样本（100 毫秒）同步调用 process，不启用麦克风或播放音频。末尾不足 100 毫秒的样本不参与推理。

模型
语言 ch_kyoto，降噪 VAP 权重（vap_mc），原版 CPC 编码器（model_type=normal）。
10 Hz，20 秒滚动上下文，KV cache，device=cpu。
两个权重均存储在 models/，脚本逐次验证 SHA256 后离线加载。
VAP 来源：https://huggingface.co/maai-kyoto/vap_ch_kyoto
VAP 文件：vap_mc_state_dict_ch_kyoto_10hz_20000msec.pt
VAP SHA256：65b8a51aea6a257b5b9139107f0f0cf22f94523cd4b6a2e7a356b6c43a4596a8
CPC 来源：https://dl.fbaipublicfiles.com/librilight/CPC_checkpoints/60k_epoch4-d0f474de.pt
CPC SHA256：d0f474de968c7243c20f43dee1626681618f2f150d3e638e82b79e22563b17f1
下载 VAP 时使用 hf-mirror，已核对官方完整 SHA256；CPC 从官方地址下载，并核对文件名哈希前缀及保存完整 SHA256。

验证结果
录音：2c83253a-7977-4e3c-a387-0aa1ea06fbe1.mp3 前 22 秒。
220 帧输出，所有 p_now / p_future / vad 均为两路有限、0–1 范围数值。
模型加载约 0.083 秒，推理约 1.142 秒，RTF 0.052。
跳过前 5 帧后，平均每帧 5.07 毫秒，P95 5.93 毫秒。
计时不包含录音读取、重采样和模型加载；仅代表该录音的一次离线 CPU 测试。
结果位于 results/smoke.json，包括配置、权重校验、逐帧媒体时间及概率。

输出含义
p_now：两个说话者在未来约 0–0.6 秒的相对活动预测。
p_future：两个说话者在未来约 0.6–2 秒的相对活动预测。
vad：两个说话者当前语音活动概率。
这三个输出均按 [用户, 机器人] 排列，不能直接当作 can_reply 或 EOT 概率。
MaAI 的原始 t 是墙钟时间；脚本另记 audio_end_sec 作为录音媒体时间。

兼容处理
使用本地官方预训练权重，避免自动下载或写入全局模型缓存。
旧 CPC 权重含 argparse.Namespace，脚本仅在构造模型时通过 safe_globals 允许该类型，保持 PyTorch weights_only 安全加载。
依赖恢复可用 uv sync --locked。新机器需先 brew install portaudio；构建 PyAudio 必要时添加：
CFLAGS="-I/opt/homebrew/opt/portaudio/include" LDFLAGS="-L/opt/homebrew/opt/portaudio/lib" uv sync --locked
