人工智能问答机器人
智能问答 API 平台
- 图灵 api: http://www.turingapi.com/
- 阿 ⾥云服务: https://aliyun.com/
- 亚 ⻢逊云服务:https://aws.amazon.com
- 腾讯云服务:https://cloud.tencent.com/
- 青云客:http://api.qingyunke.com/
青云客 API
//接口地址
http://api.qingyunke.com/api.php?key=free&appid=0&msg=关键词
key 固定参数free
appid 设置为0,表示智能识别,可忽略此参数
msg 关键词,请参考下方参数示例,该参数可智能识别,该值请经过 urlencode 处理后再提交
//返回结果
{"result":0,"content":"内容"}
result 状态,0表示正常,其它数字表示错误
content 信息内容
msg 示例
天⽓:msg=天⽓深圳
中英翻译:msg=翻译i love you
歌词⑴:msg=歌词 成都
笑话:msg=笑话
计算⑴:msg=计算 1+1*2/3-4
计算⑵:msg=1+1*2/3-4
使用接口实例
请求
http://api.qingyunke.com/api.php?key=free&appid=0&msg=你今年多大了
返回
{
"result": 0,
"content": "女生的年龄是不能随便说的,知道不"
}
包模块划分
- 流程分析:⽤户输 ⼊指令 -> http 发送请求 -> 解析结果 -> 显示内容 -> 循环上述操作
- 模块划分(包组织)
* model 存放请求响应对象
* util 存放⼯具类
* app main函数⼊⼝
* service 相关业务接⼝和实现类
model
Request
package model;
public class Request {
private String key = "free";
private String appid = "0";
private String msg = "";
public Request(){}
public Request(String msg){
this.msg = msg;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getAppid() {
return appid;
}
public void setAppid(String appid) {
this.appid = appid;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
Response
package model;
public class Response {
private int code;
private String content;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
util
package util;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpUtils {
public static String request(String api ){
HttpURLConnection connection = null;
int responseCode = 0;
try{
URL url = new URL(api);
//获取对应的连接对象
connection = (HttpURLConnection) url.openConnection();
responseCode = connection.getResponseCode();
}catch (Exception e){
e.printStackTrace();
}
if(200 <= responseCode && responseCode<=299){
try(InputStream inputStream = connection.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
){
StringBuilder response = new StringBuilder();
String currentLine;
while ((currentLine = in.readLine())!= null){
response.append(currentLine);
}
String result = response.toString();
return result;
}catch (Exception e){
e.printStackTrace();
}
}
return null;
}
}
service
service 层接 ⼝抽离的好处 解耦: 后续切换平台只要 ⼼中对应的实现类即可。
RobotService
package service;
import model.Response;
import java.io.UnsupportedEncodingException;
public interface RobotService {
Response qa(String msg) ;
}
QkyRobotServiceImpl
app
主函数
package app;
import model.Response;
import service.AliyunRobotServiceImpl;
import service.QkyRobotServiceImpl;
import service.RobotService;
import java.util.Scanner;
public class Main {
private static final RobotService robotService = new QkyRobotServiceImpl();
public static void main(String[] args)throws Exception {
Scanner scanner = new Scanner(System.in);
System.out.println("老板,麻烦您给我取个响亮的名称,按回车键确定!!!!");
//机器人助手的名字
String name = scanner.nextLine();
System.out.println("hi,我是您的小助手 "+name +", 直接对我下达指令");
while (true){
String input = scanner.nextLine();
if("886".equalsIgnoreCase(input)){
System.out.println("欢迎下次使用,拜拜");
break;
}else {
Response response = robotService.qa(input);
if(response != null && response.getCode() == 0){
System.out.println(name+":"+ new String(response.getContent().getBytes(),"UTF-8"));
}else {
System.out.println(name+": 暂时没明白您的意思,重新告诉我下吧");
}
}
}
scanner.close();
}
}
测试
Siri
hi,我是您的小助手 Siri, 直接对我下达指令
上海天气
Siri:[12月27日] 上海天气:晴,白天 9℃,夜晚 4℃,北风转东风,<3级
翻译: 我在看电视!
Siri:翻译:我在看电视!{br}结果:I’m watching TV!
歌词 龙卷风
Siri:★ 龙卷风-梁紫丹{br}梁紫丹 - 龙卷风{br}词:徐若瑄 曲:周杰伦{br}★ noni99{br}---------{br}爱像一阵风{br}吹完它就走{br}这样的节奏{br}谁都无可奈何{br}没有你以后{br}我灵魂失控{br}黑云在降落{br}我被它拖着走{br}静静悄悄默默离开{br}陷入了危险边缘Baby~{br}我的世界已狂风暴雨{br}Wu~爱情来的太快就像龙卷风{br}离不开暴风圈来不及逃{br}我不能再想 我不能再想{br}我不 我不 我不能{br}爱情走的太快就像龙卷风{br}不能承受我已无处可躲{br}我不要再想 我不要再想{br}我不 我不 我不要再想你{br}不知不觉 你已经离开我{br}不知不觉 我跟了这节奏{br}
886
欢迎下次使用,拜拜后知后觉 又过了一个秋{br}后知后觉 我该好好生活{br}----{br}后知后觉
打包
- File -> Project Structure -> artifacts -> + -> jar -> from modules-> 选主类和第 ⼀个单向按 钮-》确定后 会 ⽣成 Manifest⽂件
- 菜单栏 build->build artifacts -> build
- Java -jar xxx.jar 启动(如果是 Linux 或者 Mac 则可以守护进程 ⽅式)
PS F:\IT\PDF\配套资料\小D课件\JavaSE\小课堂2019年12月全新javase课程笔记+源码\源码等其他资料\第17章\第7集> java -jar .\qa-project.jar
老板,麻烦您给我取个响亮的名称,按回车键确定!!!!
Howard
hi,我是您的小助手 Howard, 直接对我下达指令
翻译 我爱你
Howard:翻译:我爱你{br}结果:I love you