API 概览

  • TypeScript

更新时间不可用

声网对话式 AI 引擎 TypeScript SDK 的完整 API 参考,包括 AgoraClient、Agent、AgentSession 以及各类服务商类。

AgoraClient

AgoraClient 是 SDK 的入口,用于管理区域路由、鉴权和 API 访问。

TypeScript
import { AgoraClient, Area } from 'agora-agents';

构造函数

TypeScript
const client = new AgoraClient(options: AgoraClient.Options);

鉴权模式会根据你提供的参数自动解析。

配置项类型是否必填说明
areaArea是API 路由所使用的区域。固定为 Area.CN
appIdstring是声网 App ID
appCertificatestring是声网 App 证书。请妥善保管,切勿暴露在客户端
customerIdstring否用于 Basic Auth 的客户 ID
customerSecretstring否用于 Basic Auth 的客户密钥
authTokenstring否预先构造好的 agora token=<value> 字符串
timeoutInSecondsnumber否请求超时时间,单位为秒
maxRetriesnumber否最大重试次数
loggingLogConfig | Logger否SDK 日志配置
fetchtypeof fetch否在不支持默认运行时的环境中传入自定义 fetch 实现
表格内容超出当前宽度,可横向滚动查看更多列。

鉴权模式根据你提供的参数解析如下:

传入的配置项Resolved authMode
customerId + customerSecret"basic"
authToken"token"
均未提供"app-credentials"
表格内容超出当前宽度,可横向滚动查看更多列。

各鉴权模式的详细说明可参考实现 HTTP 安全认证。

属性

任意 AgoraClient 实例都提供以下只读属性。

属性类型说明
appIdstring声网 App ID
appCertificatestring声网 App 证书
authModeAgoraAuthMode解析后的鉴权模式
poolPool用于区域路由的底层域名池实例
表格内容超出当前宽度,可横向滚动查看更多列。

方法

除基础 API 访问能力外,还提供以下高层方法。

agent(options?)

创建一个绑定到当前客户端的 Agent。这样无需在 Agent 构造函数里再次传入 client。

TypeScript
const agent = client.agent({ turnDetection: { language: 'zh-CN' } });

nextRegion()

将域名池切换到下一个区域前缀。通常在请求失败后调用,以尝试其他区域端点。

TypeScript
client.nextRegion();

selectBestDomain(signal?)

手动触发一次 DNS 解析检测,以选择最优的域名后缀。SDK 默认每 30 秒自动执行一次,你也可以手动调用。

TypeScript
await client.selectBestDomain();
参数类型说明
signalAbortSignal可选的中止信号,用于取消此次 DNS 检测
表格内容超出当前宽度,可横向滚动查看更多列。

getCurrentURL()

返回当前正在使用的完整 API URL,类型为 string。

TypeScript
const url = client.getCurrentURL();
// Example: 'https://api-cn-east-1.sd-rtn.com/cn/api/conversational-ai-agent'

子客户端

AgoraClient 也暴露了原始 API 客户端,便于访问尚未被 Agent 或 AgentSession 封装的接口。大多数场景下,建议优先使用 Agent 和 AgentSession 这套高层 API。

属性说明
client.agents启动、停止、更新、播报、打断、获取历史记录、查询智能体列表
表格内容超出当前宽度,可横向滚动查看更多列。

完整的方法签名和请求参数可参考创建对话式智能体 RESTful API。

Agent

Agent 是一个不可变的配置对象。每个构建方法都会返回一个新的 Agent 实例,原对象不会被修改。建议在应用启动时定义一个 Agent,并在每次用户对话时基于它调用 createSession()。

在构造时通过 new Agent({ client, ... })(或 client.agent(...))绑定 AgoraClient,createSession() 会复用该客户端,因此创建会话时无需再传入客户端。智能体实例名不在 Agent 构造函数上设置,而是在 createSession({ name }) 时传入。

TypeScript
import { AgoraClient, Agent, Area } from 'agora-agents';

const client = new AgoraClient({ area: Area.CN, appId: 'your-app-id', appCertificate: 'your-app-certificate' });
const agent = new Agent({ client });

构造函数

TypeScript
new Agent<TTSSampleRate extends number = number>(options?: AgentOptions)

所有选项均为可选项。创建后可通过 构建方法 配置各服务商。

