基于图灵机器人的聊天机器人实现(一)

时间:2021-08-17 22:14:25

最近要做一个智能音箱的项目,可是声卡一直配置不好。。。所以,还做个啥啊。没办法,智能退而求其次,做一个文本交互的聊天机器人管家,并给它写个界面。
用java写,然后在linux装个jdk就行了。
下面说一下怎么实现
一.图灵api接口

 public String chart(String message){
        StringBuffer sb=new StringBuffer();
        Random rand = new Random();
        ArrayList<String> KEYLIST=new ArrayList<String>();
        KEYLIST.add("8d64b5ff5a57435fa63fd0e111f821fc");//注册图灵机器人的账号,每创建一个机器人会给一个key,通过这个key来调用api
       KEYLIST.add("d085ed36e2604506968a3c18c5733116");//因为由每个key都有调用次数限制,这里存了多个key
       KEYLIST.add("4cdce663b3a44b5bb94cf62ca52de590");

        try{
            String APIKEY =KEYLIST.get(rand.nextInt(3));//随机选择用哪个key
            String INFO = URLEncoder.encode(message, "utf-8");//转换格式
            String getURL = "http://www.tuling123.com/openapi/api?key=" + APIKEY + "&info=" + INFO;//拼接请求url
            URL getUrl = new URL(getURL);
            HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection();
            connection.connect();//连接
            // 取得输入流,并使用Reader读取
            BufferedReader reader = new BufferedReader(new InputStreamReader( connection.getInputStream(), "utf-8"));
            sb.setLength(0);//每次把Stingbuffer清空
            String line = "";
            while ((line = reader.readLine()) != null) {//读取结果
                sb.append(line);
            }
            reader.close();
            // 断开连接
            connection.disconnect();
        }
        catch ( Exception e){
            e.printStackTrace();
        }
        String split[]=sb.toString().split(":");
        String answer=split[split.length-1];
        answer=answer.substring(1,answer.length()-2);//获取到回应
        return  answer;
    }

二.界面

package com.test;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class myframe extends JFrame {
    private JTextArea jTextAreaofShow;
    private JTextArea jTextAreaofSend;
    private JScrollPane scrollPaneofShow;//滚动框
    private JScrollPane scrollPaneofSend;
    private JPanel panel;
    private JButton jButton;
    private robot robot;
    public  myframe(String title,int x,int y,int w,int h) {
        super(title);
        robot=new robot();//初始化机器人
        //为send部分设置面板
        panel=new JPanel();
        panel.setLayout(new FlowLayout());
        jButton=new JButton("发送");
        jButton.addActionListener(new buttonlistener());//为button设置监听器
        jTextAreaofSend=new JTextArea();
        //设置send文本框的大小 2行20列
        jTextAreaofSend.setRows(2);
        jTextAreaofSend.setColumns(50);
        jTextAreaofShow=new JTextArea();
        jTextAreaofShow.setRows(10);
        jTextAreaofShow.setColumns(50);
        jTextAreaofShow.setEditable(false);//设置show文本框不可编辑
        //为两个文本框设置滚轮
        scrollPaneofSend=new JScrollPane(jTextAreaofSend);
        scrollPaneofShow=new JScrollPane(jTextAreaofShow);
        //send文本框和按钮添加到面板
        panel.add(scrollPaneofSend);
        panel.add(jButton);
        add(scrollPaneofShow,BorderLayout.CENTER);
        add(panel,BorderLayout.SOUTH);
        setBounds(x,y,w,h);//设置边界大小
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置关闭事件
    }
    public class buttonlistener implements ActionListener{//监听器
        @Override
        public void actionPerformed(ActionEvent e) {
            String message=jTextAreaofSend.getText();
            if(message!=null){
                String result=robot.chart(message);
                String show=jTextAreaofShow.getText();
                StringBuilder showbuider=new StringBuilder(show);
                showbuider.append("我说:"+message+"\n");
                showbuider.append("小管家:"+result+"\n");
                jTextAreaofShow.setText(showbuider.toString());
                jTextAreaofSend.setText("");
            }
        }
    }
}

三.主函数

package com.test;

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
       myframe myframe=new myframe("机器人管家",100,100,800,500);
       myframe.setVisible(true);
        robot robot=new robot();
        Scanner sc = new Scanner(System.in);
        ArrayList<String> ability=new ArrayList<>();
        while(true){
            System.out.println("你说:");
            String message=sc.nextLine();
            if(message.equals("提醒")){

            }
            String result=robot.chart(message);
            System.out.println("机器人:"+result);
        }


    }
}

四.结果展示
基于图灵机器人的聊天机器人实现(一)