如何使用 Nodejs 从 IBM watson assistant V2 的响应中获取上下文变量?
How to get context variables from the response of IBM watson assistant V2 using Nodejs?
我们将 IBM watson 助手用于 NLU,而后端我们将 Nodejs 用于 API 调用。我能够连接并从 watson 助手那里得到 JSON 响应。为此,我使用了以下包 'watson-developer-cloud/assistant/v2'.
我在 watson 中处理 context/slots,所以我只想在 JSON 响应中获取这些上下文 variables/slots 的值。
我尝试从 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 response
中获取上下文
实际:
我没有在 watson Json response
中获取上下文
查看 V2 API documentation for IBM Watson Assistant and line 473 in the Node.js SDK:
有一个输入参数return_context。默认为 false。如果设置为 true,它会告诉服务器 return 消息响应的上下文数据。
/** Whether to return session context with the response. If you specify `true`, the response will include the `context` property. */
return_context?: boolean;
正如@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
我们将 IBM watson 助手用于 NLU,而后端我们将 Nodejs 用于 API 调用。我能够连接并从 watson 助手那里得到 JSON 响应。为此,我使用了以下包 'watson-developer-cloud/assistant/v2'.
我在 watson 中处理 context/slots,所以我只想在 JSON 响应中获取这些上下文 variables/slots 的值。
我尝试从 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 response
中获取上下文实际: 我没有在 watson Json response
中获取上下文查看 V2 API documentation for IBM Watson Assistant and line 473 in the Node.js SDK:
有一个输入参数return_context。默认为 false。如果设置为 true,它会告诉服务器 return 消息响应的上下文数据。
/** Whether to return session context with the response. If you specify `true`, the response will include the `context` property. */
return_context?: boolean;
正如@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