使用Watson Assistant V2 API,必须首先创建一个会话句柄(create_session(assistantid)),该句柄将返回会话ID,以用于对消息的单独调用(assistantid,sessionid,request)。会话保持会话状态,因此等效于V1 API的context id参数。
不幸的是,默认情况下似乎有5分钟的会话超时。响应包括以下标头属性:
{...,"x-watson-session-timeout": [
"x-watson-session-timeout",
"session_timeout=300"
],...}
任何尝试通过使用辅助对象的set_default_headers()方法或将可选的标头参数添加到create_session()调用来更改此参数似乎都无效。由于我没有找到有关如何正确更新此参数的任何文档,因此我尝试了几种替代方法:
1)self.assistant.set_default_headers({'x-watson-session-timeout':"['x-watson-session-timeout','session_timeout=3600']"})
2)self.assistant.set_default_headers({'x-watson-session-timeout':"'x-watson-session-timeout','session_timeout=3600'"})
3)self.assistant.set_default_headers({'x-watson-session-timeout':"session_timeout=3600"})
4)self.assistant.set_default_headers({'x-watson-session-timeout':"3600"})
5)self.assistant.set_default_headers({'session_timeout':"3600"})
没有什么有效的。响应标题中的参数值仍为300。
我是否使用不正确的字典对来更新参数?使用V2 API是否还有另一种方法可以将对话状态维持超过5分钟?根本无法更改吗?
答案 0 :(得分:2)
会话超时的值不受调用方的控制,实际上与您使用的助手计划有关。对于免费和标准而言,超时的确是5分钟。对于其他计划,超时时间更大。
请参见Retaining information across dialog turns
当前会话的持续时间与用户与助手互动的时间一样长,然后Plus或Premium计划最多不活动60分钟(Lite或Standard计划不超过5分钟)。
答案 1 :(得分:0)
您可以致电Watson Assistant进行其他会话,然后重新发送消息。保持上下文...
或者只是通过正确的计划在IBM Cloud的助手设置中增加超时限制。
function createSession(end) {
assistant.createSession({
assistantId: watsonID }).then(res => {
sessionId=res.result.session_id;
if(end){
console.log("\x1b[32m%s\x1b[0m","new session "+sessionId);
}else{
console.log("session id :"+ sessionId);
console.log("http://"+host+":"+port);
}
});
}
createSession();
function callWatsonClient(payload,res) {
assistant.message(payload,function(err, data) {
if(data == null){
createSession(true);
//this not keep the context
var data ={result:{context:"",output:{generic:[{text:"session expirée, renvoyez le message"}]}}};
res.send(data);
}else{
//normal job
console.log("\x1b[33m%s\x1b[0m" ,JSON.stringify(data.result.output));
}