从写代码,到创作下一幕

探索 字节跳动 - 火山方舟 的 AI 编程与视频创作活动。

火山方舟 Agent Plan 与 Coding Plan 活动,价格 ¥9.9 起

Agent Plan & Coding Plan

一站体验多款热门模型,为 AI 编程与智能体开发提供更多选择。新用户可联系(微信: goo_lvyouyou)免费体验 9.9 agent plan。

查看套餐优惠
Seedance 2.5 视频创作活动:30 秒视频、多模态参考、局部编辑

Seedance 2.5

让创意,跃然成片。探索 30 秒视频、多模态参考与局部编辑,把脑海中的画面变成下一支作品。

探索视频创作

WebRTC 语音 Agent

查看 Markdown

本示例在浏览器中构建低延迟语音 Agent。浏览器通过 WebRTC 连接你的服务器,服务器再通过 WebSocket 连接 Grok API。如果浏览器端语音延迟是首要考虑因素,可以从此示例入手。

注意:这些实现供学习和开发使用。用于生产环境前,还需进一步加固。

概览

这个基于 WebRTC 的语音 Agent 支持:

  • 低延迟的 WebRTC 语音通信

  • 实时双向音频流

  • 连接质量监控(码率、抖动、丢包)

  • 服务端中继,连接浏览器端 WebRTC 和 XAI API 端 WebSocket

架构

Text

Browser (WebRTC Client)
    ↓ WebRTC (PCM16 via DataChannel)
    ↓
Node.js Server (Relay)
    ↓ WebSocket (PCM16 pass-through)
    ↓
XAI API

服务器在两端之间转发数据:

  • 客户端 → 服务器:通过 WebRTC DataChannel 传输 PCM16 音频

  • 服务器 → XAI:通过 WebSocket 传输 PCM16 音频

  • 无需转换音频:全程使用 PCM16

快速开始

前提条件

  • Node.js 18 或更高版本

  • XAI API 密钥

  • 支持 WebRTC 的 Chrome 或 Edge 浏览器

1. 启动服务器

Bash

cd server
# Create .env file with your XAI_API_KEY
echo "XAI_API_KEY=your_key_here" > .env
./start.sh

服务器将监听端口 8000(可通过以下文件配置:.env)。

2. 启动客户端

Bash

cd client
./start.sh

客户端将在端口 5173 启动。

3. 打开浏览器

访问 http://localhost:5173 并点击 START 开始语音对话。

组件

服务器(/server)

使用 Node.js 和 TypeScript 构建的服务器负责:

  • 接受来自浏览器的 WebRTC 连接

  • 处理信令(SDP offer/answer 和 ICE 候选)

  • 通过 DataChannel 转发 PCM16 音频

  • 通过 WebSocket 连接 XAI API

  • 收集连接质量统计数据

技术栈:Express、werift(纯 JS 的 WebRTC 实现)、WebSocket、TypeScript

参见 server/README.md 了解详情。

客户端(/client)

使用 React 和 TypeScript 构建的网页应用负责:

  • 与服务器建立 WebRTC 连接

  • 通过 WebRTC 采集麦克风音频

  • 显示实时转录文本

  • 显示 WebRTC 连接质量统计数据

  • 提供查看消息的调试控制台

技术栈:React、Vite、WebRTC API、TypeScript

参见 client/README.md 了解详情。

功能

WebRTC 功能

  • 客户端与服务器之间的 WebRTC 连接

  • 通过 DataChannel 传输音频和控制消息

  • 可配置 STUN/TURN 以支持 NAT 穿透

  • 监控连接质量

  • 使用 PCM16 音频格式,无需转换编解码器

语音 Agent 功能

  • 实时语音交互

  • 服务端语音活动检测(VAD)

  • 对话转录

  • 处理打断

  • 用于监控的调试控制台

界面功能

  • 页眉中的 WebRTC 标记

  • 连接质量指示器

  • 统计面板(码率、抖动、丢包和往返时间 RTT)

  • 麦克风电平指示器

  • 实时显示转录文本,跨会话保留

配置

服务端配置

编辑 server/.env:

Bash

# Required
XAI_API_KEY=your_xai_api_key_here

# Optional
PORT=8000
VOICE=ara
INSTRUCTIONS="You are a helpful voice assistant. You are speaking to a user in real-time over audio. Keep your responses conversational and concise since they will be spoken aloud."
API_URL=wss://api.x.ai/v1/realtime

客户端配置

客户端会自动连接至 http://localhost:8000(如果设置了 VITE_API_BASE_URL,则连接至该地址)。

TURN 服务器配置

客户端和服务端都包含 ENABLE_TURN 开关,可在网络受限时启用 TURN 服务器:

位置:

  • 客户端:client/src/hooks/useWebRTC.ts(第 13 行)

  • 服务端:server/src/rtc-peer.ts(第 9 行)

默认值:false(仅使用 STUN,适用于大多数网络)

何时启用:

  • 企业防火墙限制严格,阻止 UDP

  • 网络需要 TURN 中继

  • 测试 TURN 服务器功能

注意:如果 TURN 服务器响应缓慢或不可达,启用 TURN 可能会使连接时间增加 10 至 15 秒。大多数连接只使用 STUN 即可正常工作。

建议:使用 Chrome 或 Edge 以获得最佳兼容性。

与 WebSocket 版本比较

功能WebSocket 版本WebRTC 版本
音频传输WebSocketWebRTC DataChannel
控制消息WebSocketWebRTC DataChannel
音频格式PCM16PCM16
NAT 穿透不适用(直连)STUN/TURN
连接质量统计无有,提供详细统计
浏览器支持所有现代浏览器推荐 Chrome 或 Edge
连接时间快(约 1 秒)快(约 1 秒,使用 TURN 时可能更慢)

开发

客户端和服务端均采用 TypeScript,以保证类型安全并改善开发体验。

服务端开发

Bash

cd server
npm run dev  # Run with ts-node (no build step)
npm run watch  # Watch mode for TypeScript

客户端开发

Bash

cd client
npm run dev  # Vite dev server with HMR