面向Google编程CHARLES ZHANG

AI DAILY / 2026-09-09

Omni-Interaction-Agent:开源全双工音视频协作代理

Omni-Interaction-Gander/Omni-Interaction-Agent

Agent 开发GitHub · 2026-09-07

全文中文翻译 · AI 生成,仅供学习交流

Omni-Interaction-Gander/Omni-Interaction-Agent

它把自然语音聊天、原生全双工交互(full-duplex)和持续多模态感知统一在一起,因此你可以在工作进行的同时说话、插话,或者分享屏幕。

Gander 专为口语协作训练,兼具自然、富有表现力的对话能力,以及具有竞争力的知识与指令跟随表现。它的小脑-大脑(Cerebellum-Brain)架构将一个能干的流式对话模型与一个异步推理智能体配对,让响应式交互与长时间任务执行可以发生在同一段对话中。

自然对话,学到的交互。

轮流发言(turn-taking)、反馈语(backchannels)、重叠处理、插话(interruption)以及主动回应,都是学到的模型行为。Gander 既学该说什么,也学什么时候说。

边发生,边看见、听见。

语音、视频和文本共享一条因果时间线,将对话锚定在你的话语、你的屏幕,以及周围不断变化的场景之中。

它干活时,你继续聊。

委派复杂任务并在整个执行过程中保持参与:通过持续对话来细化需求、追问、查看进度、授权或取消。

🎬 Demo▶ 在 YouTube 上观看 Gander 演示🧠 系统设计 小脑负责实时交互,大脑负责长程任务,运行时把两者连在同一条任务时间线上。

系统在不分隔对话的前提下划分职责:

模块 实现 职责 流式小脑(Streaming Cerebellum) minicpm_ft 实时音视频感知、交互控制、文本生成与语音合成。

智能体编排运行时(Agent Orchestration Runtime) gander_runtime 受信任回合绑定、任务状态、多模态上下文、worker 事件、权限与投递。

可插拔后端大脑(Pluggable Back Brain) Provider interface 长程推理、工具调用、文件与应用操作,以及工作流执行。

一个实时请求沿一条因果路径流转:

浏览器流式上传麦克风音频,以及可选的摄像头或屏幕画面帧。

源时间戳把画面证据与该时刻采集的音频对齐。

小脑预测应该听、说、插话,还是调用一次任务操作。简单的请求就地回答。

运行时把智能体任务绑定到已确定的本轮用户输入,并启动一次受追踪的大脑执行,配以有界的文本与画面上下文。

大脑异步工作。里程碑、提问、权限请求与最终结果都经由同一段实时对话回流。

受管 ASR(自动语音识别)为浏览器提供转写文本和传给大脑的可信文本指令;小脑本身则直接消费原始音频。

1. 流式小脑

思考器(Thinker)控制交互与内容,解耦的说话器(Talker)在不阻塞感知的前提下渲染语音。

小脑以 MiniCPM-o 4.5 为起点,将连续交互扁平化为一秒一个的因果单元:[video] [audio] [optional task context] -> [control] [text or tool content]控制 token(控制标记)在内容之前被预测,从而把"是否行动"与"产出什么"分开。

控制 行为 listen 保持静默,继续观察流。

speak 生成一段有界文本并送入说话器。

interrupt 停止一段已不再合适的发言,包括用户接管话语权的情况。

tool 向运行时输出一个结构化的任务操作。

在 speak 单元上,说话器以思考器隐藏状态和对齐后的文本 token 为条件,预测 S3 语音 token。一个因果流匹配(flow-matching)解码器增量地渲染音频。发布的对齐比例为每个单元 8 个文本 token 对 50 个 S3 token;解耦部署使感知在语音生成期间继续进行。

长会话中,模型最多保留 128 个最近的单元。运行时支持 context_no_previouscontext_slatecontext_memory;发布的服务配置使用 context_slate,它保留活跃的任务状态而不依赖记忆模型。

2. 智能体编排运行时

用户在执行进行时可以继续说话或修改任务,避免陈旧工作成为最终答案。

小脑暴露一组小型的任务词汇。运行时将其转化为完整的执行生命周期:

操作 含义 task_start 基于当前可信的用户轮次创建一个后台任务。

task_send with main 添加信息或约束,并对主执行进行转向。

task_send with 运行一次只读的旁路询问,不改动主任务。

task_resolve 取消一个任务,或回应一次权限请求。

项目(Project)、任务(Task)、执行(Run)、worker 事件与投递彼此分开追踪。

