IBM沃森。如何将上下文从一个节点传递到另一个节点?
IBM Watson. How to pass context from node to node?
我正在尝试将多个 IBM Watson 请求串在一起:
请求 #1:播放音乐。
Watson 回应如下:
{
"intents": [
{
"intent": "turn_on",
"confidence": 0.9498470783233643
}
],
"entities": [
{
"entity": "appliance",
"location": [
5,
10
],
"value": "radio",
"confidence": 1
}
],
"input": {
"text": "play music"
},
"output": {
"text": [
"What kind of music would you like to hear?"
],
"nodes_visited": [
"node_1_1510258504338",
"node_2_1510258615227"
],
"log_messages": []
},
"context": {
"conversation_id": "79e93cac-12bb-40fa-ab69-88f56d0845e4",
"system": {
"dialog_stack": [
{
"dialog_node": "node_2_1510258615227"
}
],
"dialog_turn_counter": 1,
"dialog_request_counter": 1,
"_node_output_map": {
"node_2_1510258615227": [
0
]
}
}
}
}
请求 #2:赞助人会输入 rock。
我的问题是我收到一条错误消息,内容如下
没有与根级别的输入匹配的对话节点。 (日志中还有 1 个警告)",
"log_messages": [
我很确定我必须将上下文传递到第二个请求中,但我不确定我需要包含什么。现在我只传递 conversation_id。我需要传递上述响应中的特定内容吗?例如,我传递这个:
{
"input": {
"text": "rock"
},
"context": {
"conversation_id": "79e93cac-12bb-40fa-ab69-88f56d0845e4"
}
}
您发回整个上下文对象。在这种情况下,它将是:
{
"input": {
"text": "rock"
},
"context": {
"conversation_id": "79e93cac-12bb-40fa-ab69-88f56d0845e4",
"system": {
"dialog_stack": [
{
"dialog_node": "node_2_1510258615227"
}
],
"dialog_turn_counter": 1,
"dialog_request_counter": 1,
"_node_output_map": {
"node_2_1510258615227": [
0
]
}
}
}
}
但是有一些 SDK 可以让您更轻松地完成这项工作。
你的节点是select类型的音乐人,它是你的'turn_on'节点[node_2_1510258615227]的子节点吗?
如果是这样,正如 Simon 在上面所演示的那样,您还需要作为 API 调用的一部分传回完整的上下文数据包。这会通知 Watson Conversation 您在对话流中的最后位置。由于对话系统是无状态的,即它不存储有关单个对话的任何状态信息,因此默认情况下它不会知道它在对话中的位置。这就是为什么您需要 return 先前响应的上下文元素,以允许 watson 知道您在对话流中的位置。
上面的错误表明 Watson 查看了您在根级别定义的对话节点列表,但找不到匹配条件。由于您的匹配条件在子节点内。
我正在尝试将多个 IBM Watson 请求串在一起:
请求 #1:播放音乐。
Watson 回应如下:
{
"intents": [
{
"intent": "turn_on",
"confidence": 0.9498470783233643
}
],
"entities": [
{
"entity": "appliance",
"location": [
5,
10
],
"value": "radio",
"confidence": 1
}
],
"input": {
"text": "play music"
},
"output": {
"text": [
"What kind of music would you like to hear?"
],
"nodes_visited": [
"node_1_1510258504338",
"node_2_1510258615227"
],
"log_messages": []
},
"context": {
"conversation_id": "79e93cac-12bb-40fa-ab69-88f56d0845e4",
"system": {
"dialog_stack": [
{
"dialog_node": "node_2_1510258615227"
}
],
"dialog_turn_counter": 1,
"dialog_request_counter": 1,
"_node_output_map": {
"node_2_1510258615227": [
0
]
}
}
}
}
请求 #2:赞助人会输入 rock。
我的问题是我收到一条错误消息,内容如下
没有与根级别的输入匹配的对话节点。 (日志中还有 1 个警告)", "log_messages": [
我很确定我必须将上下文传递到第二个请求中,但我不确定我需要包含什么。现在我只传递 conversation_id。我需要传递上述响应中的特定内容吗?例如,我传递这个:
{
"input": {
"text": "rock"
},
"context": {
"conversation_id": "79e93cac-12bb-40fa-ab69-88f56d0845e4"
}
}
您发回整个上下文对象。在这种情况下,它将是:
{
"input": {
"text": "rock"
},
"context": {
"conversation_id": "79e93cac-12bb-40fa-ab69-88f56d0845e4",
"system": {
"dialog_stack": [
{
"dialog_node": "node_2_1510258615227"
}
],
"dialog_turn_counter": 1,
"dialog_request_counter": 1,
"_node_output_map": {
"node_2_1510258615227": [
0
]
}
}
}
}
但是有一些 SDK 可以让您更轻松地完成这项工作。
你的节点是select类型的音乐人,它是你的'turn_on'节点[node_2_1510258615227]的子节点吗?
如果是这样,正如 Simon 在上面所演示的那样,您还需要作为 API 调用的一部分传回完整的上下文数据包。这会通知 Watson Conversation 您在对话流中的最后位置。由于对话系统是无状态的,即它不存储有关单个对话的任何状态信息,因此默认情况下它不会知道它在对话中的位置。这就是为什么您需要 return 先前响应的上下文元素,以允许 watson 知道您在对话流中的位置。
上面的错误表明 Watson 查看了您在根级别定义的对话节点列表,但找不到匹配条件。由于您的匹配条件在子节点内。