配置项类型默认值说明
clientAgoraClientundefined绑定的客户端,绑定后即可调用 createSession(options) 而无需再传入客户端
pipelineIdstringundefined作为基础配置使用的已发布 AI Studio 工作流 ID
instructionsstringundefined已废弃。请改用 LLM 服务商的 systemMessages
greetingstringundefined已废弃。请改用 LLM 服务商的 greetingMessage
failureMessagestringundefined已废弃。请改用 LLM 服务商的 failureMessage
maxHistorynumberundefined已废弃。请改用 LLM 服务商的 maxHistory
turnDetectionTurnDetectionConfigundefined语音活动检测设置
interruptionInterruptionConfigundefined统一的打断控制设置
salSalConfigundefined选择性注意力锁定配置
avatarAvatarConfigundefined数字人配置(推荐使用 withAvatar() 以获得类型安全)
advancedFeaturesAdvancedFeaturesundefined启用 AI-VAD 等高级特性
parametersSessionParamsundefined会话参数,包括静默与结束语配置
geofenceGeofenceConfigundefined区域访问限制
labelsLabelsundefined在通知回调中返回的自定义键值标签
rtcRtcConfigundefinedRTC 媒体加密配置
fillerWordsFillerWordsConfigundefined在等待 LLM 响应期间播放的承接词配置
greetingConfigsLlmGreetingConfigsundefined已废弃。请改在 LLM 服务商上配置
表格内容超出当前宽度,可横向滚动查看更多列。

instructions、greeting、failureMessage、maxHistory、greetingConfigs 是兼容性字段。新代码应在 LLM 服务商上配置这些值,以匹配核心请求 schema。

信息

AgentOptions 支持泛型参数(AgentOptions&lt;TArea&gt;)。当客户端使用 Area.CN 时,SDK 会据此提示可用的服务商,但不会强制校验服务商与区域是否匹配。

构建方法

所有构建方法都会返回一个新的 Agent 实例,原对象不会被修改。

仅支持级联式 ASR + LLM + TTS 流水线以及服务商。

withLlm(vendor)

设置 LLM 服务商。传入任意 LLM 服务商 class(AliyunLLM、BytedanceLLM、DeepSeekLLM、TencentLLM 或 CustomLLM)的实例。

TypeScript
withLlm(vendor: BaseCNLLM): Agent<TTSSampleRate>

withTts(vendor)

设置 TTS 服务商。该方法会捕获并追踪采样率类型,以便进行数字人兼容性校验。

TypeScript
withTts<SR extends number>(vendor: BaseCNTTS<SR>): Agent<SR>

withStt(vendor)

设置 STT 服务商。可传入任意 STT 服务商 class 的实例。

TypeScript
withStt(vendor: BaseCNSTT): Agent<TTSSampleRate>

withAvatar(vendor)

设置数字人服务商。这里的 this 约束会在编译阶段校验该 Agent 的 TTS 采样率是否满足数字人要求。需要使用级联式 ASR + LLM + TTS 流水线。

TypeScript
withAvatar<RequiredSR extends number>(
  this: Agent<RequiredSR>,
  vendor: BaseCNAvatar<RequiredSR>
): Agent<RequiredSR>

withTurnDetection(config)

配置级联流程中的 turn detection。使用 config.start_of_speech 和 config.end_of_speech 配置 SOS/EOS 检测。打断行为请使用 withInterruption()。

TypeScript
withTurnDetection(config: TurnDetectionConfig): Agent<TTSSampleRate>

withInterruption(config)

通过顶层 interruption 对象配置统一打断行为。适用于 start_of_speech 和 keywords 两类打断模式。

TypeScript
withInterruption(config: InterruptionConfig): Agent<TTSSampleRate>

withInstructions(text)

已废弃。请改用 LLM 服务商的 systemMessages。在新的 Agent 实例上覆盖 LLM 系统提示词。

TypeScript
withInstructions(instructions: string): Agent<TTSSampleRate>

withGreeting(text)

已废弃。请改用 LLM 服务商的 greetingMessage。在新的 Agent 实例上覆盖问候语。

TypeScript
withGreeting(greeting: string): Agent<TTSSampleRate>

其他构建方法

以下方法遵循相同模式,都会返回一个包含更新后配置的新 Agent 实例。

方法参数类型说明
withSal(config)SalConfig设置选择性注意力锁定配置
withAdvancedFeatures(features)AdvancedFeatures设置高级特性
withTools(enabled)boolean启用或关闭 MCP 和自定义工具调用
withParameters(parameters)SessionParams设置会话参数
withAudioScenario(audioScenario)ParametersAudioScenario设置 parameters.audio_scenario。可选值为 default、chorus 和 aiserver。未设置时,SDK 会自动补成 chorus。为便于发现可选值,建议使用导出的 AudioScenario 常量,例如 agent.withAudioScenario(AudioScenario.Aiserver)
withFailureMessage(message)string设置 LLM 失败时播报的消息
withMaxHistory(n)number设置级联 LLM 流水线的最大对话历史长度
withGeofence(geofence)GeofenceConfig设置 geofence 配置
withLabels(labels)Labels设置自定义标签
withRtc(rtc)RtcConfig设置 RTC 配置
withFillerWords(fillerWords)FillerWordsConfig设置承接词配置
表格内容超出当前宽度,可横向滚动查看更多列。