执行代数(generation)在目标被修订后隔离掉陈旧结果,原生事件类型则把里程碑、多问题澄清、权限决策、停止、重置与清空保留为彼此独立的交互。

3. 可插拔后端大脑

内置的大脑提供方是 Codex。提供方构建基于注册表,因此可以接入另一个智能体而不必改动小脑的任务协议或网关状态机。在 worker.profile: full 下,大脑保留其原生工具面,并接收 Gander 专属的接口:

接口 用途 Provider tools 使用 worker 配置的文件、shell、检索、应用等工具。

context_fetch 从当前任务谱系中获取可信轮次、任务事件、工件(artifact)以及摄像头/屏幕画面帧。

memory_search 当配置了外部记忆提供方时,跨会话检索证据。

返回已核实的里程碑、重要发现或更正,同时工作继续进行。

原生提问与审批 询问缺失信息或申请权限,并在拿到用户答复后恢复同一执行。

📊 评估 技术报告评估了对话能力、全双工交互、智能体执行与全模态理解。人类评估确认 Gander 提供了自然、富有表现力、且高度口语化的语音。这种口语质量配合了强劲的指令跟随与知识表现:在 2,052 条基准评测 utterance(轮次语句)上,Gander 在 SpokenQA 两个子集上领先全双工流式组,并在 VoiceBench 两个子集上名列第二。在加入原生全双工交互与智能体能力之后,它仍保留了强大的音视频理解能力,在 Daily-Omni 上达到 78.53% 的准确率。

能力 评估 结果 口语知识与问答 SpokenQA,Llama Questions / Web Questions 75.60 / 59.30;在全双工组两个子集上均第一 口语指令与对话 VoiceBench,AlpacaEval / SD-QA 3.96 / 5 与 46.84%;在全双工组两个子集上均第二 交互时机 Full-Duplex-Bench v3 100% 合适的轮流发言;8.0% 过早插话 智能体交付 委派式 Full-Duplex-Bench 场景 45 / 45 最终响应绑定正确 音视频理解 Daily-Omni 在全双工与智能体后训练之后达到 78.53% 准确率🚀 快速上手 以下命令启动完整的浏览器系统:受管 ASR、流式思考器、解耦说话器、智能体运行时、Web UI,以及 Codex 支持的大脑。

需求 要求 说明 系统 兼容 CUDA 12.4 PyTorch 栈的 Linux、Conda 和 NVIDIA 驱动。

GPU 发布配置使用三块物理 GPU,分别为思考器、说话器、ASR 各一块。

模型 MiniCPM-o 4.5、一对匹配的 Gander 思考器/说话器,以及 faster-whisper large-v3。

大脑 已认证的 Codex CLI 或支持 app-server --stdio 的可执行程序。

1. 克隆仓库
git clone https://github.com/Omni-Interaction-Gander/Omni-Interaction-Agent.git
cd Omni-Interaction-Agent
conda env create -f environment.yml
conda activate gander
2. 安装大脑

在服务机上安装 Codex CLI,然后运行一次以完成登录:

curl -fsSL https://chatgpt.com/codex/install.sh | sh
codex

登录后,验证 codex app-server --help 是否成功。Gander 会自行启动并管理 app server。

3. 下载模型权重
mkdir -p checkpoints
hf download openbmb/MiniCPM-o-4_5 \
  --local-dir checkpoints/MiniCPM-o-4_5
hf download Gander-Omni/Gander \
  --local-dir checkpoints/Gander
hf download Systran/faster-whisper-large-v3 \
  --local-dir checkpoints/faster-whisper-large-v3

已有的本地副本也可以使用。请在 Gander 模型页面选择匹配的思考器/说话器对。

4. 配置服务
cp gander_runtime/configs/serve.example.yaml \
   gander_runtime/configs/serve.local.yaml
mkdir -p workspace

serve.local.yaml 中的路径占位符替换为绝对路径:

资源 配置字段 MiniCPM-o 4.5 model.model_name_or_pathmodel.processor_name_or_pathmodel.token2wav_dir 以及 duplex.ref_audio_path Gander duplex.checkpointduplex.talker_checkpoint 受管 ASR asr.model_path 大脑 worker.settings.codex_bin;仅在需要单独的认证 home 时使用 codex_home大脑的配置很简洁:

worker:
  provider: codex
  cwd: ../workspace
  profile: full
  settings:
    codex_bin: codex
    model: null
    reasoning_effort: medium
    codex_home: null

