技术合作

MOSS-VL-Realtime 实时交互全链路:SGLang-Omni 特化推理 × 全栈 Realtime Demo

将 MOSS-VL-Realtime 模型权重直接跑成浏览器端实时视频通话,整条链路完全开源。特化推理后端以常驻请求服务每路会话,支持多路并发、水平扩展与滑动窗口画面记忆,单卡实测生成速度 90.26 tokens/s。配套 Demo 集成浏览器界面、SenseVoice 语音识别与长期记忆,三步命令即可部署。


一条完全开源的链路,就能把 MOSS-VL-Realtime 从模型权重直接跑成浏览器里的实时视频通话。

我们在 MOSS-VL 仓库的额外支持库 中开源了两块关键拼图:

  • sglang-omni —— 专为实时互动打造的推理后端,让多人同时和模型视频通话也能保持流畅;
  • realtime-demo —— 一个开箱即用的完整应用,包含浏览器界面、语音输入输出和长对话记忆。

两者对接,就构成了从浏览器一路打通到 GPU 的完整链路。

一条链路,三个组件

整条链路由三个开源部分组成:

MOSS-VL-Realtime 实时交互全链路:浏览器前端 × FastAPI 会话网关 × SGLang-Omni 推理后端

SGLang-Omni 特化后端:多人同时用也流畅

如果说 Demo 是用户看到的样子,SGLang-Omni 特化后端就是让这一切流畅跑起来的引擎。它是我们围绕 MOSS-VL-Realtime、在 SGLang-Omni 基础上深度改造的推理框架:把每一路视频通话当作一条常驻的推理请求来服务,并围绕它构建了一套完整的实时服务方案。

部署时只需配置好 SGLang 格式的模型权重路径即可启动。

多人同时聊,互不打扰

实时视频通话的难点,不只是回答快,而是很多人同时用的时候还得快。后端允许多路会话同时在线,每一路的画面和对话上下文彼此独立、互不干扰。

当同时在线的人数达到上限,新加入的会话会收到明确的“已满”提示并礼貌退出,而不是把所有人的体验一起拖慢。

显存吃紧时,后端会主动“劝退”最占资源的那一路会话,保住其余会话的正常使用——就像满员的餐厅先请买完单的客人让座。

而你发来的画面和问题永远被优先处理,不会因为别人正在说话就被卡住;网络抖动时服务端也有缓冲兜底,不会悄悄丢帧。

从一张卡到多张卡,算力可以水平扩展

模型一张显卡放不下?可以拆到多张卡上协同推理。想服务更多用户?可以多开几个相互独立的实例副本,新会话会自动分配到最空闲的那一个,只有所有副本都满员时才需要排队。

两张显卡、每张各服务 4 路会话,只需一行命令:

两路单卡 DP 副本示例

python examples/run_moss_vl_realtime_server.py \
  --model-path $MODEL_PATH \
  --dp-size 2 --gpus 0,1 \
  --max-running-requests 4

回答的生成过程默认开启底层加速,把逐字生成的开销降到最低。服务启动前还会先做一次“热身”,让第一个连进来的用户不必等待漫长的初始化。

聊得再久也不怕:画面的记忆像一扇滑动窗口

视频画面会随对话不断累积,这是长会话最大的资源瓶颈。后端的办法是一扇“滑动窗口”:默认只保留临近的画面,更早的及时释放,而聊天的文字与语义完整保留——模型仍然记得刚聊了什么,只是不再为旧画面持续买单。

实际有多快?实测数据

我们在单张 NVIDIA H200 显卡上做了系统测试。相比模型自带的参考实现,同样是一路会话,特化后端的表现:

指标HuggingFaceSGLang-Omni提升
提问后看到第一个字的等待时间91.77 ms33.57 ms2.73×
生成每个字的耗时52.05 ms11.08 ms4.70×
生成速度19.21 tokens/s90.26 tokens/s4.7×

多人同时用呢?画面按每秒 1 帧持续输入、不做限速的情况下,从 1 路到 8 路会话(默认推荐 4 路)的表现都能保持在线:

并发会话数首字平均等待单字平均耗时平均每路生成速度
1512.5 ms16.95 ms59.0 tokens/s
4548.9 ms21.43 ms47.8 tokens/s
8728.1 ms39.03 ms25.6 tokens/s

Realtime Demo:打开网页就能用的完整应用

推理后端解决的是“算得快”的问题;要让用户真正聊得起来,还需要界面、语音和记忆。Realtime Demo 把这些一次备齐——它不是一个演示片段,而是一个可以直接部署使用的完整应用。

背后的服务会把这些能力编排成一条流水线:听清你说的话,看懂你展示的画面,组织好回答再用语音播报出来,全程自动完成。

浏览器前端:发起一个视频通话

浏览器前端界面

