跳到正文
runningbai
Powered by Pagefind
AI Coding

Open-LLM-VTuber v1.2.1 部署实测:M5 Pro 本地语音对话

在 Apple Silicon M5 Pro 上部署 Open-LLM-VTuber v1.2.1,使用 Ollama、SenseVoiceSmall、Edge TTS 和默认 Live2D 角色跑通真实麦克风语音对话,并记录性能与排障过程。

2026/8/28阿白最后更新: 2026/8/2819 分钟阅读
Open-LLM-VTuber 在 Apple Silicon M5 Pro 上的本地部署实测

这次不只验证“服务能启动”,而是把 Open-LLM-VTuber 的整条语音链路都跑了一遍:实体麦克风收音、SenseVoiceSmall 识别、Ollama 本地大模型回复、Edge TTS 合成中文语音,最后由 Live2D 角色同步播报。

实测机器是 48 GB 内存的 Apple M5 Pro MacBook Pro。最终默认 Mao 角色可以正常显示、说话和做表情,文字聊天、实体麦克风语音聊天与打断也都通过。

这套 Open-LLM-VTuber M5 Pro 配置最终跑通了吗?

跑通了。Chrome 能连接本地服务,默认 Live2D 角色正常加载;说出“我们来测试一下语音聊天”后,语音依次经过 ASR、LLM 和 TTS,角色用中文语音回复并回到空闲状态。

本次实测配置如下:

项目 实测值
实测日期 2026-08-28
macOS 26.6(Build 25G72)
架构 arm64,原生 Apple Silicon
芯片 / 内存 Apple M5 Pro,18 核 CPU / 20 核 GPU,48 GB 内存
Open-LLM-VTuber v1.2.1
Git commit 3afa41014b4548a0842e9ee2f576f4b164b48886
Python CPython 3.10.20,由 uv 管理
uv 0.11.32,aarch64
FFmpeg 9.0.1
Ollama 0.33.0
LLM qwen2.5:latest,下载体积约 4.7 GB,运行占用约 5.7 GB
ASR sherpa-onnx SenseVoiceSmall,CPU 推理
TTS Edge TTS 7.2.8,zh-CN-XiaoxiaoNeural
Live2D 项目自带 mao_pro
Translator 关闭

在 M5 Pro 上部署前需要准备什么?

先确认机器架构和已有工具,缺什么再安装什么:

sw_vers
uname -m
sysctl -n machdep.cpu.brand_string 2>/dev/null || true

git --version
brew --version
python3 --version
uv --version
ffmpeg -version
ollama --version

uname -m 应返回 arm64。这套方案不需要 Rosetta、CUDA、NVIDIA 依赖、Conda、Docker,也不需要重新构建前端。

如果缺少 FFmpeg 或 Ollama,可以通过 Homebrew 安装:

brew install ffmpeg ollama
brew services start ollama

如果 Ollama 已经作为服务正常运行,就不用重复启动。

如何获取 Open-LLM-VTuber v1.2.1 稳定版?

新目录建议递归克隆指定 tag,因为前端通过 Git submodule 集成:

git clone --recursive --branch v1.2.1 \
  https://github.com/Open-LLM-VTuber/Open-LLM-VTuber.git
cd Open-LLM-VTuber

git status
git submodule status

本机实际工作目录是:

/Users/oyjq/Documents/ChatGPT/open-llm-vtuber

如果目录已经存在,先执行 git status。不要直接删除目录、覆盖文件或 reset,避免丢掉已有配置和用户修改。

如何用 uv 安装项目的 Python 环境?

v1.2.1 的 .python-version 指定 Python 3.10,直接让 uv 管理兼容解释器和虚拟环境:

uv sync
uv run python --version

本次得到原生 arm64 CPython 3.10.20,虚拟环境位于项目的 .venv。首次同步还会下载并安装项目依赖,网络较慢时要多等一会儿。

如何准备 Ollama 和 qwen2.5 模型?

先检查本机模型列表和 Ollama API:

ollama list
curl http://localhost:11434/api/tags

没有可用模型时,拉取官方 Quick Start 使用的模型:

ollama pull qwen2.5:latest

本次下载体积约 4.7 GB。在这台 M5 Pro 上,Ollama 显示模型以 100% GPU 方式运行,context 为 32768。第一次正式对话前可以先发一条短请求预热,但不是必需步骤。

Open-LLM-VTuber 的中文配置怎么写?

不要凭记忆重写整份 YAML,直接复制项目自带的中文模板:

