Skip to content

API 参考文档 ​

本文档介绍火山引擎实时对话式 AI 的核心 API,包括 StartVoiceChat、UpdateVoiceChat、StopVoiceChat 及相关配置参数。

API 概览 ​

API说明
StartVoiceChat启动 AI 语音会话,在指定房间中创建 AI 智能体
StopVoiceChat停止语音会话,释放 AI 智能体资源
UpdateVoiceChat更新进行中的语音会话(打断、自定义播报等)

所有 API 均需要使用 AccessKey 进行 V4 签名,参考 认证代理服务。

StartVoiceChat ​

启动 AI 语音会话,在指定房间中创建 AI 智能体。

请求地址:POST https://rtc.volcengineapi.com?Action=StartVoiceChat&Version=2024-12-01

请求参数 ​

参数类型必填说明
AppIdstring是RTC 应用 ID
RoomIdstring是房间 ID
TaskIdstring是任务 ID,用于标识会话
AgentConfigobject是智能体配置,详见 AgentConfig
Configobject是会话配置,包含 ASR、TTS、LLM 等参数,详见 Config

AgentConfig ​

智能体配置:

参数类型必填说明
TargetUserIdstring[]是目标用户 ID 列表,即客户端用户 ID
UserIdstring是智能体用户 ID(AI Bot 的身份标识)
WelcomeMessagestring否欢迎语,会话开始时自动播报
EnableConversationStateCallbackboolean否启用会话状态回调,用于接收 listening/thinking/speaking 状态
AnsModenumber否AI 降噪模式(0: 关闭, 1: 低, 2: 中, 3: 高,推荐 3)
VoicePrintobject否声纹识别配置:Mode(0: 关闭, 1: 开启)、IdList(声纹 ID 列表)

Config ​

会话配置:

参数类型说明
ASRConfigobject语音识别配置,详见 ASRConfig
TTSConfigobject语音合成配置,详见 TTSConfig
LLMConfigobject大模型配置,详见 LLMConfig
InterruptModenumber打断模式(0: 语义打断, 1: 手动打断)

响应 ​

json
{
  "ResponseMetadata": {
    "RequestId": "20250104123456789abcdef01234567",
    "Action": "StartVoiceChat",
    "Version": "2024-12-01",
    "Service": "rtc",
    "Region": "cn-north-1"
  },
  "Result": {}
}

成功时 Result 为空对象,失败时 ResponseMetadata.Error 包含错误信息。

注意

StartVoiceChat 用于在已有房间中启动 AI 智能体。

官方文档:StartVoiceChat

StopVoiceChat ​

停止语音会话,释放 AI 智能体资源。

请求地址:POST https://rtc.volcengineapi.com?Action=StopVoiceChat&Version=2024-12-01

请求参数 ​

参数类型必填说明
AppIdstring是RTC 应用 ID,与 StartVoiceChat 一致
RoomIdstring是房间 ID,与 StartVoiceChat 一致
TaskIdstring是任务 ID,与 StartVoiceChat 一致

响应 ​

json
{
  "ResponseMetadata": {
    "RequestId": "20250104123456789abcdef01234567",
    "Action": "StopVoiceChat",
    "Version": "2024-12-01"
  },
  "Result": {}
}

成功时 Result 为空对象,失败时 ResponseMetadata.Error 包含错误信息。

官方文档:StopVoiceChat

UpdateVoiceChat ​

更新进行中的语音会话,支持打断、Function calling、自定义播报等操作。

请求地址:POST https://rtc.volcengineapi.com?Action=UpdateVoiceChat&Version=2024-12-01

请求参数 ​

参数类型必填说明
AppIdstring是RTC 应用 ID
RoomIdstring是房间 ID
TaskIdstring是任务 ID
Commandstring是操作命令
Messagestring否播报内容(最长 200 字符)
InterruptModenumber否播报优先级

Command 命令类型 ​

Command说明
Interrupt打断当前智能体输出
ExternalTextToSpeech自定义文本转语音播报
FunctionCallResult返回 Function calling 结果

InterruptMode 优先级 ​

用于 ExternalTextToSpeech 命令时指定播报优先级:

值说明
1高优先级:终止当前交互,立即播放
2中优先级:等待当前交互结束后播放
3低优先级:如果正在交互则丢弃

使用示例 ​

打断智能体:

json
{
  "AppId": "your-app-id",
  "RoomId": "room-uuid",
  "TaskId": "task-id",
  "Command": "Interrupt"
}

自定义播报:

json
{
  "AppId": "your-app-id",
  "RoomId": "room-uuid",
  "TaskId": "task-id",
  "Command": "ExternalTextToSpeech",
  "Message": "您有一条新消息",
  "InterruptMode": 1
}

响应 ​

json
{
  "ResponseMetadata": {
    "RequestId": "20250104123456789abcdef01234567",
    "Action": "UpdateVoiceChat",
    "Version": "2024-12-01"
  },
  "Result": {}
}

