创建对话式智能体

更新时间不可用

创建一个对话式智能体 (Conversational AI agent) 实例,并加入 RTC 频道。

POST
https://api.agora.io/cn/api/conversational-ai-agent/v2/projects/{appid}/join

路径参数

appidstring
必填

你的项目使用的 App ID。

请求 Header

Authorizationstring
必填

发送 HTTP 请求时,你可以从以下鉴权方式中任选其一:

  1. 使用 Token 认证(推荐):参考实现 HTTP 鉴权生成 Token 并填入 Authorization Header。传参示例:Authorization: agora token="007abcxxxxxxx123"。
  2. 使用 Basic Auth:参考实现 HTTP 鉴权生成 Base64 编码的 Authorization 字段。传参示例:Authorization: Basic NDI1OTQ3N2I4MzYy...YwZjA=。

请求 Body

字段
namestring
必填

智能体唯一标识,相同标识不可重复创建。

智能体详细配置。

channelstring
必填

智能体加入的 RTC 频道名。

tokenstring

加入 RTC 频道使用的 Token,即用于鉴权的动态密钥。如果你的项目已启用 App 证书,则务必在该字段中传入你项目的动态密钥。详见使用 Token 鉴权。

agent_rtc_uidstring
必填

智能体在 RTC 频道内的用户 ID。

注意

同一 channel 内的用户 ID 不可重复,否则智能体加入频道会失败。

remote_rtc_uidsarray<string>
必填

智能体在 RTC 频道中订阅的用户 ID 列表,只有订阅的用户才能与智能体互动。目前只支持订阅一个用户 ID。

enable_string_uidboolean

是否启用 String UID:

  • true:智能体和订阅用户 ID 均使用 String UID。
  • false:(默认)智能体和订阅用户 ID 均使用 Int UID。

注意

同一频道内,Int 型和 String 型的用户 ID 不可混用。更多使用 String UID 的相关信息请参考如何使用 String 型用户 ID。

idle_timeoutinteger

RTC 频道的最大空闲时间,单位为秒。系统检测到 remote_rtc_uids 中指定的用户已全部离开频道后,会开始计算空闲时长;空闲时长超过该值时,智能体会自动停止并退出频道。

  • 取值范围为 [0, 259200],默认值为 30。其中 259200 秒即 72 小时,超过该值会报错。
  • 设置为 0 仅表示不因“频道空闲超时”退出。
  • 无论 idle_timeout 取值为何,单次任务的最长运行时间均为 72 小时;达到 72 小时后,智能体会自动退出。

高级功能配置。

自动语音识别 (ASR) 配置。

文本转语音 (TTS) 模块配置。

大语言模型 (LLM) 配置。

数字人 (Avatar) 配置。

对话轮次检测设置,用于控制语音活动检测和对话轮次判定逻辑。

说明

自 v2.6 起,turn_detection 仅负责开始说话(SoS)和结束说话(EoS)的检测。关键词打断和关闭打断后的处理策略已迁移至顶级 interruption 字段。

智能打断控制配置,用于统一管理智能体被用户打断的行为策略。

选择性注意力锁定(Selective Attention Locking, SAL)配置。

说明

该功能目前处于 Beta 阶段。

labelsobject

自定义标签,键值对形式,键为标签名,值为标签值。用于让智能体携带自定义业务信息。

这些自定义信息会与智能体绑定,并在对话式 AI 引擎所有类型消息通知回调的 payload 字段中返回,可用于实现自定义业务逻辑,例如标记活动 ID、客户分组、业务场景等。

RTC 媒体内容加密配置。

承接词功能 (Beta) 配置,用于在 LLM 响应等待时播报承接词,缓解用户等待焦虑,提升对话流畅度。

承接词播报遵循以下规则:

  • 播报顺序:当多个承接词或 LLM 响应等待播报时,按照文本到达的先后顺序进行播报。
  • 打断控制:继承全局配置中的打断模式设置 (turn_detection.config)。

智能体参数配置。

响应

  • 若返回的状态码为 200 则表示请求成功。响应包体中包含本次请求的结果。
  • 若返回的状态码不为 200 则表示请求失败。响应包体中包含错误的类别和描述,你可以参考响应状态码了解可能的原因。

响应 Body

agent_idstring

智能体唯一标识。

create_tsinteger

智能体创建时间戳。

statusstring

智能体运行状态:

  • IDLE (0):空闲状态的智能体。
  • STARTING (1):正在启动的智能体。
  • RUNNING (2):正在运行的智能体。
  • STOPPING (3):正在停止的智能体。
  • STOPPED (4):已完成退出的智能体。
  • FAILED (6):执行失败的智能体。

请求示例

curl --request POST \
  --url "https://api.agora.io/cn/api/conversational-ai-agent/v2/projects/:appid/join" \
  --header 'Authorization: agora token="007abcxxxxxxx123"' \
  -H 'Content-Type: application/json' \
  -d '{
  "name": "unique_name",
  "properties": {
    "channel": "channel_name",
    "token": "token",
    "agent_rtc_uid": "123",
    "remote_rtc_uids": [
      "321"
    ],
    "enable_string_uid": false,
    "idle_timeout": 120,
    "llm": {
      "url": "https://api.minimax.chat/v2/text/chatcompletion_v2",
      "api_key": "xxx",
      "system_messages": [
        {
          "role": "system",
          "content": "You are a helpful chatbot."
        }
      ],
      "greeting_message": "您好,有什么可以帮您?",
      "failure_message": "抱歉,我无法回答这个问题。",
      "max_history": 32,
      "params": {
        "model": "abab6.5s-chat",
        "max_token": 1024,
        "userName": "Tomas"
      }
    },
    "asr": {
      "language": "zh-CN",
      "vendor": "fengming"
    },
    "tts": {
      "vendor": "minimax",
      "skip_patterns": [
        1
      ],
      "params": {
        "group_id": "xxxx",
        "key": "xxxx",
        "model": "speech-01-turbo",
        "voice_setting": {
          "voice_id": "female-shaonv",
          "speed": 1,
          "vol": 1,
          "pitch": 0,
          "emotion": "happy"
        },
        "audio_setting": {
          "sample_rate": 16000
        }
      }
    }
  }
}'

响应示例

{
  "agent_id": "1NT29X10YHxxxxxWJOXLYHNYB",
  "create_ts": 1737111452,
  "status": "RUNNING"
}