cp config_templates/conf.ZH.default.yaml conf.yaml

本次 conf.yaml 与 v1.2.1 中文模板逐字节一致。与首次验证有关的关键配置是:

character_config:
  live2d_model_name: 'mao_pro'

agent_config:
  conversation_agent_choice: 'basic_memory_agent'

  agent_settings:
    basic_memory_agent:
      llm_provider: 'ollama_llm'

  llm_configs:
    ollama_llm:
      base_url: 'http://localhost:11434/v1'
      model: 'qwen2.5:latest'

asr_config:
  asr_model: 'sherpa_onnx_asr'

tts_config:
  tts_model: 'edge_tts'
  edge_tts:
    voice: zh-CN-XiaoxiaoNeural

SenseVoiceSmall 会下载到:

models/sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17

本次模型目录约 1.1 GB。ASR 使用 CPU provider,不要在 Apple Silicon 上照抄 CUDA 配置。

Edge TTS 返回 403 怎么解决?

v1.2.1 原锁文件中的 Edge TTS 7.0.0 在本次验证时返回 HTTP 403。上游也有相同现象的 edge-tts issue #463

只升级这个包,再同步虚拟环境:

uv lock --upgrade-package edge-tts
uv sync

本次升级到 Edge TTS 7.2.8 后恢复正常。升级会修改 uv.lock,并移除旧的 srt 依赖,但不需要改 Open-LLM-VTuber 源码。

为什么本地 Ollama 会被系统代理转发?

本机的 macOS HTTP/HTTPS 代理位于 127.0.0.1:1082。Python HTTP 客户端没有自动采用 macOS 的代理例外列表,访问本地 Ollama 时因此得到 503。

启动服务时显式让 localhost 直连:

NO_PROXY=localhost,127.0.0.1,::1 \
no_proxy=localhost,127.0.0.1,::1 \
uv run run_server.py

这是本机网络环境所需的启动参数,不是项目源码修改。看到服务监听 http://localhost:12393 后,用 Chrome 打开:

http://localhost:12393/

第一次使用时,允许 Chrome 获取麦克风权限。官方文档也特别提醒:如果代理开启后本地 Ollama 无法访问,应确保代理绕过 localhost。

如何验证麦克风到 Live2D 的完整链路?

只看到网页打开还不够,建议按下面的顺序逐层验证,这样出错时更容易定位。

1. 检查页面和 Live2D

  • 页面状态显示“已连接”。
  • 默认 Mao 角色、背景、动作和表情正常加载。
  • moc3、贴图、物理、姿态、8 个表情和 7 个动作资源均返回 200。
  • 没有阻塞使用的 500 或关键资源加载失败。

2. 先测试文字聊天

输入:

你好,请用一句话介绍一下你自己。

确认左侧出现用户消息和 AI 回复,右侧能看到字幕与角色说话动作。文字聊天正常,说明浏览器、后端和 Ollama 基本连通。

3. 单独确认 TTS

需要同时确认:

  • 中文语音能够播放;
  • 多个音频分段按顺序播放,没有重复;
  • 角色说话时有动作和口型音量数据;
  • 播放结束后状态回到“空闲”。

4. 使用实体麦克风

点击左下角麦克风按钮,按钮变绿后说:

你好,今天我们来测试一下语音聊天。

本次 Chrome 识别到核心语句“我们来测试一下语音聊天”,AI 随后返回中文语音,Live2D 同步说话并回到空闲。句首问候被 VAD 截掉,但完整链路已经通过;另一次“听得到吗”被准确识别。

5. 验证打断

在 AI 第一段音频开始后发送新语音。后端日志应记录上一条 conversation 被中断,并启动新的 conversation。已有一小段在途音频可能继续到达,随后会切换到新回复。

M5 Pro 上的实际性能怎么样?

这套默认配置以实时响应为优先。短时测试期间,48 GB 内存没有出现 Swap,也没有观察到持续高 CPU、明显发热或降频。

指标 实测值
空闲服务 RSS 约 6.7 GiB 合计
Python 后端 约 1.10 GiB RSS
Ollama runner 约 5.54 GiB RSS
Ollama serve 约 59 MiB RSS
短语音测试首次可播放音频 约 2.9 秒
短语音测试后端完成 约 3.8 秒
Chrome 实体麦克风本轮完整回复 约 13 秒,回复包含多句话
Python 对话期 CPU 平均约 2.9%,峰值约 9.4%
Ollama runner 对话期 CPU 平均约 28.9%,峰值约 112.1%,约等于 1.1 个 CPU 核
Ollama 处理器 100% GPU
Swap 0
内存压力 正常,约 83% 可用

