You need to enable JavaScript to run this app.
文档中心
实时音视频

实时音视频

复制全文
下载 pdf
开发指南
传入文本直接提问
复制全文
下载 pdf
传入文本直接提问
除了语音输入,您还可以通过发送文本指令的方式,模拟用户的文字输入,直接向 AI 发起提问并立即获得语音回复。​
应用场景​
​
场景​
描述​
电商直播​
将观众在弹幕或私信中提出的问题,实时发送给正在直播的 AI 主播进行回答。​
特殊内容输入​
当问题包含生僻字、专业术语、复杂编码或同音字较多时,用户通过文本输入可以确保提问的准确性。​
​
使用限制​
该功能在启用端到端实时语音大模型(S2SConfig)时无效。详细说明,请参见接入端到端实时语音大模型。​
通过服务端实现​
调用 UpdateVoiceChat 接口传入大模型上下文,可参考以下示例:​
​
{​
"AppId": "<YOUR_AppId>", // 与 StartVoiceChat 的一致​
"RoomId": "<YOUR_RoomId>", // 与 StartVoiceChat 的一致​
"TaskId": "<YOUR_TaskId>", // 与 StartVoiceChat 的一致 ​
"Command": "ExternalTextToLLM", // 必须为该值​
"Message": "给一些出装建议。用户当前:金币落后,法师,脆皮。", // 传入自定义文本,文本末尾必须包含标点符号。​
"InterruptMode": 2 // 传入大模型上下文内容处理优先级,2表示中优先级,AI会在当前交互结束后将文本送入大模型处理​
}​
​
通过客户端实现​
调用客户端 API sendUserBinaryMessage(以 Android 端为例)构造一个 Command 为 ExternalTextToLLM 的控制消息。​
  • userId:填入 AI 的标识 ID(即 StartVoiceChat 配置的 AgentConfig.UserId)。​
  • buffer:需遵循 TLV 二进制格式:​
​alt​​
​
参数名​
类型​
描述​
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 会将文本送入大模型进行处理并输出结果。​
​
你可参考以下示例从客户端实现自定义传入大模型上下文。​
​
C++
Java
TypeScript
​
​
// 传入大模型上下文信息​
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.07.29 15:18:57
这个页面对您有帮助吗?
有用
有用
无用
无用