For the complete documentation index, see llms.txt. This page is also available as Markdown.

连接 API

为你的 Convai 角色建立一个实时聊天机器人会话,使用户能够通过音频或视频连接并保持对话上下文。

该 Connect API 在终端用户与 Convai 角色之间建立一个实时交互会话。重用返回的 character_session_id 以在连接之间继续对话上下文。

连接到角色

POST https://live.convai.com/connect

标头

名称
输入
描述

X-API-Key*

字符串

你的 Convai API 密钥。

Content-Type

字符串

必须设置为 application/json.


请求体

单角色会话只需要 character_id;其他所有字段都有服务器端默认值。多角色房间发送 characters 以及一个非空的 end_user_id 代替 character_id.

会话标识

名称
输入
描述

character_id

字符串

要连接的角色的唯一 ID。单角色会话时必填;当你发送 characters.

connection_type

字符串

连接模式。 "audio" (默认), "video",或者 "text".

character_session_id

字符串

用于保持对话连续性的现有会话 ID。若省略,将生成新的。

end_user_id

字符串

你为终端用户提供的唯一标识符。用于标记会话并启用长期记忆。与发送 characters以及加入带有 mode: "join" 和房间定位器(room_session_id 或 shared_session_key)的现有房间时必填,而不是角色。

end_user_metadata

JSON

与终端用户相关的任意元数据。会在响应中回传。

多角色房间

多角色房间仅对已启用该功能的账号可用,并且仍受你账号的角色和参与者限制约束。

名称
输入
描述

characters

JSON

有序列表,包含 { "character_id", "character_session_id" } 条目,每个角色实例一个;第一项是初始实例。 character_id 是必需的,且必须是裸 UUID; character_session_id 是可选的,并延续该实例之前的对话。发送其中之一, character_id 或 characters,不要同时发送。参见 使用多角色会话.

group_chat

布尔

将房间设为群聊模式,其中多个实例会回答同一条消息。默认 false。在创建时固定;加入时会继承。参见 构建群聊.

room_brief

字符串

最多 4000 个字符,作为上下文提供给房间中的每个角色,包括之后添加的角色。在创建时固定。仅在与 group_chat: true.

角色行为与上下文

名称
输入
描述

action_config

JSON

本次会话的语义动作能力和可选的客户端执行工具声明。参见 响应契约与解析.

能力

JSON

显式协议选择。省略此字段以保留旧版 v1 响应结构。

dynamic_info

JSON

影响对话流程的实时上下文数据。

scene_description

JSON

当前场景或环境的描述。仅作为描述性上下文—— 不授予动作能力.

narrative_template_keys

JSON

替换到角色提示模板中的键/值对。

emotion_config

JSON

情绪检测与表达的配置。

thinking_mode

布尔

在响应前启用扩展模型推理。默认 false.

respond_modes

JSON

按模态控制角色何时必须响应。

模型与提供方

名称
输入
描述

llm_provider

字符串

"dynamic" (默认), "gemini-live", "gemini-live-beta",或者 "gemini-baml".

stt_provider

字符串

为本次会话覆盖语音转文字提供方。

disable_live_fallback

布尔

防止回退到非实时模型。默认 true.

音频、语音和轮次切换

名称
输入
描述

audio_config

JSON

音频输出行为。仅适用于 LiveKit 传输(默认)。

default_tts_enabled

布尔

机器人音频是否默认启用。默认 true。之后可通过 tts-toggle.

default_stt_enabled

布尔

麦克风输入是否默认启用。默认 true。之后可通过 stt-toggle.

vad_params

JSON

语音活动检测调优: 置信度, start_secs, stop_secs, min_volume.

turn_detection_config

JSON

轮次检测策略覆盖项。

头像与视觉

名称
输入
描述

blendshape_provider

字符串

"not_provided" (默认), "ovr",或者 "neurosync"。决定你接收哪类面部动画消息。

blendshape_config

JSON

提供方特定的 blendshape 配置。

vision_input_config

JSON

视觉输入配置,包括采样窗口。启用由 vision-status 和 vision-trigger.

video_track_name

字符串

传入视频轨道的名称。默认 "camera".

多参与者会话

名称
输入
描述

max_num_participants

整数

房间中的最大 人类 参与者数量。默认 1。这里不计算角色实例;名册大小由 characters 设定,并受账号上限限制。

shared_session_key

字符串

用于确定性地将参与者放入同一房间的分组键。1–128 个字符,字母数字加 - 和 _.

mode

字符串

"create" (默认)或 "join".

room_name

字符串

要创建或加入的显式房间名称。

诊断

名称
输入
描述

debug

布尔

启用 RTVI 指标, turn-trace,并且 server-log 数据通道上的消息。

debug_row_cap

整数

覆盖每个会话的诊断行上限。仅在 debug 为 true.

invocation_metadata

JSON

调用方提供的用于归因和分析的元数据。

字段

actions —— 角色可发出的语义动作名称。接受字符串数组或 { "value": "..." } 对象。Convai 会在通过 action-response.

objects —— { name, description } 条目,用于锚定并验证语义动作目标。

characters —— { name, bio } 条目,用于锚定并验证语义动作目标。

current_attention_object —— 用户当前正在看或提及的对象名称。为诸如 "this", "that",并且 "it"之类的代词提供锚定。必须与以下项之一匹配: objects[].name 的值。接受字符串或完整对象。

actions, objects,并且 characters 限制旧版语义动作投射。仅在 scene_description 中提及的对象不会成为语义动作目标。客户端执行的 v2 工具使用其自己的 JSON Schema 参数,并且在执行前仍需要客户端侧授权。