createSession(options)

使用构造 Agent 时绑定的客户端创建一个绑定到频道的 AgentSession。该方法不会立即启动智能体,需调用 session.start() 才会加入频道。

如果构造 Agent 时未传入 client,调用 createSession() 会抛出错误。

TypeScript
createSession(
  options: SessionOptions,
): AgentSession
TypeScript
const session = agent.createSession({
  name: 'support-agent',
  channel: 'support-room',
  agentUid: '1',
  remoteUids: ['100'],
});

name 为智能体实例名,会发送给声网 API。请在 createSession() 上设置,而不要设置在 Agent 上;省略时自动生成 agent-{timestamp}。

SessionOptions 字段如下:

配置项类型是否必填说明
namestring否发送给声网 API 的智能体实例名。省略时自动生成 agent-{timestamp}
channelstring是要加入的频道名
agentUidstring是智能体的 RTC UID
remoteUidsstring[]是智能体需要监听并响应的远端用户 UID 列表
tokenstring否预先构造好的 RTC+RTM token。留空时会根据应用凭据自动生成
expiresInnumber否token 有效期,单位为秒。仅在自动生成 token 时生效。有效范围为 1–86400。建议使用 ExpiresIn 辅助方法增强可读性
idleTimeoutnumber否当检测不到音频时,智能体自动退出前的秒数。0 表示禁用超时
enableStringUidboolean否使用字符串 UID,而非数字 UID
pipelineIdstring否作为基础配置使用的已发布 AI Studio 工作流 ID
debugboolean否在控制台输出 API 请求日志
warn(message: string) => void否自定义告警日志函数;如需静默告警可传入空操作函数
表格内容超出当前宽度,可横向滚动查看更多列。

各服务商均为 BYOK,需要提供对应服务商的凭据。

属性

任意 Agent 实例都提供以下只读属性。

属性类型说明
pipelineIdstring | undefined作为基础配置使用的已发布 AI Studio 工作流 ID
instructionsstring | undefinedLLM 系统提示词(兼容性字段)
greetingstring | undefined问候语(兼容性字段)
failureMessagestring | undefinedLLM 失败时播报的消息(兼容性字段)
maxHistorynumber | undefined最大对话历史长度(兼容性字段)
llmLlmConfig | undefinedLLM 配置
ttsTtsConfig | undefinedTTS 配置
sttSttConfig | undefinedSTT 配置
avatarAvatarConfig | undefined数字人配置
turnDetectionTurnDetectionConfig | undefined轮次检测配置
interruptionInterruptionConfig | undefined打断配置
salSalConfig | undefinedSAL 配置
advancedFeaturesAdvancedFeatures | undefined高级特性配置
parametersSessionParams | undefined会话参数
geofenceGeofenceConfig | undefinedGeofence 配置
labelsLabels | undefined自定义标签
rtcRtcConfig | undefinedRTC 配置
fillerWordsFillerWordsConfig | undefined承接词配置
greetingConfigsLlmGreetingConfigs | undefined问候语播放配置兼容性字段
configAgentOptions完整的只读配置快照
表格内容超出当前宽度,可横向滚动查看更多列。

toProperties(opts)

高级方法,用于将 Agent 配置转换为 Start Agent API 所需的请求结构。AgentSession.start() 内部会调用该方法;除非你需要自行构造请求体,否则通常无需直接调用。

TypeScript
toProperties(opts): StartAgentsRequest.Properties

类型别名

SDK 公开了常用请求与响应类型的别名,包括 LlmConfig、SttConfig、AsrConfig(即 SttConfig)、AvatarConfig、会话/对话相关类型,以及 think 类型(例如 ThinkOnListeningAction)。

FillerWordsConfig 支持静态承接词和动态承接词。使用动态承接词时,必须同时配置非空的静态短语作为回退;generated_config 中的 prompt、上下文限制和回退策略均为可选项,模型服务和凭证由声网托管。具体字段结构详见配置承接词。

动态承接词配置还支持 context_message_limit(取值范围 1 到 6,省略时由服务按 1 处理)和 history_character_limit(取值范围 0 到 10000,省略时由服务按 1000 处理)。前者包含当前用户消息,显式设置为 2 到 6 时启用近期历史;后者只统计历史消息文本的 Unicode 码点。

Think 值常量包括:ThinkOnListeningActionInject、ThinkOnListeningActionInterrupt、ThinkOnListeningActionAppend、ThinkOnListeningActionIgnore、ThinkOnThinkingActionInterrupt、ThinkOnThinkingActionAppend、ThinkOnThinkingActionIgnore、ThinkOnSpeakingActionInterrupt、ThinkOnSpeakingActionAppend、ThinkOnSpeakingActionIgnore。append 不打断当前交互,分别等待当前用户回合、LLM 推理或 TTS 播报完成后,再将该指令作为独立的 user 消息追加到上下文并发起新一轮对话。