这组数据只代表本机、当时版本和一次短时对话链路,不应当作跨机器基准。对首次验证来说,当前 4.7 GB 的 qwen2.5 模型响应更轻,不必一开始就换成体积大得多的模型。

实测中还有哪些不阻塞使用的问题?

  1. 前端首次初始化会短暂请求 /undefined/undefined.model3.json 并返回 404,之后仍会加载正确的 mao_pro 资源,角色可以正常出现。
  2. 页面重载或自动化截图切换焦点时,Console 偶尔出现 Canvas is null, skipping resize 和 Live2D 旧实例释放警告。正常交互没有崩溃;如果角色暂时未绘制,点击角色画布或刷新一次即可恢复。
  3. 个别模型回复会把 [smirk] 一类表情标签显示在聊天文本里,但不影响 TTS、字幕、动作和完整语音链路。
  4. 实体麦克风测试中,VAD 截掉了测试句开头。可以在按下麦克风后稍等半秒、靠近麦克风或提高音量,再考虑微调 VAD 阈值。

这些现象都没有阻塞本次“麦克风 → ASR → LLM → TTS → Live2D”的成功标准,因此没有为它们修改上游源码。

以后再次启动需要执行哪些命令?

如果 Ollama 已经作为 Homebrew 服务运行,只需要:

cd /Users/oyjq/Documents/ChatGPT/open-llm-vtuber

NO_PROXY=localhost,127.0.0.1,::1 \
no_proxy=localhost,127.0.0.1,::1 \
uv run run_server.py

然后在 Chrome 打开 http://localhost:12393/

如果 Ollama 没有运行,先执行:

brew services start ollama
curl http://localhost:11434/api/tags

停止 Open-LLM-VTuber 时,在服务器终端按 Control-C。Ollama 可以继续作为后台服务运行。

本次部署修改和下载了什么?

  • conf.yaml:从 config_templates/conf.ZH.default.yaml 复制,内容没有自行改写。
  • uv.lock:Edge TTS 从 7.0.0 升级到 7.2.8,并移除 srt 依赖。
  • 项目源码:未修改。
  • Live2D:使用项目自带默认模型,没有添加第三方角色。
  • Ollama:下载 qwen2.5:latest,约 4.7 GB。
  • ASR:下载 SenseVoiceSmall,约 1.1 GB。
  • 系统软件:通过 Homebrew 安装 FFmpeg 9.0.1 和 Ollama 0.33.0。
  • 没有安装 CUDA、NVIDIA 包、Conda 或 Docker。

Open-LLM-VTuber 在 Apple Silicon 上的常见问题

Apple Silicon 必须安装 Rosetta 吗?

这次不需要。Git、uv、CPython、FFmpeg 和 Ollama 都以 arm64 原生方式运行,uname -m 返回 arm64

M5 Pro 可以完全离线运行吗?

当前组合不能完全离线。Ollama 和 SenseVoiceSmall 在本机运行,但 Edge TTS 需要联网。若要离线,需要把 TTS 也替换为本地方案,并重新验证延迟和音质。

为什么 Ollama API 正常,Open-LLM-VTuber 仍然返回 503?

优先检查系统代理。先用 curl http://localhost:11434/api/tags 验证 Ollama,再用 NO_PROXYno_proxy 明确绕过 localhost127.0.0.1::1

麦克风句首总被截掉怎么办?

先在按钮变绿后等半秒再开口,并靠近麦克风、提高说话音量。如果仍然稳定丢失句首,再小幅调整 VAD 阈值,每次只改一个变量后复测。

这次 Open-LLM-VTuber M5 Pro 部署实测说明了什么?

Open-LLM-VTuber v1.2.1 可以在 Apple Silicon M5 Pro 上用原生 arm64 环境完成真实语音对话。默认的 Ollama、SenseVoiceSmall、Edge TTS 和 mao_pro 组合已经足够验证完整链路,48 GB 内存也有充足余量。

真正影响首次跑通的不是算力,而是依赖和网络细节:Edge TTS 7.0.0 的 403 需要定向升级,系统代理则要显式绕过 localhost。先固定这套可工作的基线,再逐步调整人设、TTS、原创 Live2D、OBS 和弹幕互动,比一次同时替换所有模块更容易定位问题。

参考资料

相关文章

这篇文章有帮助吗?