最近要做一个智能音箱的项目,可是声卡一直配置不好。。。所以,还做个啥啊。没办法,智能退而求其次,做一个文本交互的聊天机器人管家,并给它写个界面。
用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); } } }
四.结果展示
联系客服