Я пытаюсь перенести чат-бота для использования недавно представленного Assistant API v2 .
Моя инфраструктура чат-бота включает в себя службы промежуточного программного обеспечения, которые изменяют контекст после получения ответа из Ватсона. В некоторых случаях я использовал для удаления определенных свойств из контекста, и это работало нормально. Однако я заметил, что после перехода на API v2 этот подход больше не работает, поскольку удаленные свойства каким-то образом хранятся на стороне Watson .
Например, я получил следующее context от 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 еще раз. Удивительно, но 'description' все еще там с тем же значением ('Не знаю').
Возможным решением будет не удалить свойство, а установить его значение в пустую строку. Но даже в этом случае мой диалог не работает правильно, так как Уотсон каким-то образом сохраняет точку в диалоге, который он посещал ранее (или нет, это мои догадки). Я предполагаю, что это может быть связано со свойством system.state, в котором хранится закодированное состояние диалога (снова или нет).
Мой вопрос: почему диалог ведет себя так? Как он хранит контекстную информацию, поэтому я не могу удалить свойства из user_defined context? И как я могу сбросить диалоговое состояние к исходному, сохраняя тот же dialog_id ( session_id )?
PS Я использую Watson API v2 : 2020-04-01