这是有关Watson Assistant API V1 / V2差异的问题。 doc这样说:
请注意,如果您的应用程序使用v1 API,它将直接与对话技巧进行通信,而绕过了助手的编排和状态管理功能。这意味着您的应用程序负责维护状态信息。这是使用上下文完成的,上下文是在应用程序和Watson Assistant服务之间来回传递的对象。您的应用程序必须维护上下文,方法是保存每个响应收到的上下文,并随每个新消息请求将其发送回服务。 使用v2 API的应用程序也可以使用上下文来访问和存储持久性信息,但是该上下文由助手自动维护(基于每个会话)。
似乎在V2中,“上下文由助手自动维护”。这到底是什么意思?如果我想将一些数据传递到对话框流,则可以在“ / message”上使用上下文。是否允许在V2中使用?(是的,似乎。)然后在V1天内,我必须从响应中接收上下文,并在每次请求时将其发送回去。助手还会在V2中发回上下文吗?我的客户端应用在V2中应该做什么?欢迎提供任何详细信息。谢谢。
答案 0 :(得分:3)
首先回答您的第二个问题-如果检查Watson Assistant V2 here的API文档,则响应中将包含一个MessageContext对象,该对象具有全局上下文和特定于技能的上下文值。
您还有一个示例请求,您可以在其中手动传递上下文(全局和用户定义的上下文)
curl -u "apikey:{apikey}" -X POST -H "Content-Type:application/json" -d "{\"input\": {\"text\": \"Hello\"}, \"context\": {\"global\": {\"system\": {\"user_id\": \"my_user_id\"}}}}" "https://gateway.watsonplatform.net/conversation/api/v2/assistants/{assistant_id}/sessions/{session_id}/message?version=2018-11-08"
在客户端,您可以使用此代码
service.message({
assistant_id: '{assistant_id}',
session_id: '{session_id}',
input: {
'message_type': 'text',
'text': 'Hello'
},
context: {
'global': {
'system': {
'user_id': 'my_user_id'
}
},
"skills": {
"main skill": {
"user_defined": {
"my_result_variable": "result_value"
}
}
}
}
}
引用link
检查API Methods Summary,以了解V2到目前为止所支持的功能。
在V2中有一个称为Session的新概念。会话用于向技能发送用户输入并接收响应。它还会自动为您维护会话的状态,即“上下文”。
V2 API(截至目前) 支持运行时方法,这些方法使客户端应用程序可以与(但不能修改)现有助手或技能进行交互。您可以使用这些方法来开发可部署用于生产用途的面向用户的客户端,用于代理助理与另一服务(例如,聊天服务或后端系统)之间的通信的应用程序或测试应用程序。 / p>
适用于我的完整cURL示例
curl -u "apikey:<API_KEY>" -X POST -H "Content-Type:application/json" -d "{
\"input\": {
\"text\": \"What's the time?\",
\"options\": {
\"alternate_intents\": true,
\"debug\": true,\"return_context\": true
}
},
\"context\": {
\"global\": {
\"system\": {
\"user_id\": \"derp\",\"turn_count\":1
}
}
},
\"skills\": {
\"main_skill\":{\"user_defined\": {
\"chosen_service\": \"dental\"
}}
}
}" "https://gateway.watsonplatform.net/assistant/api/v2/assistants/{ASSISTANT_ID}/sessions/{SESSION_ID}/message?version=2018-11-08"
对于会话ID,请运行以下命令
curl -u "apikey:<API_KEY>" -X POST "https://gateway.watsonplatform.net/assistant/api/v2/assistants/{ASSISTANT_ID}/sessions?version=2018-11-08"
响应包括用户定义的技能背景
{"output":{"generic":[{"response_type":"text","text":"Hey ! how are you today? Let me know if you need any help or get stuck looking for information."}],"debug":{"nodes_visited":[{"dialog_node":"node_6_1475611948267","title":null,"conditions":"conversation_start"}],"log_messages":[],"branch_exited":true,"branch_exited_reason":"completed"},"intents":[{"intent":"General_Greetings","confidence":0.32179955244064334},{"intent":"General_Jokes","confidence":0.296911633014679},{"intent":"goodbye","confidence":0.2852578103542328},{"intent":"General_Ending","confidence":0.2513303637504578},{"intent":"off_topic","confidence":0.24435781836509707},{"intent":"select_detail","confidence":0.24206179082393647},{"intent":"list_options","confidence":0.22829059958457948},{"intent":"still-here","confidence":0.22606439888477325},{"intent":"select_service","confidence":0.22488142400979996},{"intent":"General_Security_Assurance","confidence":0.2210852071642876}],"entities":[]},"context":{"global":{"system":{"turn_count":1,"user_id":"derp"}},"skills":{"main skill":{"user_defined":{"chosen_service":"dental"}}}}}
答案 1 :(得分:1)
谢谢@Vidyasagar Machupalli @data_henrik。 (我创建了“答案”部分,将图片粘贴到下面。)
然后我在这样的上下文中发布用户变量。
context={
"skills": {
"main skill": {
"user_defined": {
"myname": "ishida"
}
}
}
}
然后答复是:
{'output':{'generic':[{'response_type':'text','text':'Hi,ishida。'}],'intents':[],'entities':[]} }
“技能”->“主要技能”->“用户定义的”部分似乎是区分大小写的/ FIXED关键字。 从我的看到,如果更改其中之一,则无法在对话框编辑器上读取该变量。
2)我也发现了文档问题。我的问题的出发点是:“ API V2文档说我应该使用“技能”条目来处理用户变量,但是没有比这更多的详细信息了。 @Vidyasagar Machupalli说:“根据V2 API文档,user_defined是任意变量”。但是我无法在API文档中找到该段落。 然后我发现 a)当我选择“ curl”选项卡时,出现“ user_defined”说明。 b)当我选择其他(Java / Node / Python)选项卡时,没有解释出现。
我知道信息不存在,因为我提到了“ Python”标签。我希望尽快解决此问题,以免造成混淆。而且我认为应该注意“技能->主要技能->用户定义的部分区分大小写/ FIXED关键字”这一事实,因为在当前描述中尚不清楚。谢谢!