公开类型别名还包括 FillerWordsContentGeneratedConfig、FillerWordsContentMode 以及自定义工具相关的 LlmTool、LlmToolFunction、LlmToolServer 和 LlmToolExecution。llm.tools 与 MCP 服务器配置相互独立,但都需要通过 withTools(true) 开启工具调用。

AgentSession

AgentSession 负责管理运行中智能体的完整生命周期。请通过 agent.createSession() 创建会话,而不要直接调用构造函数。

TypeScript
import { AgentSession } from 'agora-agents';

通过 SessionOptions 的 name 字段设置发送给声网 API 的智能体实例名;省略时自动生成 agent-{timestamp}。

状态机

会话状态会按以下流程推进:

Text
idle ──► starting ──► running ──► stopping ──► stopped
                         │
                         ▼
                       error
状态变化触发条件
idle → starting调用 start()
starting → runningAPI 返回智能体 ID
starting → errorAPI 请求失败
running → stopping调用 stop()
stopping → stoppedAPI 确认智能体已停止
stopping → error停止请求失败,且智能体并未提前停止
running → error交互过程中发生不可恢复错误
表格内容超出当前宽度,可横向滚动查看更多列。

在 stopped 或 error 状态下,也可以再次调用 start() 以重启会话。

方法

AgentSession 实例提供以下方法。

start()

启动智能体会话。如果未提供 token,则自动生成 token,随后发送启动请求并返回智能体 ID。

TypeScript
start(): Promise<string>
  • 状态流转:idle / stopped / error → starting → running
  • 若在 starting、running 或 stopping 状态下调用,则抛出异常
  • 若数字人配置无效(例如 TTS 采样率不匹配),则抛出异常
  • 各服务商均为 BYOK,会按 Agent 上配置的服务商凭据发送配置

stop()

停止智能体会话,并让智能体退出频道。如果智能体已经停止,例如由于空闲超时自动退出,则该方法会静默返回,而不会因为 404 报错。

TypeScript
stop(): Promise<void>
  • 状态流转:running → stopping → stopped
  • 仅可在 running 状态下调用,否则抛出异常

say(text, options?)

指示智能体播报指定文本。

TypeScript
say(text: string, options?: SayOptions): Promise<void>
参数类型是否必填说明
textstring是要让智能体播报的文本
options.prioritySpeakPriority否消息优先级
options.interruptableboolean否该消息是否允许被用户打断
表格内容超出当前宽度,可横向滚动查看更多列。
  • 仅在 running 状态下有效

interrupt()

打断智能体当前正在播报的内容。

TypeScript
interrupt(): Promise<void>
  • 仅在 running 状态下有效

update(config)

在不重启会话的情况下,更新会话中的智能体配置。该方法接收 REST API 格式的部分配置对象。

TypeScript
update(config: AgentConfigUpdate): Promise<void>
  • 仅在 running 状态下有效

getHistory()

获取当前会话的对话历史。该方法要求已有有效的智能体 ID,也就是 start() 必须已成功调用。

TypeScript
getHistory(): Promise<ConversationHistory>

getTurns(options?)

获取当前会话的逐轮分析数据,包括开始/结束事件以及延迟指标。该方法要求已有有效的智能体 ID,且 start() 已成功调用。

TypeScript
getTurns(options?: GetTurnsOptions): Promise<ConversationTurns>
  • options.page_index:页码,从 1 开始
  • options.page_size:每页返回的轮次数量

getAllTurns(options?)

获取所有轮次分析分页,并合并 turns 数组。该方法要求已有有效的智能体 ID,且 start() 已成功调用。

TypeScript
getAllTurns(options?: Omit<GetTurnsOptions, "page_index">): Promise<ConversationTurns>
  • 要求存在有效的 agentId
  • 对于超长会话,建议使用 getTurns() 按页处理,以避免一次性将所有数据加载到内存中

getInfo()

从 API 获取当前智能体的元数据。该方法要求已有有效的智能体 ID。

TypeScript
getInfo(): Promise<SessionInfo>

on(event, handler)

订阅会话事件。建议在调用 start() 之前注册 handler,以避免错过 started 事件。

TypeScript
on<T>(event: AgentSessionEvent, handler: AgentSessionEventHandler<T>): void

off(event, handler)

取消订阅此前注册的事件 handler。

TypeScript
off<T>(event: AgentSessionEvent, handler: AgentSessionEventHandler<T>): void

事件

会话会发出以下事件。类型详情可参考 AgentSessionEvent 和 AgentSessionEventHandler。

