2017-06-01 3 views
0

Si je mets dans la conversation d'un Watson l'objet de contexte, je pense qu'il reste les noeuds, il a accédé précédemment, je veux dire:Contexte dans une conversation de Watson ne fonctionne pas dans la façon dont il censé fonctionner

enter image description here

Après avoir tiré une Intention de salutations, si je tape 'au revoir' (un au revoir Intention). Il devrait déclencher l'intention d'un au revoir, mais cela fonctionne simplement dans l'outil de test.

enter image description here

Voici le code dans mon application NodeJS:

let context = {} 
const conversation = new ConversationV1({ 
    username: 'myUsername', 
    password: 'myPassword', 
    url: 'https://gateway.watsonplatform.net/conversation/api', 
    version_date: '2017-05-26' 
}) 

conversation.message({ workspace_id: workspaceId}, function (err, response) { 
    if (err) { 
     console.log(err) 
    } else { 
     context = response.context 
    } 
}) 

sendMessage = (message = null) => new Promise((resolve, reject) => { 
     conversation.message({ 
      input: {text: message}, 
      workspace_id: workspaceId, 
      context: context 
     }, function (err, response) { 
      if (err) { 
       reject(err) 
      } else { 
       resolve(response.output.text) 
      } 
     }) 
    } 

Bien que le conversation_id est toujours le même. J'obtiens toujours la réponse d'intention de n'importe quoi au lieu de l'intention d'au revoir.

{ intents: [ { intent: 'greetings', confidence: 1 } ], 
    entities: [], 
    input: { text: 'hi' }, 
    output: 
    { text: [ 'It is nice to talk to you, again !' ], 
    nodes_visited: [ 'greetings' ], 
    log_messages: [] }, 
    context: 
    { conversation_id: '7cc96494-d108-4dc9-95c4-63c174f20b4c', 
    system: 
     { dialog_stack: [Object], 
     dialog_turn_counter: 2, 
     dialog_request_counter: 2, 
     _node_output_map: [Object] } } } 

{ intents: [ { intent: 'goodbytes', confidence: 1 } ], 
    entities: [], 
    input: { text: 'bye' }, 
    output: 
    { text: [ 'I didn\'t understand. You can try rephrasing.' ], 
    nodes_visited: [ 'Anything else' ], 
    log_messages: [] }, 
    context: 
    { conversation_id: '7cc96494-d108-4dc9-95c4-63c174f20b4c', 
    system: 
     { dialog_stack: [Object], 
     dialog_turn_counter: 2, 
     dialog_request_counter: 2, 
     _node_output_map: [Object], 
     branch_exited: true, 
     branch_exited_reason: 'completed' } } } 

Répondre

0

Je viens de découvrir que la partie importante de l'objet de contexte pour garder le 'contexte' de la conversation et travailler avec des intentions imbriquées est de continuer à passer le nouvel objet de contexte que vous avez dans chaque réponse http.

let context = {} 
sendMessage = (message = null) => new Promise((resolve, reject) => { 
     conversation.message({ 
      input: {text: message}, 
      workspace_id: workspaceId, 
      context: context 
     }, function (err, response) { 
      if (err) { 
       reject(err) 
      } else { 
       context = response.context 
       resolve(response.output.text) 
      } 
     }) 
    } 

cela signifie que vous devez mettre à jour l'objet de contexte dans chaque demande http: comme vous pouvez le voir dans chaque réponse http

contexte = response.context

vous mettez à jour le _node_output_map:

{ conversation_id: '1bb7b7e3-2bc2-4686-8f5e-8e25cdff7ff8', 
    system: 
    { dialog_stack: [ [Object] ], 
    dialog_turn_counter: 1, 
    dialog_request_counter: 1, 
    _node_output_map: { Welcome: [Object] }, 
    branch_exited: true, 
    branch_exited_reason: 'completed' } } 

{ conversation_id: '1bb7b7e3-2bc2-4686-8f5e-8e25cdff7ff8', 
    system: 
    { dialog_stack: [ [Object] ], 
    dialog_turn_counter: 2, 
    dialog_request_counter: 2, 
    _node_output_map: { Welcome: [Object], greetings: [Object] } } }