parlor
在本地 Mac/PC 上实现实时语音+视觉对话的端侧多模态 AI 应用
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
在本地 Mac/PC 上实现实时语音+视觉对话的端侧多模态 AI 应用
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你在学英语,想找一个能24小时陪你练习口语的语伴。传统方案是找外教——贵、难约、有时差。而 Parlor 给出的答案是:把你的 Mac 电脑变成一个会听、会看、会说话的多模态 AI 助手,你说什么它就回应什么,全程运行在本地,数据不离开你的机器。
这不是 PPT 里的概念产品。Parlor 是一个真实可运行的 Python 项目,作者 fikrikarim 将其定位为研究预览版(Research Preview),放在 GitHub 上开源。他最初的动机很朴素:自己在家里搭了一套免费语音 AI 服务来帮人学英语,用户量每月几百人,如何在保持免费的同时让它持续运营?答案就是——把 AI 完全搬到用户本地,彻底省掉服务器费用。
Parlor 的技术架构分为三个核心层,每一层都经过精心的技术选型:
前端:浏览器 + WebSocket
前端是一个纯 HTML/CSS/JS 的 Web 界面,运行在 FastAPI 服务器上。用户只需在浏览器中打开 localhost:8000,授予摄像头和麦克风权限,就能开始对话。浏览器端集成了 Silero VAD(Voice Activity Detection)实现免按键语音检测(hands-free),以及摄像头 JPEG 帧实时捕获,通过 WebSocket 将音频 PCM 和图像数据发送给后端。
后端:FastAPI + WebSocket 实时推理引擎
后端是 FastAPI 应用,通过 WebSocket 与浏览器保持双向流式通信。接收到音频和图像后,交给两个核心推理引擎:
litert_lm Python 库加载模型,模型文件(约 2.6GB)首次运行自动从 HuggingFace 下载。值得注意的是,Parlor 实现了 Barge-in(打断能力):用户随时可以开口打断 AI 的回复,AI 会立即停止当前语音,重新响应新输入。这模仿了真实对话中的自然交互节奏。
推理策略:句子级 TTS 流式输出
Parlor 采用了句子级流式推理策略:后端将 LLM 回复的文本按句子切分(以 .!? 标点为界),每生成一个完整的句子,立即触发 TTS 推理,并将生成的音频片段通过 WebSocket 推送回前端,前端立即开始播放。这意味着用户可以在 AI 完全生成完整回复之前就开始听到声音,响应延迟大幅降低。
Parlor 的代码量相当精简,核心文件只有 4 个:
server.py(约 200 行):FastAPI 应用主体,包含 WebSocket 端点、模型加载逻辑(lifespan 上下文管理器)、句子切分正则、流式响应逻辑、Tool Call 处理(通过 closure 捕获 respond_to_user 工具结果)。tts.py(约 100 行):跨平台 TTS 后端抽象,定义了统一的 TTSBackend 接口,两个子类 MLXBackend(Apple Silicon)和 ONNXBackend(Linux),根据平台自动选择。index.html:完整的 Web UI,单文件实现(约 500 行),包含状态机管理(listen → process → speak → loading)、CSS 动画(动态 radial glow 效果)、WebSocket 客户端逻辑。pyproject.toml:依赖管理,精确限制 Python 版本为 >=3.12,<3.13,这是因为 litert-lm 对 Python 版本有严格要求。整个项目还有一个 artifacts/ 目录存放开发过程中的技术调研文档(benchmarks、架构思考、TTS 对比等),体现了作者做决策时系统性的思考路径。
Parlor 的代码质量不错,但部署门槛不低:
没有 Dockerfile 或 docker-compose,无法在服务器上容器化部署。这与项目的端侧 AI 定位完全一致——它本身就面向有特定硬件的用户,而非通用服务器场景。
Gemma 4 E2B 原生支持多语言,这意味着无论用户用英语、中文还是其他语言说话,Parlor 都能理解并用相应语言回应。对于语言学习场景,用户可以先用母语建立信心,再逐步过渡到目标语言。README 特别提到:Imagine a few years from now that people can run this locally on their phones。作者对未来在手机端运行多模态端侧 AI 充满期待。
1. 硬件门槛过高:Gemma 4 E2B 的量化版本对 Apple Silicon M3 Pro 可以实时运行,但 M1/M2 用户可能遇到性能瓶颈;没有 GPU 的用户完全无法使用。
2. Python 版本锁死:要求 Python 3.12,不支持 3.13,对于追求新版本的用户来说需要单独维护环境。
3. 模型能力受限:Gemma 4 E2B 是一个小型模型(约 2B 参数),无法完成 Agent 级别的复杂任务,README 明确提到 Sure you cannot do agentic coding with this。它的强项是口语化的多模态对话,而非编程辅助。
4. 无容器化支持:无法通过 Docker 快速部署,限制了它的可移植性。
Parlor 是端侧多模态 AI 的一个极具前景的实验,它在消费级硬件(M3 Pro MacBook)上实现了开口说话 → AI 回应 → 语音回复的完整实时对话链路,是语言学习、个人助手等场景的一个有趣方向,但目前硬件要求高、Python 版本受限、无法容器化,更适合有 Apple Silicon Mac 或 NVIDIA GPU 的开发者尝鲜。