文章提出在浏览器与模型供应商之间建立自有事件协议,由服务端适配不同鉴权、地址和原始事件格式。该边界可将采集、流式传输、渲染和模型实现解耦,降低更换供应商的改造成本。
实时多模态 AI 在界面中看起来像是一个功能,但它实际上由一系列紧密耦合的系统组成:摄像头采集、音频传输、模型推理、流式响应和用户反馈。如果任何与特定模型相关的细节泄漏到客户端中,日后更换提供商的成本就会变得非常高。
在构建独立的 SeedRealtime 演示项目时,我采用了可替换的 Gateway 模式,让浏览器、服务器和模型 Adapter 能够独立演进。当前的实时 fallback 可以先使用某个提供商,同时保持接口不变,以便日后接入另一个获准使用的模型 endpoint。
客户端不应该知道提供商的 URL、身份验证方案或原始事件名称。它应该通过一个精简的契约与你自己的服务器通信:
type RealtimeRequest = {
sessionId: string;
audio?: ArrayBuffer;
frame?: string;
instruction?: string;
};
type RealtimeEvent =
| { type: "transcript.delta"; text: string }
| { type: "response.delta"; text: string }
| { type: "audio.delta"; data: string }
| { type: "session.error"; message: string };
这份契约构成了产品行为与提供商行为之间的边界。浏览器只负责渲染自己能够理解的事件。每个提供商的 Adapter 则将其原生 stream 转换为这种格式。
浏览器 bundle 并不适合存放 API key。这样做也会增加迁移提供商的难度,因为每次变更都需要发布新的客户端。服务端 Gateway 可以同时解决这两个问题:
浏览器通过后端创建 session。
后端对用户进行身份验证并实施速率限制。
Router 选择当前启用的模型 Adapter。
Adapter 对上游请求进行签名。
提供商事件经过标准化后,才会到达客户端。
这样还能为日志记录、安全过滤、配额管理和优雅的 fallback 行为提供一个统一的位置。SeedRealtime API 集成指南在实际项目结构中展示了同样的职责分离方式。
不同的实时模型几乎不会提供完全相同的功能。有的模型可以接收连续视频,另一些模型则要求输入经过采样的图像。有的模型可以流式输出合成音频,另一些则只能返回文本。
不要假装所有提供商都完全相同。应该明确定义各自的能力:
type ModelCapabilities = {
inputAudio: boolean;
inputVideo: boolean;
outputAudio: boolean;
toolCalls: boolean;
interruption: boolean;
};
interface RealtimeAdapter {
capabilities: ModelCapabilities;
connect(session: SessionConfig): Promise<AdapterSession>;
}
这样,UI 就可以禁用不受支持的控件,或者清晰地展示 fallback 状态。与散落在各处、根据提供商名称进行判断的条件分支相比,能力检查更容易维护。
“实时”并不是一个单一的数字。它是采集、上传、排队、推理、合成和播放所用时间的总和。应使用共享的 request ID 或 session ID 对每个边界进行监测。
session 准备就绪所需时间
生成第一个转录 token 所需时间
生成第一个响应 token 所需时间
收到第一个音频字节所需时间
从发出中断到停止的延迟
重连次数及原因
如果应用上传的帧过大,或者缓冲了过多音频,那么再快的模型也无济于事。实时多模态 AI 指南介绍了响应速度、上下文和成本之间在产品层面的权衡。
当用户无法打断语音界面时,界面就会显得反应迟钝。应该把中断视为一种一等事件,而不是 UI 层面的临时补丁。
当麦克风检测到新的语音时,客户端应该发送 interrupt 信号,立即停止本地播放,并让 Gateway 取消上游生成。等待提供商完成生成只会浪费时间和算力。
优秀的实时界面会向用户说明当前正在发生什么:
采用带退避机制且次数受限的重试,并保留足够的状态,以便在恢复时无需重放整段对话。如果上游模型不可用,只应在用户能够清楚了解能力差异的情况下,才路由到兼容的 fallback。
可替换的 Gateway 会在项目初期增加少量结构设计,但它能保护产品的其余部分,使其免受提供商频繁变化的影响。它还为可观测性、访问控制和成本管理提供了一个清晰、统一的位置。
你可以体验独立的 SeedRealtime 实时音视频 AI,并查看相关指南了解具体实现细节。该网站是一个独立项目,并非字节跳动官方网站。
这条经得起时间考验的经验很简单:围绕稳定的事件契约设计产品,并将每一项与特定模型相关的决策隔离在 Adapter 之后。
对于后续操作,你可以考虑屏蔽此人和/或举报滥用行为。