不需要安装任何软件,打开网页就能用。你可以给模型看任何正在发生的事:

  • 打开摄像头,和模型“面对面”交谈;
  • 共享屏幕,让它看看你正在做的事;
  • 直接发送图片或视频文件。

模型的回答会像字幕一样逐字流出;说到一半,随时可以打断追问。想开口说话时按住即可,也支持自动检测人声、说完自动发送。

网络不太稳也不用担心:断线重连后,错过的内容会自动补发回来;45 秒内刷新页面,对话上下文都还在,接着聊就可以。

Memory 机制:让实时助手记得“昨天聊过什么”

实时对话里,画面和聊天内容会不断累积。如果全部保留,很快就会顶到模型能承载的上限——这正是实时助手“聊得越久越容易撑不住”的根源。

Demo 的方案是一套组合拳:画面用滑动窗口控制规模,文字沉淀为长期记忆,需要时自动检索回来

画面上,系统只保留最近一段时间的原始内容,更早的及时释放。模型依然记得刚聊过什么,只是不再为早已过去的画面持续付出成本;

文字上,对话内容会沉淀为长期记忆。要不要调用记忆,由系统根据你的每轮提问自动判断——随口一句“我上次说到哪儿了”,相关内容就会被自动找回来;普通闲聊则不会被打扰。

对话变长后,系统会按阈值自动把早前内容压缩成摘要,让对话一直继续下去。除此之外,也可以随时用两个指令手动管理当前会话:

  • /compact —— 手动把上下文压缩成摘要,轻装续聊。压缩不是遗忘:如下图,模型依然能准确答出压缩之前聊过的内容。

执行 /compact 压缩后,模型仍能答出压缩前聊过的内容

  • /clear —— 一键清空上下文,效果如同新开一个会话。再问起此前的内容,模型会如实告诉你没有更早的记录,如下图。

执行 /clear 清空上下文后的表现

这套“沉淀 + 检索”的机制是否可靠,可以直接验证——完整流程如下(对应下面两张截图):

  • 下达记忆:对话刚开始时让模型记住数字 011202,模型回复确认已记住;

下达记忆:让模型记住数字 011202

  • 正常闲聊:随后围绕画面正常聊了约三分钟;
  • 压缩上下文:执行 /compact 把上下文压缩成摘要,此刻那段对话原文已经不在模型的上下文里;
  • 提问召回:再问“我之前让你记住的数字是什么”,系统自动判断需要查询长期记忆,弹出“回忆起 1 条记忆”的提示和对应记忆卡片,模型据此准确答出 011202。

提问召回:系统回忆起 1 条记忆,模型准确答出 011202

语音输入输出:能听懂,也会开口

你说话,由开源语音识别模型 SenseVoice 实时转成文字——它只跑在 CPU 上就能工作,字幕大约每秒刷新一次。收音方式有两种,可以随时切换:

  • VAD 自动检测:检测到你开口就开始收听,全程解放双手;
  • 手动按住说话(PTT):在嘈杂环境或需要精确控制发言时机时更可靠。

整个模块采用可插拔设计,未来换上更快更准的流式识别引擎,只需替换一个组件。

回答的语音播报支持本地与云端两类方案,可以自由切换:

类别可选方案
本地部署MOSS-TTS-Nano、Fun-CosyVoice3-0.5B、MOSS-TTS-Realtime,全部本地运行,并支持用一段样例音频克隆音色
云端 APIElevenLabs、MiniMax,配置 API Key 即可接入

默认配置使用本地语音合成,不需要任何云端账号,就能完整体验语音对话。

一键部署,跑通整条链路

完整的体验不需要逐组件手动拼装。Realtime Demo 提供一键安装器,从环境体检到拉起服务只需三步:

bash bootstrap.sh --doctor-only                          # 环境体检
bash bootstrap.sh --with-memory --with-asr --with-tts    # 安装全量组件
.venv/bin/python scripts/repro/run.py up --main-gpu 0 --memory-gpu 1   # 一键拉起

硬件与部署要求:

  • 完整体验推荐两张 GPU——一张跑主模型,一张跑记忆模块;只有一张卡也没关系,可以只开视频和文字交互;
  • 语音识别与语音合成只占用 CPU,不需要额外显卡;
  • 需要 Linux 系统与较新的 NVIDIA 驱动;安装器自带状态检查和冒烟测试,方便确认一切就绪。

开始你的 MOSS-VL 实时之旅

从一键安装到浏览器里的实时视频通话,从多人并发的流畅体验到跨越长对话的记忆——这条从模型到应用的完整链路,现在全部开源。

third_party 里还收录了两个配套项目:为 MOSS-VL 跨模态注意力定制的 FlashAttention-3 加速模块,以及支持 MOSS-VL 离线批量推理的主线 SGLang(已合入官方版本,可直接使用)。

后续我们还会进一步开放对外服务:实时链路的 API 接口 和在线 Playground——届时无需自备 GPU,打开网页或调用接口就能体验实时互动,敬请期待。

相关资源