问题截图:

回答:
csk6 多模态开发套件在返回主页面的时候会发这个消息,用于清除记忆,不会影响自定义编排应用。
问题截图:

问题原因:
在自定义编排中,tts 合成节点的时间限制为 5s ;链路的时间限制为 10s。超过时间之后就不会下发 tts 合成的 url 给端侧进行播放了。所以可能是因为自建的第三方模型(比如coze、Dify等等)的响应时间过长,导致节点超时。
解决办法:
首先,需要在节点中下发心跳节点,维持链路不断连。在 《接入Dify》 文档的示例内已经添加了心跳保持链路不断连的节点了

然后,需要在调用第三方模型的节点中增加垫音的代码。

//启动定时器:每隔3秒发送消息
let statusInterval = null;
let hasReceivedResponse = false; // 标记是否已收到响应
statusInterval = setInterval(() => {
if (!hasReceivedResponse) {
let waitingStausMsg = RED.util.cloneMessage(msg);
waitingStausMsg.payload = {
fill: "yellow",
shape: "dot",
text: "等待响应中..." + new Date().toLocaleTimeString()
};
//发送垫音,防止响应过慢导致【tts合成】节点不下发 tts url 给端侧
let waitingMsg = RED.util.cloneMessage(msg);
waitingMsg._output = {
text: "",
stream: stream,
is_last: false,
}
node.send([waitingMsg, waitingStausMsg]);
}
}, 3000); // 每3秒执行一次
// 设置请求超时后也清除定时器
const requestTimeout = setTimeout(() => {
if (statusInterval) {
clearInterval(statusInterval);
statusInterval = null;
}
}, timeout);
// 用于收到响应后,清除定时任务
function clearAllTimers() {
hasReceivedResponse = true;
if (statusInterval) {
clearInterval(statusInterval);
statusInterval = null;
}
if (requestTimeout) {
clearTimeout(requestTimeout);
}
}
回答:
通常来说,设备id会在 msg.queryParams.deviceID ,您可以使用 【function】 节点把这个设备id 提取出来。

回答:
以 Dify 示例为例子演示如何修改音色(发音人),其他示例比如 Coze扣子智能体或者豆包都可以参考:
| 发音人参数 | 音色 |
|---|---|
x4_lingxiaoyue_oral |
成人女声 |
x4_lingxiaoqi_oral |
成人女声 |
x4_lingfeizhe_oral |
成人男生 |
x4_lingyouyou_oral |
儿童女声 |
