当前位置: 首页 > article >正文

java开发人工智能问答小项目

一、前置知识补充

1.如何发起http请求,获取云服务端的响应数据

package net.xdclass.chapter15;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class URLTest {

    public static void main(String []args) throws Exception {

        URL url = new URL("https://assets.msn.cn/breakingnews/v1/cms/api/amp/article/AA5Quct");//请求数据的地址

        System.out.println("getHost="+url.getHost());
        System.out.println("getProtocol="+url.getProtocol());
        System.out.println("getPort="+url.getPort());
        System.out.println("getPath="+url.getPath());
        System.out.println("getQuery="+url.getQuery());
        //getPath和getQuery的组合
        System.out.println("getFile="+url.getFile());

        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();//打开连接

       int responseCode = httpURLConnection.getResponseCode();//获取响应码
       if(200 <= responseCode && responseCode<=299){//正常响应

           try(InputStream inputStream = httpURLConnection.getInputStream();//获取输入流
               BufferedReader in =  new BufferedReader(new InputStreamReader(inputStream))){//读云服务端响应的数据

             StringBuilder response = new StringBuilder();//创建builder容器对象,存储拼接后的响应数据

             String currentLine;

             while ( (currentLine =in.readLine())!=null ){
                 response.append(currentLine);//拼接数据,形成完整的响应数据
             }

            System.out.println(response.toString());

           }catch (Exception e){
               e.printStackTrace();
           }

       }



    }
}

2.将获取数据格式化

  • 在线工具

 JSON在线解析格式化验证 - JSON.cn

花括号表示对象,方括号表示数组

下载json库,为本地项目配置解析工具

  • 常见的JSON库

Gson Google公司开源 地址:https://github.com/google/gson

FastJson阿⾥里里巴巴开源 地址:https://github.com/alibaba/fastjson

引入后测试运行: 

package net.xdclass.chapter15;

import com.google.gson.Gson;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Map;

public class URLTest {

    public static void main(String []args) throws Exception {

        URL url = new URL("https://assets.msn.cn/breakingnews/v1/cms/api/amp/article/AA5Quct");

        System.out.println("getHost="+url.getHost());
        System.out.println("getProtocol="+url.getProtocol());
        System.out.println("getPort="+url.getPort());
        System.out.println("getPath="+url.getPath());
        System.out.println("getQuery="+url.getQuery());
        //getPath和getQuery的组合
        System.out.println("getFile="+url.getFile());

        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();//打开连接

       int responseCode = httpURLConnection.getResponseCode();//获取响应码
       if(200 <= responseCode && responseCode<=299){//正常响应

           try(InputStream inputStream = httpURLConnection.getInputStream();//获取输入流
               BufferedReader in =  new BufferedReader(new InputStreamReader(inputStream))){//读云服务端响应的数据

             StringBuilder response = new StringBuilder();//创建builder容器对象,存储拼接后的响应数据

             String currentLine;

             while ( (currentLine =in.readLine())!=null ){
                 response.append(currentLine);//拼接数据,形成完整的响应数据
             }

            String jsonStr=response.toString();//响应内容
               System.out.println(jsonStr);
             Gson gson = new Gson();//创建gson对象
              Map<String,Object> objectmap=gson.fromJson(jsonStr, Map.class);//将json字符串转换成map对象
               Object title = objectmap.get("title");//获取title的值
               System.out.println(title);

           }catch (Exception e){
               e.printStackTrace();
           }

       }



    }
}

2.搭建一个echo服务

package net.xdclass.chapter15;

import java.util.Scanner;

public class ScannerTest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);//创建扫描器对象
        while(true){
            System.out.println("请输入一个字符:");
            String context = scanner.nextLine();//获取用户输入的内容
            if("886".equalsIgnoreCase(context)){
                System.out.println("欢迎下次登录,再见!");
                break;
            }else{
                System.out.println("您输入的内容是:"+context);
            }
        }
        scanner.close();//关闭扫描器
    }
}

3.智能问答API平台的搭建

青云客智能聊天机器人API

使用 