事件数据类型说明
"started"{ agentId: string }智能体成功加入频道
"stopped"{ agentId: string }智能体离开频道
"error"Error发生不可恢复错误
表格内容超出当前宽度,可横向滚动查看更多列。

属性

任意 AgentSession 实例都提供以下只读属性。

属性类型说明
statusstring当前会话状态,可能取值为 "idle"、"starting"、"running"、"stopping"、"stopped"、"error"
idstring | null智能体 ID,在 start() 成功后填充
agentAgent当前会话所基于的智能体配置
appIdstring当前会话使用的声网 App ID
rawAgentsClient直接访问原始 AgentsClient,适用于高级调用场景
表格内容超出当前宽度,可横向滚动查看更多列。

使用 session.raw

你可以通过 session.raw 调用尚未被高层 API 封装的接口:

TypeScript
await session.raw.someNewEndpoint({
  appid: session.appId,
  agentId: session.id!,
});

使用 raw 方法时,需要手动传入 appid 和 agentId。

自带密钥(BYOK)

建议优先在 Agent builder 上配置服务商。各服务商均为 BYOK,需要显式提供对应服务商的凭据。

  • 在 builder 上为各服务商显式提供凭据

服务商

服务商类均从 agora-agents 导入。将这些服务商实例传给 Agent 构建方法 即可。

TypeScript
import {
  AliyunLLM, BytedanceLLM, DeepSeekLLM, TencentLLM, CustomLLM,
  MiniMaxCNTTS, TencentTTS, BytedanceTTS, MicrosoftCNTTS,
  CosyVoiceTTS, BytedanceDuplexTTS, StepFunTTS, GenericTTS,
  FengmingSTT, TencentSTT, MicrosoftCNSTT,
  SensetimeAvatar, SpatiusAvatar,
} from 'agora-agents';

采用 STT → LLM → TTS 的级联流程。所有服务商均为 BYOK,需要提供对应服务商的凭据。constructor 在必填字段缺失时会抛出错误。

LLM 服务商

与 withLlm() 配合使用。LLM helper 均基于 OpenAI 兼容协议(style = "openai"),共享同一套构造参数,区别仅在于内部写入的 vendor 标识。CN 场景下这些 helper 均为 BYOK,url、model 和 apiKey 均为必填。

类vendor 值服务提供方
AliyunLLMaliyun阿里云百炼(通义千问,如 qwen-plus)
BytedanceLLMbytedance火山引擎(字节跳动豆包,如 doubao-seed-1-6)
DeepSeekLLMdeepseekDeepSeek(如 deepseek-chat)
TencentLLMtencent腾讯混元(如 hunyuan-turbos-latest)
CustomLLMcustom任意 OpenAI 兼容协议的 LLM
表格内容超出当前宽度,可横向滚动查看更多列。

以上 helper 共用相同的构造参数:

TypeScript
import { AliyunLLM } from 'agora-agents';

const llm = new AliyunLLM({
  url: 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions',
  model: 'qwen-plus',
  apiKey: 'your-api-key',
});
配置项类型是否必填说明
urlstring是兼容 OpenAI 聊天补全接口的端点
modelstring是模型名称
apiKeystring是服务商 API 密钥
maxHistorynumber否缓存的最大对话历史条数
systemMessagesRecord<string, unknown>[]否附加系统消息列表
greetingMessagestring否智能体问候语
failureMessagestring否LLM 调用失败时播报的消息
inputModalitiesstring[]否输入模态。默认值:["text"]
outputModalitiesstring[]否输出模态
paramsRecord<string, unknown>否透传给模型的附加 LLM 参数
headersRecord<string, string>否转发给 LLM 服务商的自定义 HTTP 请求头
greetingConfigsLlmGreetingConfigs否问候语播放配置
templateVariablesRecord<string, string>否消息模板变量
toolsLlmTool[]否同步自定义工具定义;需要同时启用 withTools(true)
表格内容超出当前宽度,可横向滚动查看更多列。

tools 用于声明供 LLM 选择调用的自定义工具。每个工具包含模型可见的函数定义,以及同步 GET 或 POST 请求的服务端配置;withTools(true) 同时适用于 tools 和 MCP 服务器配置。

信息

自定义 LLM 路由复用 CustomLLM,因此即便是 BYOK 路径,apiKey、model、url 均为必填。

语音合成服务商

与 withTts() 配合使用。sampleRate(或对应字段)决定数字人兼容性,详见 withAvatar()。所有 TTS 类均支持 skipPatterns 和 additionalParams。

MiniMaxCNTTS

MiniMax TTS 为 BYOK,始终要求 key 和 model。此外必须提供 voiceSetting.voice_id 或非空的 timberWeights 之一。

