You need to enable JavaScript to run this app.
实时音视频

实时音视频

复制全文
进阶功能
传入文本直接提问
复制全文
传入文本直接提问

除了语音输入,您还可以通过发送文本指令的方式,模拟用户的文字输入,直接向 AI 发起提问并立即获得语音回复。

应用场景

场景

描述

电商直播

将观众在弹幕或私信中提出的问题,实时发送给正在直播的 AI 主播进行回答。

特殊内容输入

当问题包含生僻字、专业术语、复杂编码或同音字较多时,用户通过文本输入可以确保提问的准确性。

通过服务端实现

调用 UpdateVoiceChat 接口传入大模型上下文,可参考以下示例:

{
  "AppId": "YOUR_AppId",             // 与 StartVoiceChat 的一致
  "RoomId": "YOUR_RoomId",           // 与 StartVoiceChat 的一致
  "TaskId": "YOUR_TaskId",           // 与 StartVoiceChat 的一致    
  "Command": "ExternalTextToLLM",    //必须为该值
  "Message": "给一些出装建议。用户当前:金币落后,法师,脆皮",  // 传入自定义文本
  "InterruptMode": 2, // 传入大模型上下文内容处理优先级,2表示中优先级,AI会在当前交互结束后将文本送入大模型处理
}

通过客户端实现

使用 sendUserBinaryMessage 接口构造一个 Command 为 ExternalTextToLLM 的控制消息。

  • userId:填入 AI 的标识 ID(即 StartVoiceChat 配置的 AgentConfig.UserId)。
  • buffer:需遵循 TLV 二进制格式:

Image

参数名

类型

描述

magic_number

binary

消息格式标识符,当前场景消息格式固定为 ctrl,用于标识该消息为控制消息。

length

binary

传入大模型上下文消息长度,单位为字节,采用大端序(Big-endian)存储方式,用于说明 control_message 字段的字节长度。

control_message

binary

传入大模型上下文配置信息,采用 JSON 格式,具体内容格式参见control_message

control_message

参数名

类型

描述

Command

String

控制命令,此处填入 ExternalTextToLLM

Message

String

传入大模型上下文内容,长度不超过 200 个字符。

InterruptMode

Int

传入大模型上下文内容处理优先级。

  • 1:高优先级。 AI 会终止当前交互,将文本送入大模型进行处理并输出结果。
  • 2:中优先级。 AI 会在当前交互结束后,将文本送入大模型进行处理并输出结果。
  • 3:低优先级。如果此时 AI 正在交互, AI 会直接丢弃传入的文本内容。如果未在交互, AI 会将文本送入大模型进行处理并输出结果。

你可参看以下示例从客户端实现自定义传入大模型上下文。

// 传入大模型上下文信息
void sendLLMMessage(const std::string &uid, const std::string& content) {
    nlohmann::json json_data;
    json_data["Command"] = "ExternalTextToLLM";
    json_data["Message"] = content;
    json_data["InterruptMode"] = 1; 
    sendUserBinaryMessage(uid, json_data.dump());
}

void buildBinaryMessage(const std::string& magic_number, const std::string& message, size_t& binary_message_length, std::shared_ptr<uint8_t[]>& binary_message) {
    auto magic_number_length = magic_number.size();
    auto message_length = message.size();

    binary_message_length = magic_number_length + 4 + message_length;
    binary_message = std::shared_ptr<uint8_t[]>(new uint8_t[binary_message_length]);
    std::memcpy(binary_message.get(), magic_number.data(), magic_number_length);
    binary_message[magic_number_length] = static_cast<uint8_t>((message_length >> 24) & 0xFF);
    binary_message[magic_number_length+1] = static_cast<uint8_t>((message_length >> 16) & 0xFF);
    binary_message[magic_number_length+2] = static_cast<uint8_t>((message_length >> 8) & 0xFF);
    binary_message[magic_number_length+3] = static_cast<uint8_t>(message_length & 0xFF);
    std::memcpy(binary_message.get()+magic_number_length+4, message.data(), message_length);
}

// userId 为房间内 AI 的 ID(对应 StartVoiceChat 中的 AgentConfig.UserId)
int sendUserBinaryMessage(const std::string &uid, const std::string& message) {
    if (rtcRoom_ != nullptr)
    {
        size_t length = 0;
        std::shared_ptr<uint8_t[]> binary_message = nullptr;
        buildBinaryMessage("ctrl", message, length, binary_message);
        return rtcRoom_->sendUserBinaryMessage(uid.c_str(), static_cast<int>(length), binary_message.get());
    }
    return -1;
}
最近更新时间:2026.01.23 14:05:56
这个页面对您有帮助吗?
有用
有用
无用
无用