目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

X

人工智能问答机器人

智能问答 API 平台

青云客 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

作者:Soulboy