http://api.qingyunke.com/api.php?key=free&appid=0&msg=输入你想了解的内容​​​​​​

eg: api.qingyunke.com/api.php?key=free&appid=0&msg=你今年多大了

 二、项目的正式开发

1..项目基本框架搭建

流程

 用户输⼊入指令 -> http发送请求 -> 解析结果 -> 显示内容 -> 循环上述操作 

包分层

model 存放请求响应对象

util 存放工具类

app main函数入口

service 相关业务接口和实现类

2.引入json依赖

本地引入Json库:第一点中有说明。

3.model层

初始请求参数

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;
    }
}

初始响应参数

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;
    }
}

 

4.封装Http工具类

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);//获取api的URL对象
            //获取对应的连接对象
            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;


    }

}

5.service业务层接口的定义与实现

 接口

package service;

import model.Response;

import java.io.UnsupportedEncodingException;

//定义一个业务服务接口
public interface RobotService {

    Response qa(String msg) ;//问答接口传入请求的内容,返回响应的内容

}

对应实现类

package service;

import com.google.gson.Gson;
import model.Response;
import util.HttpUtils;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

//实现业务服务接口
public class QkyRobotServiceImpl implements RobotService {


    //青云客api
    private static final String apiTpl = "http://api.qingyunke.com/api.php?key=free&appid=0&msg=%s";


    private static  final Gson gson = new Gson();



    @Override
    public Response qa(String msg) {

        String api = null;
        try {
            api = String.format(apiTpl, URLEncoder.encode(msg,"UTF-8") );//拼接请求的url
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        String result =  HttpUtils.request(api);//通过Http工具类来发送请求

        //可以做逻辑判断,比如null的时候,或者出错

        Response response = gson.fromJson(result,Response.class);//将json字符串转化为Response对象

        return response;
    }


}

6.实现核心入口类app main层 

 获取用户输入,调用请求方法

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 {
        //1.获取用户输入
        Scanner scanner = new Scanner(System.in);
        System.out.println("老板,麻烦您给我取个响亮的名称,按回车键确定!!!!");
        String name = scanner.nextLine();
        System.out.println("hi,我是您的小助手 "+name +", 直接对我下达指令");
        //2.对不同输入作处理
        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();


    }
}

7.项目打包

jar包方式

File -> Project Structure -> artifacts -> + -> jar -> from modules-> 选主类和第⼀一个单向按钮-》确定后会生成Manifest文件

勾选include in project build(不用)

菜单栏 build->build artifacts -> build java -jar xxx.jar

启动:在IDEA终端进入out----\artifacts----qa_project_jar再运行

java -jar qa-project.jar

8.效果图

 

 源码可以直接去gitee仓库

https://gitee.com/junxin-nanwang​​​​​​​

 

 


http://www.kler.cn/a/598096.html

相关文章:

  • 关于大数据的基础知识(三)——数据安全与合规
  • 平芯微PW5012应用电路
  • Codeforces Round 1012 (Div. 2) 3.23
  • 个人学习编程(3-23) leetcode刷题
  • 音频变压器技术白皮书
  • uniapp的app产物如何打成apk
  • Spring Boot(十六):拦截器Interceptor
  • ScheduledThreadPoolExecutor 延迟任务执行原理以及小顶堆的应用(源码)
  • 运维智能体的可行性研究
  • 图解AUTOSAR_SWS_IPDUMultiplexer
  • 多个内容滑动轮播图【前端】
  • 算法训练营第二十二天 | 回溯算法(四)
  • A2O MAY首支单曲《Under My Skin(A2O)》成功打入美国“MediaBase主流电台榜单”,中国女团首次登榜
  • C#控制台应用程序学习——3.23
  • nacos-actuator漏洞
  • 国产芯片解析:沁恒USB PD无线充电功率芯片新势力:CH271与CH275
  • 【Go】Go语言结构体笔记
  • 自定义mavlink 生成wireshark wlua插件错误(已解决)
  • HTTP长连接与短连接的前世今生
  • 2025年01月02日浙江鼎永前端面试