TypeScript
new MiniMaxCNTTS(options: MiniMaxCNTTSOptions)
配置项类型是否必填说明
keystring是MiniMax API 密钥
modelstring是MiniMax TTS 模型
voiceSettingMiniMaxCNVoiceSetting条件必填音色设置;未提供 timberWeights 时必须设置且 voice_id 非空
timberWeightsMiniMaxCNTimberWeight[]条件必填混合音色权重;未提供 voiceSetting.voice_id 时必填,至少一项
audioSettingMiniMaxCNAudioSetting否音频设置(sample_rate)
pronunciationDictMiniMaxCNPronunciationDict否发音词典(tone: string[])
languageBooststring否语言增强策略
skipPatternsnumber[]否跳过括号内容的规则配置
additionalParamsRecord<string, unknown>否附加 MiniMax TTS 参数
表格内容超出当前宽度,可横向滚动查看更多列。

MiniMaxCNVoiceSetting 字段:voice_id(必填)、speed?、vol?、pitch?、emotion?、latex_read?、english_normalization?。MiniMaxCNTimberWeight 字段:voice_id、weight。

TencentTTS

TypeScript
new TencentTTS(options: TencentTTSOptions)
配置项类型是否必填说明
appIdstring是腾讯云 TTS 应用 ID
secretIdstring是腾讯云 TTS 密钥 ID
secretKeystring是腾讯云 TTS 密钥
voiceTypenumber是腾讯云 TTS 音色类型
volumenumber否音量
speednumber否语速
emotionCategorystring否情感类别
emotionIntensitynumber否情感强度
skipPatternsnumber[]否跳过括号内容的规则配置
additionalParamsRecord<string, unknown>否附加腾讯云 TTS 参数
表格内容超出当前宽度,可横向滚动查看更多列。

BytedanceTTS

TypeScript
new BytedanceTTS(options: BytedanceTTSOptions)
配置项类型是否必填说明
tokenstring是字节跳动 TTS token
appIdstring是字节跳动 TTS 应用 ID
clusterstring是字节跳动 TTS cluster
voiceTypestring是字节跳动 TTS 音色类型
speedRationumber否语速比例
volumeRationumber否音量比例
pitchRationumber否音调比例
emotionstring否情感
skipPatternsnumber[]否跳过括号内容的规则配置
additionalParamsRecord<string, unknown>否附加字节跳动 TTS 参数
表格内容超出当前宽度,可横向滚动查看更多列。

MicrosoftCNTTS

sampleRate 可取 16000、24000 或 48000,并参与数字人采样率校验。

TypeScript
new MicrosoftCNTTS<SR extends MicrosoftCNSampleRate>(options: MicrosoftCNTTSOptions<SR>)
配置项类型是否必填说明
keystring是Microsoft Azure 订阅密钥
regionstring是Azure 区域
voiceNamestring是音色名称
sampleRate16000 | 24000 | 48000否采样率,单位 Hz
speednumber否语速倍率
volumenumber否音量
skipPatternsnumber[]否跳过括号内容的规则配置
additionalParamsRecord<string, unknown>否附加 Microsoft TTS 参数
表格内容超出当前宽度,可横向滚动查看更多列。

GenericTTS

自定义 OpenAI 兼容 HTTP TTS。url 必填,且必须是 HTTP 或 HTTPS 绝对地址;缺失 url、地址格式错误或使用 ws:、wss: 等非 HTTP(S) 协议时,constructor 会抛出错误。合法地址会序列化为 tts.vendor = "generic_http"。

TypeScript
new GenericTTS(options: GenericTTSOptions)
配置项类型是否必填说明
urlstring是自定义 TTS 服务的 HTTP(S) endpoint
headersRecord<string, string>否转发给 TTS 服务的自定义 HTTP 请求头;未设置时不会写入 headers
apiKeystring否TTS 服务鉴权 API 密钥
modelstring否TTS 模型名
voicestring否音色名
speednumber否语速
sampleRatenumber否输出音频采样率,单位为 Hz。如果你的 TTS 服务暂不支持多采样率,请确保返回音频的采样率与该配置一致。
responseFormat"pcm"否输出音频格式;当前 ConvoAI 支持 pcm
instructionstring否语音风格、情绪或其他播报指令
additionalParamsRecord<string, unknown>否透传给 TTS 服务的其他参数;同名字段会被显式字段覆盖
skipPatternsnumber[]否控制 TTS 跳过特定文本模式
表格内容超出当前宽度,可横向滚动查看更多列。

CosyVoiceTTS

TypeScript
new CosyVoiceTTS(options: CosyVoiceTTSOptions)
配置项类型是否必填说明
apiKeystring是CosyVoice API 密钥
modelstring是CosyVoice 模型
sampleRatenumber是采样率,单位 Hz
voicestring是CosyVoice 音色
skipPatternsnumber[]否跳过括号内容的规则配置
additionalParamsRecord<string, unknown>否附加 CosyVoice TTS 参数
表格内容超出当前宽度,可横向滚动查看更多列。

