我正在尝试将聊天机器人迁移为使用新引入的 Assistant API v2 。
我的聊天机器人基础结构包括中间件服务,该中间件服务在收到Watson的响应后修改上下文。在某些情况下,我曾经从上下文中删除了特定的属性,并且效果很好。但是我注意到,在迁移到 API v2 之后,此方法不再起作用,因为删除的属性以某种方式存储在 Watson 端。
例如,我从Watson收到了以下上下文:
{
"assistantId": "---",
"sessionId": "---",
"messageInput": {
"Text": "Some text",
"Options": {
"Debug": "true",
"ReturnContext": "true",
"Restart": "false"
}
},
"context":
{
"Global": "null",
"Skills": {
"AdditionalProperties": {
"main skill": {
"user_defined": {
"id": "23",
"description": "Dont know"
},
"system": {---}
}
}
}
}
}
然后我从上下文中删除'description',然后再次向Watson发送请求。出乎意料的是,“描述” 仍然在那里具有相同的值(“不知道”)。
可能的解决方案是不删除属性,而是将其值设置为空字符串。但是即使在这种情况下,我的对话框也无法正常工作,因为Watson会以某种方式将点存储在先前访问的对话框中(或者不是,这是我的猜测)。我认为它可能与system.state属性有关,该属性存储对话框的编码状态(再次-或不重复)。
我的问题是,为什么对话框具有这种方式? 它如何存储上下文信息,因此我无法从 user_defined 上下文中删除属性? 以及如何将对话框状态重置为最初保持相同的 conversation_id ( session_id )?
P.S。我正在使用 Watson API v2 :2020-04-01