整个契约可以在会话中途通过 context-update.

字段

audio_routing - 控制音频传送方式:

  • "audio_only" (默认)- 标准 WebRTC 音频轨道(推荐)

  • "data_only" - 通过 audio-data 数据通道接收消息,以便自定义处理

  • "both" - 同时通过音频轨道和数据通道接收

max_chunk_duration_ms - 音频块大小(10-1000ms,默认:100ms)

  • 较低的值 = 更低延迟,更多开销

  • 较高的值 = 更适合不稳定的网络

  • 四舍五入到最接近的 10ms: 95ms → 100ms, 45ms → 50ms

add_wav_header - 在数据通道分片中包含 WAV 头(默认:false)

  • 仅在使用时适用 data_only 或 both 路由


Agentic Actions v2 预览

协议选择彼此独立。只请求你的客户端实现了的行为:

字段
值
行为

capabilities.action_protocol_version

1 或 2

版本 2 启用相关联的客户端工具调用和 action-result.

capabilities.model_output_version

1 或 2

版本 2 启用规范的 model-output 消息。

capabilities.bot_llm_text_mode

"legacy" 或 "raw"

"legacy" 保留过滤后的聊天投射。 "raw" 通过 bot-llm-text流式传输对提供方可见的文本;切勿在未经应用审查的情况下执行或朗读此流。

action_config.tools

工具声明数组

声明由客户端而非 Convai 在验证每次调用后可以执行的工具。需要 action 协议 v2。

每个工具声明都需要 名称, 说明,以及一个以对象为根的 inputSchema。根模式接受 type, properties,并且 required;支持的校验关键字可用于属性模式内部。工具名称必须唯一,必须以字母或下划线开头,并且可以包含字母、数字、下划线或连字符。

候选实现强制执行以下限制:

限制
值

每个连接的工具数

32

工具名称

64 characters

工具描述

1,024 characters

序列化输入模式

16 KiB

输入模式嵌套深度

8

任何 v2 动作选择、v2 模型输出选择,或原始 bot-llm-text 选择都需要 mode: "create",一个单一的 character_id,没有 shared_session_key,并且 max_num_participants: 1。已加入、名册、共享会话和多参与者拓扑都会被拒绝。

角色显式的 启用 Agentic Actions 设置仍然具有权威性。当其关闭时,Convai 不会向模型添加 Actions 契约、语义动作工具或客户端工具模式。当该设置缺失时,带有一个或多个已保存旧版 Character Actions 的角色,会继承对模型输出 v1 和 v2 的启用状态;没有已保存旧版动作的角色,默认对模型输出 v2 关闭。读取这个继承状态不会持久化新设置。即使 Actions 关闭,仍然可以发出仅文本的模型输出 v2。

客户端工具还需要一个支持提供方原生函数调用的已解析模型。仅靠能力协商并不授权某个工具,也不能保证所选模型能够调用它。

工具声明是按连接作用域生效的。一个 context-update 可以替换语义动作列表,但不能替换 action_config.tools;要更改工具集,请重新连接。

当请求包含 能力时,响应会报告所选字段:

如果请求省略 能力,响应也会省略它。此时会话使用 action 协议 v1、模型输出 v1 和旧版 bot-llm-text 行为。


响应

最后六个键会出现在每个响应中,并且仅针对名册房间填充。

字段
输入
描述

session_id

字符串

此实时会话的临时令牌。

request_trace_id

字符串

服务器端 trace ID。请在支持请求中包含它——它会将你的会话与服务器日志、遥测和会话记录关联起来。

character_session_id

字符串

对话会话 ID。稍后在 /connect 中重用它,以继续同一段对话。

room_url

字符串

你的客户端加入的房间 URL。

room_name

字符串

房间名称。仅适用于 LiveKit 传输。

token

字符串

用于加入房间的身份验证令牌。

end_user_id

字符串 | null

从请求中回显。

end_user_metadata

对象 | null

从请求中回显。

能力

对象

仅在请求显式包含时才存在 能力。包含服务器选择的协议字段。

room_session_id

字符串 | null

标识该房间;随每个房间命令发送。适用于任何名册房间,包括一个 mode: "join" 响应; null 用于单角色会话。

active_membership_id

字符串 | null

当前接收用户轮次的角色实例。在创建时,这是第一个 characters 条目;在加入时,则是当时处于活动状态的那个实例,因为 切换活动角色 会改变它。适用于任何 roster 房间; null 用于单角色会话。

route_epoch

整数 | null

发送为 expected_route_epoch 在第一个房间命令中。适用于任何 roster 房间,包括一个 mode: "join" 响应; null 用于单角色会话。

roster_epoch

整数 | null

发送为 expected_roster_epoch 在第一个 character-roster-update。适用于任何 roster 房间,包括一个 mode: "join" 响应; null 用于单角色会话。

partial_dispatch

布尔

true 如果有任何角色实例启动失败。始终 false 用于单角色会话。

characters

数组 | null

每个角色实例一条记录: membership_id, session_id, is_initial, provisioning_status, failure_code, :即要显示给该实例的名称。该字段尽力提供;若不存在,则回退到该 membership 的, 说明,以及其中列出的标识符 使用多角色会话。适用于任何 roster 房间,包括一个 mode: "join" 响应; null 用于单角色会话。


重要说明

重复使用相同的 character_session_id 以在交互之间保持上下文。新的 character_session_id 会在没有先前对话上下文的情况下启动会话。


示例请求


连接后

使用以下方式加入房间 room_url 和 token。从那一刻起,会话完全由 WebRTC 数据通道上的消息以及音频轨道驱动。

最后更新于

这有帮助吗?