BytedanceDuplexTTS

字节跳动全双工 TTS(vendor = "bytedance_duplex")。

TypeScript
new BytedanceDuplexTTS(options: BytedanceDuplexTTSOptions)
配置项类型是否必填说明
appIdstring是字节跳动 Duplex TTS 应用 ID
tokenstring是字节跳动 Duplex TTS token
speakerstring是字节跳动 Duplex TTS speaker
skipPatternsnumber[]否跳过括号内容的规则配置
additionalParamsRecord<string, unknown>否附加字节跳动 Duplex TTS 参数
表格内容超出当前宽度,可横向滚动查看更多列。

StepFunTTS

TypeScript
new StepFunTTS(options: StepFunTTSOptions)
配置项类型是否必填说明
apiKeystring是StepFun TTS API 密钥
modelstring是StepFun TTS 模型
voiceIdstring是StepFun TTS 音色 id
skipPatternsnumber[]否跳过括号内容的规则配置
additionalParamsRecord<string, unknown>否附加 StepFun TTS 参数
表格内容超出当前宽度,可横向滚动查看更多列。

语音识别服务商

与 withStt() 配合使用。

FengmingSTT

声网自研的「风鸣」STT 服务,无需外部凭据,输出 asr.vendor = "fengming"。可选传入 keywords 热词列表和 additionalParams,这些参数会写入 asr.params。

TypeScript
new FengmingSTT(options?: FengmingSTTOptions)
配置项类型是否必填说明
keywordsstring[]否热词列表,用于提升 ASR 识别准确率
additionalParamsRecord<string, unknown>否附加 Fengming 参数,合并进 asr.params
表格内容超出当前宽度,可横向滚动查看更多列。

TencentSTT

TypeScript
new TencentSTT(options: TencentSTTOptions)
配置项类型是否必填说明
keystring是腾讯云 ASR 参数 secret_id
appIdstring是腾讯云 App ID
secretstring是腾讯云 ASR 参数 secret_key
engineModelTypestring是引擎模型类型
voiceIdstring是会话标识
languagestring否语言代码
additionalParamsRecord<string, unknown>否附加服务商参数,合并进 params
表格内容超出当前宽度,可横向滚动查看更多列。

MicrosoftCNSTT

TypeScript
new MicrosoftCNSTT(options: MicrosoftCNSTTOptions)
配置项类型是否必填说明
keystring是Azure 语音服务密钥
regionstring是Azure 区域,例如 'chinaeast2'
languagestring是语言代码,例如 'zh-CN'
phraseListstring[]否提升识别准确率的短语列表
additionalParamsRecord<string, unknown>否附加服务商参数,合并进 params
表格内容超出当前宽度,可横向滚动查看更多列。

数字人服务商

与 withAvatar() 配合使用。数字人服务商会声明所需 TTS 采样率;如果返回 0,则不强制要求特定的 TTS 采样率。

SensetimeAvatar

商汤数字人。如果 agoraUid、appId 或 appKey 为空,构造函数会抛出错误。

TypeScript
new SensetimeAvatar(options: SensetimeAvatarOptions)
配置项类型是否必填说明
agoraUidstring是数字人视频流使用的 RTC UID
appIdstring是商汤 App ID(输出为 appId)
appKeystring是商汤 App Key
sceneListRecord<string, unknown>[]是商汤场景列表
agoraTokenstring否数字人鉴权所用的 RTC token
enableboolean否是否启用数字人。默认值:true
additionalParamsRecord<string, unknown>否附加商汤数字人参数,合并进 params
表格内容超出当前宽度,可横向滚动查看更多列。

SpatiusAvatar

Spatius 数字人。如果 spatiusApiKey、spatiusAppId、spatiusAvatarId 或 agoraUid 为空,构造函数会抛出错误。

TypeScript
new SpatiusAvatar(options: SpatiusAvatarOptions)
配置项类型是否必填说明
spatiusApiKeystring是Spatius API 密钥
spatiusAppIdstring是Spatius 应用 ID
spatiusAvatarIdstring是Spatius 数字人 ID
agoraUidstring是Avatar 视频流对应的 UID
regionstring否Spatius 服务区域
agoraTokenstring否Avatar 鉴权 RTC token
sampleRate16000 | 24000否写入 Spatius 服务商参数的音频采样率,单位 Hz
sessionExpireMinutesnumber否Spatius 会话过期时间,单位分钟
enableboolean否是否启用数字人。默认值:true
additionalParamsRecord<string, unknown>否附加 Spatius 数字人参数,合并进 params
表格内容超出当前宽度,可横向滚动查看更多列。

