整体步骤
注册一个IBM账户,http://console.bluemix.net
在控制台(Dashboard)创建资源(Create resource)
点击 Watson Assistant 服务
填写服务名称、想要部署的区域,创建一个Watson Assistant服务
启动工具(Launch tool)
创建Skill
创建Assistants
创建一个assistant,并把之前建立好的skill添加进assistant。
assistant详情页中包含一个分享链接可以在网页上试用,也包含了API调用所需的id、url、username、password。
我的watson asistant 分享试用地址:https://assistant-chat-jp-tok.watsonplatform.net/web/public/c24919e6-ff48-42c1-99c2-63a66df7f75b
Skill 构建步骤
构建一个skill大致需要创建intents、entities、dialog。
intents为用户意图;entities为需要理解的一些实体;dialog串起整个对话。
以预定餐厅为例:用户意图为 “我想订位置”;entities为星期几、时间、几个人这些元素;dialog告诉机器人接收到“我想订位置” 这个意图时,需要问什么、答什么。
Creating Intents
参考教程:https://cloud.ibm.com/docs/services/assistant?topic=assistant-intents#intents
Creating Entities
参考教程:https://cloud.ibm.com/docs/services/assistant?topic=assistant-entities#entities
Build Dialog
参考教程:https://cloud.ibm.com/docs/services/assistant?topic=assistant-dialog-overview#dialog-overview
我参考教程视频建立的Skill的json配置文件:
http://note.youdao.com/noteshare?id=4fb9d8bd65c31c23f1f6a2866bb952c5
机器人发布到web上
参考教程:http://www-31.ibm.com/ibm/cn/ur/event/pdf/integrate_to_web.pdf
Java调用
参考 demo:https://github.com/watson-developer-cloud/java-sdk
demo 中关于 assistant 的说明:https://github.com/watson-developer-cloud/java-sdk/blob/master/assistant/README.md
我用的是v2接口,但 demo 没有说明参数都是哪里来的、缺少Endpoint设置、缺少sessionId获取,调试过程中出现过如下问题:
Unauthorized: Access is denied due to invalid credentials. Tip: Did you set the Endpoint?
{“code”:401, “error”: “Unauthorized”}
{“error”:“Resource not found”,“code”:404}
最终运行通过的代码如下:
Gradle
compile group: 'com.ibm.watson.developer_cloud', name: 'assistant', version: '6.14.0'
测试函数
public static void main(String[] args) throws Exception {
String assistantId = "XXXXXXXXXXXXXXXXXXX"; // Assistant 详情页的Assistant ID
String url = "https://gateway-tok.watsonplatform.net/assistant/api"; // Assistant 详情页的Assistant URL的一部分
String username = "apikey"; // Assistant 详情页的 Service Credentials 的 Username
String password = "XXXXXXXXXXXXXXXXXXX"; // Assistant 详情页的 Service Credentials 的 Password
Assistant service = new Assistant("2019-03-15"); // 随意
service.setEndPoint(url);
service.setUsernameAndPassword(username, password);
CreateSessionOptions createSessionOptions = new CreateSessionOptions.Builder()
.assistantId(assistantId)
.build();
SessionResponse sessionResponse = service.createSession(createSessionOptions).execute();
String sessionId = sessionResponse.getSessionId();
MessageInput input = new MessageInput.Builder()
.text("Hi")
.build();
MessageOptions messageOptions = new MessageOptions.Builder()
.assistantId(assistantId)
.sessionId(sessionId)
.input(input)
.build();
MessageResponse messageResponse = service.message(messageOptions).execute();
System.out.println(messageResponse);
}