我们如何使用 java 设置 watson 助手的上下文变量的值?
How can we set value of context variable of watson assistant using java?
是否可以从 java 设置上下文变量的值。我修改了节点 json 并在结果中的该操作中添加了一个操作 属性 我想从我的本地数据库设置数据。所以我在 java 代码中获取操作并尝试设置操作对象的结果 属性 的值,下面是我正在尝试但它不起作用的代码。有人可以为此提出更好的方法吗?
if(response.getActions()!=null) {
System.out.println("actions : "+response.getActions());
for (int i = 0; i < response.getActions().size(); i++) {
System.out.println(" i : "+response.getActions().get(i).getName());
if(response.getActions().get(i).getName()=="Apply_For_Loan") {
response.getActions().get(i).setResultVariable("123");
}
}
}
为了在下面的上下文中设置 result_variable 的值是我的代码。
if(response.getActions().get(i).getName().equals("Apply_For_Loan")) {
System.out.println("in action");
Assistant service = new Assistant("2018-12-12");
service.setUsernameAndPassword(userId, password);
service.setEndPoint(endPoint);
String result=response.getActions().get(i).getResultVariable();
Context context = response.getContext();
context.put(result, "123");
MessageOptions msg=new MessageOptions.Builder(watsonId)
.input(new InputData.Builder("Apply For Loan").build())
.context(context)
.build();
response=service.message(msg).execute();
System.out.println("msg : "+response);
}
以下是我重新执行助手调用后得到的响应。
{
"output": {
"generic": [
{
"response_type": "text",
"text": "Hello RSR, you loan application of 5420 is created. Please note the Loan Number for future use "
}
],
"text": [
"Hello RSR, you loan application of 5420 is created. Please note the Loan Number for future use "
],
"nodes_visited": [
"node_1_1544613102320",
"node_1_1544613102320"
],
"log_messages": []
},
"input": {
"text": "Apply For Loan"
},
"intents": [
{
"intent": "ApplyForLoan",
"confidence": 1.0
}
],
"entities": [],
"context": {
"number": 9.971070056E9,
"$Loan_Number": "123",
"system": {
"initialized": true,
"dialog_stack": [
{
"dialog_node": "node_1_1544613102320"
}
],
"dialog_turn_counter": 3.0,
"dialog_request_counter": 3.0,
"_node_output_map": {
"node_1_1544613102320": {
"0": [
0.0
]
}
},
"branch_exited": true,
"branch_exited_reason": "completed"
},
"Mail_Id": "Email_Id",
"conversation_id": "b59c7a02-2cc6-4149-ae29-602796ab22e1",
"person": "RSR",
"rupees": 5420.0
},
"actions": [
{
"name": "Apply_For_Loan",
"type": "client",
"parameters": {
"pername": "RSR",
"loanamount": 5420.0
},
"result_variable": "$Loan_Number"
}
]
}
在上面的响应中 $Loan_Number 是我从 java 代码更新的结果变量和我在输出文本中使用的相同 result_variable 到 return $Loan_Number,但在输出文本中它仍然是空白的,在操作中它仍然是空白的?
您问题的简单答案是否定的,您不能使用 setResultVariable
在 JSON 模型中设置任何内容。它应该像这样工作:
1) 在您的对话节点上定义一个动作
result_variable
定义了 <result_variable_name>
,例如该操作的结果应存储在对话上下文中的位置。如果您执行某些服务器端操作,您会从指定的上下文位置读取结果。在此示例中,位置为 context.result_of_action
,context
可能会被省略。更多详细信息 here。
2) 处理Java客户端中的动作
DialogNodeAction action = response.getActions().get(0);
final String result_variable = action.getResultVariable();
result_variable
就像一个键。您从数据库中获取值并将其添加到上下文中:
Context context = response.getContext();
context.put(result_variable, "value from DB");
new MessageOptions.Builder("Your ID")
.input(new InputData.Builder("Your response").build())
.context(context) // setting context
.build();
Watson Assistant Dialog(或其他应用程序)终于可以从客户端获取结果:
"context": {
"result_of_action": "value from DB",
您使用 Java API 读取的对象正在使用 Gson
从 JSON 解析,需要重新解析回 JSON当构建一个新的 API Call.
问题更新后编辑
在你的例子中:
"actions": [
{
"name": "Apply_For_Loan",
"type": "client",
"parameters": {
"pername": "RSR",
"loanamount": 5420.0
},
"result_variable": "$Loan_Number"
}
键 result_variable
告诉您应用中的其他模块在哪里可以找到您的操作结果。所以 $Loan_Number
不应该是 value 而是 key 到会话上下文中的值(一种方法契约)。
假设您将值设置为 context.my_result,那么您的 Watson Assistant 应该能够从 "context.my_result" 下的下一个对话节点中的数据库访问“123”。
是否可以从 java 设置上下文变量的值。我修改了节点 json 并在结果中的该操作中添加了一个操作 属性 我想从我的本地数据库设置数据。所以我在 java 代码中获取操作并尝试设置操作对象的结果 属性 的值,下面是我正在尝试但它不起作用的代码。有人可以为此提出更好的方法吗?
if(response.getActions()!=null) {
System.out.println("actions : "+response.getActions());
for (int i = 0; i < response.getActions().size(); i++) {
System.out.println(" i : "+response.getActions().get(i).getName());
if(response.getActions().get(i).getName()=="Apply_For_Loan") {
response.getActions().get(i).setResultVariable("123");
}
}
}
为了在下面的上下文中设置 result_variable 的值是我的代码。
if(response.getActions().get(i).getName().equals("Apply_For_Loan")) {
System.out.println("in action");
Assistant service = new Assistant("2018-12-12");
service.setUsernameAndPassword(userId, password);
service.setEndPoint(endPoint);
String result=response.getActions().get(i).getResultVariable();
Context context = response.getContext();
context.put(result, "123");
MessageOptions msg=new MessageOptions.Builder(watsonId)
.input(new InputData.Builder("Apply For Loan").build())
.context(context)
.build();
response=service.message(msg).execute();
System.out.println("msg : "+response);
}
以下是我重新执行助手调用后得到的响应。
{
"output": {
"generic": [
{
"response_type": "text",
"text": "Hello RSR, you loan application of 5420 is created. Please note the Loan Number for future use "
}
],
"text": [
"Hello RSR, you loan application of 5420 is created. Please note the Loan Number for future use "
],
"nodes_visited": [
"node_1_1544613102320",
"node_1_1544613102320"
],
"log_messages": []
},
"input": {
"text": "Apply For Loan"
},
"intents": [
{
"intent": "ApplyForLoan",
"confidence": 1.0
}
],
"entities": [],
"context": {
"number": 9.971070056E9,
"$Loan_Number": "123",
"system": {
"initialized": true,
"dialog_stack": [
{
"dialog_node": "node_1_1544613102320"
}
],
"dialog_turn_counter": 3.0,
"dialog_request_counter": 3.0,
"_node_output_map": {
"node_1_1544613102320": {
"0": [
0.0
]
}
},
"branch_exited": true,
"branch_exited_reason": "completed"
},
"Mail_Id": "Email_Id",
"conversation_id": "b59c7a02-2cc6-4149-ae29-602796ab22e1",
"person": "RSR",
"rupees": 5420.0
},
"actions": [
{
"name": "Apply_For_Loan",
"type": "client",
"parameters": {
"pername": "RSR",
"loanamount": 5420.0
},
"result_variable": "$Loan_Number"
}
]
}
在上面的响应中 $Loan_Number 是我从 java 代码更新的结果变量和我在输出文本中使用的相同 result_variable 到 return $Loan_Number,但在输出文本中它仍然是空白的,在操作中它仍然是空白的?
您问题的简单答案是否定的,您不能使用 setResultVariable
在 JSON 模型中设置任何内容。它应该像这样工作:
1) 在您的对话节点上定义一个动作
result_variable
定义了 <result_variable_name>
,例如该操作的结果应存储在对话上下文中的位置。如果您执行某些服务器端操作,您会从指定的上下文位置读取结果。在此示例中,位置为 context.result_of_action
,context
可能会被省略。更多详细信息 here。
2) 处理Java客户端中的动作
DialogNodeAction action = response.getActions().get(0);
final String result_variable = action.getResultVariable();
result_variable
就像一个键。您从数据库中获取值并将其添加到上下文中:
Context context = response.getContext();
context.put(result_variable, "value from DB");
new MessageOptions.Builder("Your ID")
.input(new InputData.Builder("Your response").build())
.context(context) // setting context
.build();
Watson Assistant Dialog(或其他应用程序)终于可以从客户端获取结果:
"context": {
"result_of_action": "value from DB",
您使用 Java API 读取的对象正在使用 Gson
从 JSON 解析,需要重新解析回 JSON当构建一个新的 API Call.
问题更新后编辑
在你的例子中:
"actions": [
{
"name": "Apply_For_Loan",
"type": "client",
"parameters": {
"pername": "RSR",
"loanamount": 5420.0
},
"result_variable": "$Loan_Number"
}
键 result_variable
告诉您应用中的其他模块在哪里可以找到您的操作结果。所以 $Loan_Number
不应该是 value 而是 key 到会话上下文中的值(一种方法契约)。
假设您将值设置为 context.my_result,那么您的 Watson Assistant 应该能够从 "context.my_result" 下的下一个对话节点中的数据库访问“123”。