成功时 Result 为空对象,失败时 ResponseMetadata.Error 包含错误信息。

官方文档:UpdateVoiceChat

配置参数详解 ​

以下配置用于 StartVoiceChat 的 Config 参数。

ASRConfig ​

语音识别配置:

参数类型必填说明
Providerstring是服务提供商,固定 volcano
ProviderParamsobject是提供商参数
VADConfigobject否语音活动检测配置
VolumeGainnumber否音量增益(0.0-1.0),默认 0.5
TurnDetectionModenumber否轮次检测模式
InterruptConfigobject否打断配置

ProviderParams:

参数类型说明
AppIdstringASR 应用 ID
Modestring识别模式:smallmodel(小模型)、bigmodel(大模型)
Clusterstring服务集群,默认 volcengine_streaming_common
contextstring热词上下文(JSON 格式)
boosting_table_idstring热词表 ID
correct_table_idstring纠错表 ID

VADConfig(语音活动检测):

参数类型说明
SilenceTimenumber静音判定时长(毫秒),默认 600
SpeechTimenumber语音判定时长(毫秒)
PrefixTimenumber前缀时长(毫秒)
SuffixTimenumber后缀时长(毫秒)
Sensitivitynumber灵敏度
AIVADboolean是否启用 AI VAD

InterruptConfig(打断配置):

参数类型说明
InterruptSpeechDurationnumber打断语音时长(毫秒),默认 400
InterruptKeywordsstring[]语义打断关键词列表

示例配置:

json
{
  "Provider": "volcano",
  "ProviderParams": {
    "AppId": "your-asr-app-id",
    "Mode": "smallmodel",
    "Cluster": "volcengine_streaming_common"
  },
  "VADConfig": {
    "SilenceTime": 600
  },
  "VolumeGain": 0.5,
  "TurnDetectionMode": 0,
  "InterruptConfig": {
    "InterruptSpeechDuration": 400,
    "InterruptKeywords": ["停", "暂停", "等一下", "stop", "wait"]
  }
}

TTSConfig ​

语音合成配置:

参数类型必填说明
Providerstring是服务提供商,固定 volcano
ProviderParamsobject是提供商参数
IgnoreBracketTextnumber[]否忽略的括号类型

ProviderParams:

参数类型说明
appobject应用配置
audioobject音频配置
ResourceIdstringTTS 资源 ID
Additionsobject附加配置

app 配置:

参数类型说明
appidstringTTS 应用 ID
tokenstringTTS 应用 Token
clusterstring服务集群,默认 volcano_tts

audio 配置:

不同 TTS 模式下的参数略有不同:

参数类型说明适用模式
voice_typestring音色类型所有模式
volume_rationumber音量比例(0.5-2.0)所有模式
speed_rationumber语速比例(0.5-2.0)standard
pitch_rationumber音调比例(0.5-2.0)standard
speech_rationumber语速比例(0.5-2.0)bigtts
pitch_ratenumber音调变化率bigtts
speech_ratenumber语速变化率bidirection
emotionstring情感类型:happy、sad、angry、neutral支持情感的音色
emotion_strengthnumber情感强度(0.0-1.0)配合 emotion 使用

TTS 模式说明

  • standard:标准模式,使用 speed_ratio、pitch_ratio
  • bigtts:大模型 TTS,使用 speech_ratio、pitch_rate
  • bidirection:双向流式,使用 speech_rate,支持 Additions 配置

常用音色:

音色 ID说明
BV033_streaming女声,温柔
BV001_streaming男声,磁性
BV700_streaming女声,甜美
BV406_streaming男声,沉稳

更多音色参考:火山引擎 TTS 音色列表

示例配置:

json
{
  "Provider": "volcano",
  "ProviderParams": {
    "app": {
      "appid": "your-tts-app-id",
      "token": "your-tts-token",
      "cluster": "volcano_tts"
    },
    "audio": {
      "voice_type": "BV033_streaming",
      "speed_ratio": 1.2,
      "pitch_ratio": 1.1,
      "volume_ratio": 1.0,
      "emotion": "happy",
      "emotion_strength": 0.8
    },
    "ResourceId": "your-resource-id"
  }
}

LLMConfig ​

大模型配置:

参数类型必填说明
Modestring是模式:ArkV3(方舟)或 CustomLLM(自定义)
UrlstringCustomLLM 必填CustomLLM 回调地址
APIKeystring否API 认证密钥
EndPointIdstringArkV3 必填方舟模型端点 ID
ModelNamestring否模型名称
SystemMessagesstring[]否系统提示词列表
UserPromptsobject[]否预设对话历史
Temperaturenumber否采样温度(0.0-1.0),默认 0.5
TopPnumber否核采样概率(0.0-1.0),默认 0.9
MaxTokensnumber否最大生成 token 数,默认 256
HistoryLengthnumber否保留的历史轮数,默认 15
EnableRoundIdboolean否启用轮次 ID
VisionConfigobject否视觉理解配置:Enable(是否启用)、SnapshotConfig(截图配置)
Customstring否自定义参数(JSON 字符串),透传给 CustomLLM