cwd 是大脑可用的工作目录。

codex_bin 可以是 PATH 上的命令,也可以是绝对路径;model: null 保留 Codex 的默认模型。

发布模板已设置 8/50 token 对齐、context_slate、完整的大脑工具,以及三块 GPU 的映射:GPU 0 用于思考器,GPU 1 用于说话器,GPU 2 用于 ASR。

5. 校验并启动
./scripts/serve.sh --check-config

./scripts/serve.sh --check-config 在不加载模型权重的前提下校验服务。启动后访问 http://127.0.0.1:8000/health/api/asr/health 分别报告运行时与 ASR 的就绪状态。远程访问时,请通过 HTTPS 同时代理 HTTP 与 WebSocket 路由,以便浏览器的媒体权限正常工作。

🧪 训练 训练使用单一入口和分层的 YAML 配置。

scripts/train.sh 加载 minicpm_ft/configs/train.yaml,按顺序应用提供的数据集或实验 YAML,最后应用点号形式的命令行覆盖。

数据与训练-服务对齐

训练样本保留了部署系统所使用的因果单元时间线与任务生命周期。

Gander 在一个 270 万样本的混合集上训练:

数据族 规模 主监督 语音交互 101 万 口语对话与问答、InteractionSpeech、插话、反馈语、同声传译。

音视频交互 110 万 流式视频问答、旁白、时间定位、主动视觉回应。

智能体交互 35.96 万 委派、转向、进度、澄清、权限、取消、GUI 轨迹与工具推理。

鲁棒性与负例 22.97 万 无关视频、无指令环境、干扰、重叠干扰源、多人跟踪。

训练与服务共享三条核心约定:

输入与输出使用相同的每秒因果单元,画面证据按源时间选择。

长上下文训练最多保留 128 个先前单元和 1500 个 previous-context token;超过 16,384 token 限制的样本被直接过滤,而非截断。

声学增强在保留交互时间线的前提下,叠加噪声、嘈杂人声、瞬态、设备染色、房间响应、回声或静默段。

发布配方采用两阶段:

阶段 可训练模块 目标 思考器 思考器 LLM 与音频投影 文本、交互控制、结构化工具调用 token。

说话器 TTS 投影与解码器;思考器冻结 以思考器隐藏状态为条件的时间对齐 S3 语音 token。

联合模式仍可用于实验;发布的 checkpoint(模型检查点)配方与构成遵循上述两阶段路径。

校验内置示例

仓库附带 12 个思考器示例与 6 个说话器示例,含本地媒体,可用于小规模端到端数据通路检查:

./scripts/prepare_data.sh check \
  minicpm_ft/examples/release/thinker/train_config.yaml
./scripts/prepare_data.sh check \
  minicpm_ft/examples/release/talker/train_config.yaml
训练思考器
BASE=/absolute/path/to/MiniCPM-o-4_5
./scripts/train.sh minicpm_ft/examples/release/thinker/train_config.yaml \
  --model.model_name_or_path "$BASE" \
  --model.processor_name_or_path "$BASE" \
  --launch.gpus_per_node 1 \
  --train.output_dir outputs/thinker

思考器模式训练 LLM 与音频投影,同时保持视觉塔、重采样器与 TTS 模块冻结。默认目标将文本损失与权重为 1.5 的交互控制损失相结合。

训练说话器
BASE=/absolute/path/to/MiniCPM-o-4_5
THINKER=/absolute/path/to/thinker-checkpoint
./scripts/train.sh minicpm_ft/examples/release/talker/train_config.yaml \
  --model.model_name_or_path "$BASE" \
  --model.processor_name_or_path "$BASE" \
  --runtime.init_checkpoint "$THINKER" \
  --launch.gpus_per_node 1 \
  --train.output_dir outputs/talker

说话器模式冻结已完成的思考器 LLM 与音频投影,仅训练 TTS 投影与解码器。内置示例包含 S3 目标。若数据集没有内联的 turn.meta.s3_codes,请在其训练 YAML 中设置 data.s3_cache_dir 并先构建缓存:

./scripts/prepare_data.sh s3 /path/to/release/train_config.yaml --device cuda:0

两个阶段默认都设置 save_trainable_only: true。部署时,思考器被组合到 MiniCPM-o 4.5 之上,随后说话器被组合到该思考器之上。两个 checkpoint 都不会复制冻结的基础模型参数。

使用完整数据集发布版

