我们将IBM Watson Assistant用于NLU,后端则将Nodejs用于API调用。我能够连接并从Watson Assistant获得JSON响应。为此,我使用了以下软件包“ watson-developer-cloud / assistant / v2”。
我正在处理watson中的上下文/插槽,所以我只想获取JSON响应中那些上下文变量/插槽的值。
我尝试从Watson发送文本响应(JSON文件)中的上下文变量。
还尝试使用Watson Assistant V1获取上下文,但是问题在于会话处理,因此我更喜欢使用Watson Assistant V2
const AssistantV2 = require('watson-developer-cloud/assistant/v2');
const assistant = new AssistantV2({
version: 'XXXX-XX-XX',
iam_apikey: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
url: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
});
var sess_id;
assistant.createSession({
assistant_id: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
})
.then(res => {
sess_id=res.session_id;
})
.catch(err => {
console.log(err);
});
assistant.message({
assistant_id: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX',
session_id: sess_id,
input: {
'message_type': 'text',
'text': 'Message'},
})
.then(res => {
console.log(JSON.stringify(res, null, 2))
console.log(res)})
预期: 我应该在Watson Json响应中获取上下文
实际: 我在Watson Json回应中没有得到背景信息
答案 0 :(得分:1)
请参见V2 API documentation for IBM Watson Assistant和line 473 in the Node.js SDK:
有一个输入参数 return_context 。默认情况下为 false 。如果设置为 true ,它将告诉服务器返回带有消息响应的上下文数据。
/** Whether to return session context with the response. If you specify `true`, the response will include the `context` property. */
return_context?: boolean;
答案 1 :(得分:1)
正如@data_henrik正确提到的那样,您需要传递return_context
作为请求的一部分,才能在响应中看到MessageContext
。
这是一个示例请求,具有从上一个响应传递过来的上下文
const AssistantV2 = require('watson-developer-cloud/assistant/v2');
const service = new AssistantV2({
iam_apikey: '{apikey}',
version: '2019-02-28',
url: '{url}'
});
service.message({
assistant_id: '{assistant_id}',
session_id: '{session_id}',
input: {
'message_type': 'text',
'text': 'Hello',
'options': {
'return_context': true
}
},
context: {
'global': {
'system': {
'user_id': 'my_user_id'
}
},
'skills': {
'main skill': {
'user_defined': {
'account_number': '123456'
}
}
}
}
})
.then(res => {
console.log(JSON.stringify(res, null, 2));
})
.catch(err => {
console.log(err);
});
在input
下,您可以看到return_context
设置为 true