Как мы можем установить переменные контекста для IBM Watson из бэкэнда

Я хочу передать некоторые значения во внешний интерфейс в виде переменных контекста в IBM Watson через мое приложение Node. Как я могу достичь этого?

Я попытался добавить значение, которое я хочу добавить к текущему объекту переменной контекста, и отправил его обратно. Все равно никакой помощи. Есть ли способ сделать это?


Изменить:

Прямо сейчас я добавляю требуемое значение в качестве новой пары ключ-значение в объект контекста из приложения Node следующим образом.

...
let user_name = "MJ"
context.user_name = user_name
response.send({
    output: output,
    context: JSON.stringfy(context)
})
...

И в Watson Console, в одном из диалоговых узлов, которые я использовал, например,

Hey $user_name, How are you?

Но результат, который я получаю,

Hey , How are you?

Я вижу значение user_name в объекте контекста, но не могу использовать его так, как упоминалось выше. Есть ли другой способ сделать это?


Любая помощь приветствуется. Заранее спасибо!


person bharadhwaj    schedule 19.03.2018    source источник


Ответы (3)


У меня была такая же проблема. Мое решение заключалось в изменении кода при вызове сервера IBM и запросе .json:

...
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      text,
      context: {username :  variable}, 
...

username, который я установил в Watson Assistant, а также контекст, переменную, которую я использовал для получения имени через запрос (поскольку в моем приложении я вызываю чат-бот через IFrame.), но вы можете использовать любую переменную, установленную в JavaScript.

person Hudson M.    schedule 25.07.2018

Вы можете добавить любое значение в объект Context, к которому можно получить доступ в вашем приложении Node.JS, и если вы отправите это значение во внешний интерфейс, оно также должно быть доступно в пользовательском интерфейсе.

Ниже я упомянул пример приветственного ответа от сервиса Conversation. Вы можете получить доступ к объекту Context из ответа службы бесед и добавить к этому объекту новую пару "ключ-значение". В ответе вы увидите, что я обращаюсь к контекстной переменной username со значением MJ, которое было динамически добавлено в контекст.

`

{
"intents": [],
"entities": [],
"input": {
    "text": ""
},
"output": {
    "text": ["Hello MJ! How can I help you today?"],
    "nodes_visited": ["Conversation Start"],
    "log_messages": []
},
"context": {
    "username": "MJ",
    "conversation_id": "5835fa3b-6a1c-4ec5-92f9-22844684670e",
    "system": {
        "dialog_stack": [{
            "dialog_node": "Conversation Start"
        }],
        "dialog_turn_counter": 1,
        "dialog_request_counter": 1,
        "_node_output_map": {
            "Conversation Start": [0]
        }
    }
}

`

Теперь, чтобы обновить контекст, получить ответ и добавить новую пару ключ-значение.

`

var convResponse = <responseObj from Conversation call>;
var context = convResponse.context;
//add new value to context
context["new_key"] = "new value";

`

Теперь при следующем звонке в беседу используйте этот обновленный контекст вместо контекста, полученного от предыдущего звонка. Вы также можете отправить ответ из беседы во внешний интерфейс, который затем может быть показан пользователю.

person Mrutyunjaya Jena    schedule 20.03.2018
comment
Я добавил значение и отправил ответ на внешний интерфейс. Но я сомневаюсь, как использовать эту переменную контекста. Я добавил больше деталей в вопрос для лучшего понимания. Не могли бы вы еще раз взглянуть? - person bharadhwaj; 20.03.2018
comment
Вам нужно использовать обновленный объект контекста для следующего вызова Conversation. Тогда только эти новые значения будут доступны для непосредственного использования службой бесед. Каждый вызов Conversation принимает входные данные и контекст. Вам нужно использовать последний обновленный контекст, чтобы он был доступен со службой. - person Mrutyunjaya Jena; 20.03.2018

var payload = {
    assistantId: assistantId,
    sessionId: req.body.session_id, 
    context: {
        skills: {
           "main skill": {
              user_defined: {
                 username: 'John Doe'
               }
            }
         }
    },
    input: {
      message_type: 'text',
      text: "blah",
    },
  };

работает на меня. Видно здесь: https://medium.com/@pranavbhatia_26901/watson-assistant-v2-context-sharing-3ca18626ed0d

person Zeve    schedule 15.02.2020