创建一个覆盖式 YAML,包含 data.release_root、有序的清单列表,以及行数或采样权重。相对的媒体路径将在发布根目录下解析。

使用声学增强时,请启用 audio_augment 并提供噪声/RIR 索引。

多节点执行使用 launch.hostslaunch.hostfile。在大规模运行前检查完全合并后的配方:

./scripts/train.sh /path/to/release/train_config.yaml --show-config

🔍 离线推理 单一入口覆盖两条不同的路径:

模式 输入与行为 turn 一段有界的文本、音频、图像或组合输入,随后生成一次响应。

duplex 以一秒为单元在线消费音频,逐单元产出控制决策、增量文本、工具轨迹以及可选语音。

从发布配置开始。设置 model.model_name_or_pathmodel.processor_name_or_pathinference.checkpoint,以及 inference.input 下的字段,然后运行:

cp minicpm_ft/configs/infer.yaml /tmp/gander-infer.yaml
./scripts/infer.sh /tmp/gander-infer.yaml

对于 turn 模式推理,保持 inference.mode: turn,并设置 input.textinput.audioinput.image 的任意受支持组合。

对于按 chunk(分块)的 duplex 推理,使用发布的流式取值:

inference:
  mode: duplex
  checkpoint: /path/to/gander-thinker-checkpoint
  input:
    text: null
    audio: /path/to/input.wav
    image: null
  duplex:
    chunk_ms: 1000
    speak_text_tokens_per_unit: 8
    talker_speech_tokens_per_unit: 50
    sliding_window_mode: context_slate
    context_previous_max_tokens: 1500

要生成语音,还需配置说话器与参考音频:

model:
  init_tts: true
  token2wav_dir: /path/to/MiniCPM-o-4_5/assets/token2wav
inference:
  talker_checkpoint: /path/to/gander-talker-checkpoint
  generate_audio: true
  output_audio: /path/to/output.wav
input:
  audio: /path/to/input.wav
  ref_audio: /path/to/reference.wav

turn 模式衡量一次有界的多模态响应。duplex 模式则演练实时小脑所用的同一套增量控制与上下文行为。

⚙️ 配置参考 主要的部署选项位于服务 YAML 中:

设置 选项 server.mode lean 使用最短的可信任务路径;coordinator 增加规划与监督层。

duplex.media_mode voice 以音频启动,omni 要求视觉输入,auto 允许客户端选择。

duplex.allow_client_video 独立启用摄像头与屏幕附着。

duplex.sliding_window_mode 选择 context_no_previouscontext_slatecontext_memory

worker.provider / worker.profile 选择已注册的大脑后端及其任务范围或完整的工具面。

asr.mode 运行受管 ASR、连接外部服务或禁用转写。

📁 仓库结构路径 内容 minicpm_ft/mcpmft/data/ 清单加载、媒体解析、增强、时间序列化、collation(样本拼批)以及 S3 目标。

minicpm_ft/mcpmft/modeling/ 模型加载、可训练模块选择、全模态前向路径与流式声学特征。

minicpm_ft/mcpmft/infer/ 基于 turn 的与按 chunk 的推理、上下文窗口、解耦说话器、ASR 与浏览器客户端。

gander_runtime/gander_runtime/ 实时传输、媒体时间线、任务网关、账本(ledger)、上下文路由、worker 事件与监督。

gander_runtime/gander_runtime/providers/ 类型化的大脑提供方注册表、能力、工厂与 Codex 适配器。

minicpm_ft/examples/release/ 自包含的思考器与说话器示例,含本地媒体。

scripts/ 数据校验、训练、离线推理与服务的稳定入口。

docs/ 技术报告与精选系统图。

🔗 资源 资源 链接 论文 arXiv:2609.08977 模型 Gander-Omni/Gander 数据集 即将发布 演示 项目页面 YouTube📝 引用 如果你在研究中使用了 Gander,请按如下方式引用:

@misc{orantqing2026omniinteractionagenttechnical,
      title={Omni Interaction Agent Technical Report},
      author={Orantqing and Shengpeng Ji and Junlong Tong and Jialong Zuo and Dongjie Fu and Di Cao and Yangzhuo Li and Shangda Wu and Franz and Evan and Theron Veyra and Changhao Pan and Jingyu Lu and Dongchao Yang and Zhifei Xie and Yang Tan and Xiaoyu Shen and Xiaoda Yang and Wenfu Wang and Teddysun and Steveyves and Zhou Zhao and Bryanytian