我正在尝试将多个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:赞助人会输入摇滚乐。
我的问题是我收到一条错误消息,指出以下内容
根级别的输入没有匹配的对话节点。 (并且日志中还有1个警告)“, “log_messages”:[
我很确定我必须将上下文传递给第二个请求,但我不确定我需要包含什么。现在我只传递conversation_id。我需要传递上述响应中的具体内容吗?例如,我传递了这个:
{
"input": {
"text": "rock"
},
"context": {
"conversation_id": "79e93cac-12bb-40fa-ab69-88f56d0845e4"
}
}
答案 0 :(得分:1)
您发送回整个上下文对象。在这种情况下,它将是:
{
"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可以让你更轻松。
答案 1 :(得分:0)
您的节点可以根据您选择的音乐类型进行操作,它是您转动的音乐的孩子吗?节点[node_2_1510258615227]?
如果是这样,正如Simon在上面演示的那样,您还需要在API调用时传回完整的上下文数据包。这会告诉Watson Conversation你在最后的对话流程中的位置。由于会话系统是无状态的,即它不存储关于个别会话的任何状态信息,因此默认情况下不会知道它在会话中的位置。这就是为什么你需要返回前一个响应的context元素,以允许watson知道你在对话流中的位置。
上面的错误表明Watson查看了您在根级别定义的对话节点列表,但找不到匹配的条件。由于您的匹配条件在子节点内。