UserPrompts(预设对话历史):

json
[
  { "Role": "assistant", "Content": "你好!有什么可以帮助你的?" },
  { "Role": "user", "Content": "你好" }
]

CustomLLM 模式示例:

json
{
  "Mode": "CustomLLM",
  "Url": "https://your-server.com/chat-stream",
  "APIKey": "your-api-key",
  "ModelName": "qwen-flash",
  "Temperature": 0.5,
  "TopP": 0.9,
  "MaxTokens": 256,
  "HistoryLength": 15,
  "EnableRoundId": true,
  "VisionConfig": {
    "Enable": false
  },
  "UserPrompts": [
    { "Role": "assistant", "Content": "嗨~我是助手,很高兴见到你!" }
  ]
}

ArkV3 模式示例:

json
{
  "Mode": "ArkV3",
  "EndPointId": "your-endpoint-id",
  "Temperature": 0.7,
  "MaxTokens": 512
}

CustomLLM 回调 ​

使用 CustomLLM 模式时,火山引擎会将用户语音识别结果回调到自定义服务。

回调流程 ​

用户语音 → 火山引擎 ASR → CustomLLM 服务 → 火山引擎 TTS → 用户

请求格式 ​

火山引擎发送到 CustomLLM 服务的请求:

http
POST /chat-stream HTTP/1.1
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

{
  "messages": [
    {"role": "system", "content": "你是一个智能助手"},
    {"role": "user", "content": "你好"}
  ],
  "stream": true,
  "temperature": 0.7,
  "max_tokens": 256,
  "device_id": "custom-device-id"
}

请求字段:

字段说明
messages对话历史,OpenAI 格式
stream固定 true,流式响应
temperature采样温度
max_tokens最大生成长度
device_id自定义参数,从 LLMConfig.Custom 透传

响应格式 ​

响应需遵循 OpenAI SSE 格式:

data: {"id":"resp-1","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}],"model":"qwen-flash","created":1704355200}

data: {"id":"resp-1","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"你好"},"finish_reason":null}],"model":"qwen-flash","created":1704355200}

data: {"id":"resp-1","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":"stop"}],"model":"qwen-flash","created":1704355200}

data: [DONE]

响应要点:

  • 必须返回 SSE 流式响应
  • Content-Type: text/event-stream
  • 每行以 data: 开头
  • 最后一行为 data: [DONE]

官方文档:CustomLLM 接入

RTC Token ​

客户端加入 RTC 房间需要 Token。Token 由服务端使用 AppKey 生成。

Token 结构 ​

Token = Version + AppId + Base64(Message + Signature)
  • Version:固定值 001
  • AppId:24 位应用标识符
  • Message:二进制编码的负载(RoomId、UserId、过期时间、权限等)
  • Signature:使用 AppKey 进行 HMAC-SHA256 签名

Token 权限 ​

权限说明
PrivPublishStream发布音视频流
PrivSubscribeStream订阅音视频流

有效期 ​

默认 24 小时(86400 秒)。过期后需重新生成。

生成示例 ​

typescript
import { AccessToken } from './rtctoken'

const token = new AccessToken(appId, appKey, roomId, userId)
const expireAt = Math.floor(Date.now() / 1000) + 24 * 3600
token.addPrivilege('PrivPublishStream', expireAt)
token.addPrivilege('PrivSubscribeStream', expireAt)
token.expireTime(expireAt)
const tokenString = token.serialize()

Token 生成库参考 安装与测试 - 生成 RTC Token。

错误码 ​

响应格式 ​

json
{
  "ResponseMetadata": {
    "RequestId": "xxx",
    "Action": "StartVoiceChat",
    "Error": {
      "Code": "InvalidParameter",
      "Message": "参数 AppId 不能为空"
    }
  }
}

公共错误码 ​

错误码HTTP 状态码说明
MissingParameter400缺少必要参数(如 Action、Version)
InvalidParameter400参数格式错误或无效
MissingRequestInfo400缺少请求信息(如 X-Date 头)
InvalidTimestamp400请求过期或时间戳无效,检查 UTC 时间格式
InvalidAuthorization400Authorization 头格式错误
InvalidCredential400Credential 格式错误
InvalidAccessKey401AccessKey 无效或格式错误
SignatureDoesNotMatch401签名验证失败,检查 SecretKey
InvalidSecretToken401STS 临时凭证过期或无效
AccessDenied403IAM 权限不足
ServiceNotFound404服务不存在
InvalidActionOrVersion404API Action 或 Version 不存在
FlowLimitExceeded429请求频率超限,降低 QPS
InternalError500内部错误
InternalServiceError502服务网关错误
ServiceUnavailableTemp503服务暂时不可用
InternalServiceTimeout504服务超时

业务错误码 ​

错误码说明
RoomNotExist房间不存在
TaskNotExist任务不存在
InvalidTokenRTC Token 无效或过期

官方文档:公共错误码

相关资源 ​