Token 工具

用于生成和管理 token 的辅助函数与类。当你需要精确控制 token 有效期,或在会话之外生成 token 时,可使用这些能力。

TypeScript
import { generateConvoAIToken, ExpiresIn } from 'agora-agents';

generateConvoAIToken(options)

生成一个同时具备 RTC 和 RTM 权限的对话式 AI 引擎 token。这与 SDK 在 app-credentials 模式下自动生成的 token 相同。当你需要在会话之外生成 token,或希望将预生成的 token 传给 SessionOptions.token 时,可使用该方法。

TypeScript
generateConvoAIToken(options: GenerateConvoAITokenOptions): string
配置项类型是否必填说明
appIdstring是声网 App ID
appCertificatestring是声网 App 证书
channelNamestring是token 所授权访问的频道
accountstring是token 颁发给哪个 UID,使用字符串形式表示
tokenExpirenumber否token 有效期,单位秒。默认值:86400。有效范围:1–86400
表格内容超出当前宽度,可横向滚动查看更多列。

返回值: string — 生成后的 token。

TypeScript
const token = generateConvoAIToken({
  appId: 'your-app-id',
  appCertificate: 'your-app-certificate',
  channelName: 'support-room-123',
  account: '1',
  tokenExpire: ExpiresIn.hours(12),
});

ExpiresIn

用于指定 token 有效期的辅助类。可与 SessionOptions.expiresIn 或 generateConvoAIToken 配合使用。所有值都会经过校验,并受限于声网的最大值 86400 秒(24 小时)。

值或方法返回值说明
ExpiresIn.DAY8640024 小时,即声网允许的最大值,也是默认值
ExpiresIn.hours(n)number返回 n 小时对应的秒数。若 n ≤ 0 则抛出异常;若超过 24 小时则发出警告并截断至上限
ExpiresIn.minutes(n)number返回 n 分钟对应的秒数。若 n ≤ 0 则抛出异常;若超过 24 小时则发出警告并截断至上限
表格内容超出当前宽度,可横向滚动查看更多列。

类型与枚举

AgoraClient、Agent、AgentSession 及各服务商类会共用以下类型与枚举。

Area

用于 API 路由的区域枚举。通过 AgoraClient 的 area 选项传入。固定使用 Area.CN。

TypeScript
import { Area } from 'agora-agents';
值区域
Area.CN中国大陆
表格内容超出当前宽度,可横向滚动查看更多列。

Area.CN 的路由信息:

项目值
主区域前缀api-cn-east-1
备用区域前缀api-cn-north-1
主域名后缀sd-rtn.com
备用域名后缀agora.io
请求路径/cn/api/conversational-ai-agent
表格内容超出当前宽度,可横向滚动查看更多列。

AgoraAuthMode

表示 AgoraClient 实例上的已解析鉴权模式,可通过 client.authMode 读取。

TypeScript
type AgoraAuthMode = "app-credentials" | "token" | "basic";
值说明
"app-credentials"提供了 App ID 和 App 证书,SDK 自动生成 token
"token"提供了预先构造的 authToken
"basic"提供了 customerId 和 customerSecret
表格内容超出当前宽度,可横向滚动查看更多列。

AgentSessionEvent

session.on() 和 session.off() 可用的所有事件名的联合类型。

TypeScript
type AgentSessionEvent = "started" | "stopped" | "error";

AgentSessionEventHandler

会话事件回调的泛型 handler 类型。

TypeScript
type AgentSessionEventHandler<T> = (data: T) => void;
事件T
"started"{ agentId: string }
"stopped"{ agentId: string }
"error"Error
表格内容超出当前宽度,可横向滚动查看更多列。

SpeakPriority

用于控制智能体在处理 say() 调用时,如何与当前活动状态交互。

TypeScript
type SpeakPriority = "INTERRUPT" | "APPEND" | "IGNORE";
值说明
"INTERRUPT"智能体立即停止当前播报并输出该消息
"APPEND"将消息加入队列,待当前播报结束后输出
"IGNORE"如果智能体当前正在播报,则直接丢弃该消息
表格内容超出当前宽度,可横向滚动查看更多列。

AgoraError

当 API 返回 4xx 或 5xx 响应时抛出。可捕获该错误以检查状态码和响应包体。

TypeScript
import { AgoraError } from 'agora-agents';

try {
  const agentId = await session.start();
} catch (err) {
  if (err instanceof AgoraError) {
    console.error('Status:', err.statusCode);
    console.error('Message:', err.message);
    console.error('Body:', err.body);
  }
}
属性类型说明
statusCodenumberAPI 返回的 HTTP 状态码
messagestring可读的错误消息
bodyunknown原始响应包体
表格内容超出当前宽度,可横向滚动查看更多列。

这个页面有帮助吗?