ibm-cloud - 无法使用 Watson Assistant API v2 修改 user_defined 上下文
问题描述
我正在尝试迁移聊天机器人以使用新引入的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": {---}
}
}
}
}
}
然后我从上下文中删除“描述”并再次向 Watson 发送请求。令人惊讶的是,“描述”仍然具有相同的值(“不知道”)。
可能的解决方案不是删除属性,而是将其值设置为空字符串。但即使在这种情况下,我的对话也无法正常工作,因为 Watson 会以某种方式将它之前访问的对话点存储在对话中(或者不是,这些都是我的猜测)。我认为它可能与 system.state 属性有关,该属性存储对话框的编码状态(再次 - 或不)。
我的问题是为什么对话会这样?它如何存储上下文信息,因此我无法从用户定义的上下文中删除属性?以及如何将对话状态重置为初始保持相同的conversation_id ( session_id )?
PS 我正在使用Watson API v2:2020-04-01
解决方案
推荐阅读
- web-services - 如何将拦截器(架构验证)应用于服务器上部署的多个服务中的特定端点
- jquery - 如何在 jQGrid 中获取多个 rowID?
- architecture - 通过文件系统窗口跨多台机器同步多个进程
- ios - 是否可以在 Apple 和 Google Plays 商店中创建日期范围内的应用内订阅?
- r - 欧盟统计局地理空间数据 NUTS-3 下载用于制图
- android - 为什么在Android上稍微修改GLSL for循环中的迭代次数时性能如此不同
- regex - 我的 Google Apps 脚本正则表达式需要匹配一个或另一个表达式。
- macos - 寻找一种在首选项面板中编写设置更改脚本的方法
- python - Python,修改二十一点游戏
- javascript - 如何在 JavaScript 中根据数字将数字四舍五入到最接近的 100/1000?