Parlor On-Device AI 是一个实时、完全在设备本地运行的多模态 AI 助手。它将 Gemma 4 E2B(通过 LiteRT-LM)用于语音与视觉理解,配合 Kokoro TTS 进行语音输出。所有处理都在本地完成,不需要 API 密钥,不进行云端调用,也没有按请求计费。
用途
Parlor 面向需要本地实时语音与视觉交互的场景。用户可以通过麦克风说话、通过摄像头提供画面,AI 在本地理解语音和视觉内容后以语音回应。由于完全本地运行,适合对隐私、离线可用性或零调用成本有要求的用途。
主要能力
- 多模态理解:Gemma 4 E2B 通过 LiteRT-LM 同时处理语音和视觉输入。
- 本地语音输出:Kokoro TTS 生成语音,平台感知地选择后端——Apple Silicon 使用 MLX,Linux 使用 ONNX。
- 浏览器端 Silero VAD:实现免按键(hands-free)交互,无需按住说话。
- 打断(Barge-in):用户可在 AI 说话中途插话打断。
- 句子级 TTS 流式输出:在完整回复生成前就开始播放音频。
- WebSocket 通信:浏览器与 FastAPI 服务器之间通过 WebSocket 传输音频 PCM 和 JPEG 帧,并流式返回音频块。
架构
浏览器(麦克风 + 摄像头)通过 WebSocket 发送音频 PCM 和 JPEG 帧到 FastAPI 服务器;服务器使用 Gemma 4 E2B(LiteRT-LM,GPU)理解语音和视觉,再用 Kokoro TTS(Mac 上 MLX,Linux 上 ONNX)生成语音;音频块通过 WebSocket 流式返回浏览器进行播放和转录显示。
使用方式
环境要求:Python 3.12+;macOS Apple Silicon 或带受支持 GPU 的 Linux;约 3 GB 可用内存;uv 包管理器。
安装与运行:
git clone https://github.com/fikrikarim/parlor.git cd parlor
Install uv if needed
curl -LsSf https://astral.sh/uv/install.sh | sh
cd src uv sync uv run server.py
然后打开 http://localhost:8000,授予摄像头和麦克风权限,即可开始对话。模型会在首次运行时自动下载(Gemma 4 E2B 约 2.6 GB,另加 TTS 模型)。
配置:可在运行前设置环境变量。MODEL_PATH 用于指定本地 .litertlm 模型文件路径(默认从 HuggingFace 自动下载);PORT 用于修改服务器端口(默认 8000)。
项目结构:src/ 下包含 server.py(FastAPI WebSocket 服务器 + Gemma 4 推理)、tts.py(平台感知 TTS)、index.html(前端 UI,含 VAD、摄像头、音频播放)、pyproject.toml(依赖)以及 benchmarks/(bench.py 端到端 WebSocket 基准测试,benchmark_tts.py TTS 后端对比)。
关键组件:server.py 处理两个 WebSocket 连接,一个接收浏览器音频/视频,一个流式返回音频。tts.py 根据平台选择 Kokoro TTS 后端,并支持句子级流式合成。Gemma 4 E2B 通过 LiteRT-LM 进行推理,未设置 MODEL_PATH 时自动下载模型。
基准测试:可在 src 目录下运行 uv run benchmarks/bench.py(端到端 WebSocket 延迟基准)和 uv run benchmarks/benchmark_tts.py(对比 MLX 与 ONNX 的 TTS 后端)。
性能参考(Apple M3 Pro):语音 + 视觉理解约 1.8–2.2 秒;响应生成(约 25 tokens)约 0.3 秒;文本转语音(1–3 句)约 0.3–0.7 秒;端到端总计约 2.5–3.0 秒。GPU 解码速度约 83 tokens/秒。
常见用法:可修改 server.py 中的系统提示词来改变 AI 的角色或任务;可在 tts.py 中设置 lang_code 为 Kokoro 支持的其他语言(如 'a' 美式英语、'b' 英式英语、'e' 西班牙语、'f' 法语、'z' 中文、'j' 日语);可在 index.html 中调整 Silero VAD 灵敏度(如 positiveSpeechThreshold、negativeSpeechThreshold、minSpeechFrames);也可通过 WebSocket 客户端以编程方式发送音频帧。
适用场景
适合需要本地实时语音与视觉交互、注重隐私或希望避免云端调用成本的场景。由于支持摄像头输入和语音对话,可用于语言辅导等交互式应用(资料中给出了语言导师系统提示词示例)。
限制与注意事项
- 需要 Python 3.12+,仅支持 macOS Apple Silicon 或带受支持 GPU 的 Linux。
- 需要约 3 GB 可用内存,首次运行需下载约 2.6 GB 的 Gemma 4 E2B 模型及 TTS 模型。
- 浏览器必须通过 http://localhost 访问(不能用 IP 地址),否则浏览器会阻止媒体 API。
- Linux 上 TTS 需要安装 onnxruntime 或 onnxruntime-gpu。
- 若延迟高,需确认 GPU 被使用(Mac 的 Metal 或 Linux 的 CUDA),关闭其他占用 GPU 的应用,Linux 上确认 CUDA 驱动与 onnxruntime-gpu 版本匹配。
- 端口被占用时可修改 PORT 或终止现有进程。
- uv sync 失败时需确认 Python 版本为 3.12+。
- 资料未提供收费、价格或商业授权信息。