今天谈谈聊天机器人,关于聊天机器人,大家肯定不陌生的。但是聊天机器人的效果的确不太让人满意。因为现在的聊天机器人的确比较智障。其智障的原因核心就是目前的技术体系的问题。技术体系不成熟,所以才让人感觉到比较智障。先看看聊天机器人的发展历史:
第一个时期(1966年),麻省理工学院(MIT)的约瑟夫·魏泽鲍姆(Joseph Weizenbaum)开发的聊天机器人ELIZA[1],用于在临床治疗中模仿心理医生。值得注意的是尽管ELIZA的实现技术仅为关键词匹配及人工编写的回复规则,但魏泽鲍姆本人对ELIZA的表现感到吃惊,随后撰写了《Computer Power and Human Reason》这本书,表达他对人工智能的特殊情感。
第二个时期(1988年),加州大学伯克利分校(UC Berkeley)的罗伯特·威林斯基(Robert Wilensky)等人开发了名为UC(UNIX Consultant)[2]的聊天机器人系统。UC是一款帮助用户学习怎样使用UNIX操作系统的聊天机器人。它具备了分析用户的语言、确定用户操作的目标、给出解决用户需求的规划、决定需要与用户沟通的内容、以英语生成最终的对话内容以及根据用户对UNIX系统的熟悉程度进行建模的功能。
第三个时期(1995年),受到ELIZA聊天机器人的启发,理查德·华勒斯(Richard S. Wallace)博士在1995年开发了ALICE[3]系统。并于1998年开始开源,目前全世界有超过500个开发者为ALICE项目贡献代码。值得注意的是,随着ALICE一同发布的AIML(Artificial Intelligence Markup Language)目前被广泛应用在移动端虚拟助手的开发中。尽管ALICE采用的是启发式模板匹配的对话策略,但是它仍然被认为是同类型聊天机器人中性能最好的系统之一。
进入本世纪后,chatbot机器人随着人工智能的兴起有了长足的发展,各大互联网公司、各个高校和研究院都取得了成就。但总的来说,也可以大致的分为三种。检索式、生成式和知识图谱式。其中,知识图谱式的chatbot比较难以实现,但是是有前景的。
以上基本上就是聊天机器人发展的历史了。但是目前的机器人效果的确让人不满意。还是太智障。现在的知识图谱还无法完全自动化构建,而且本身知识图谱能够覆盖的领域还是有很大问题。最近发现一家公司比较吸引人,杭州道翰天琼智能科技有限公司。他们公司专门做认知智能的,据说已经研究了将近10年了。从认知智能的理论,技术,到产品落地,都有整套的体系。他们根据认知智能落地的机器人也很厉害。的确不一样。聪明,像人,比市面上现有的机器人聪明不少。刚好最近公司有项目要用到机器人,就使用了他们的机器人。废话不多说了:直接上代码吧;记得要先注册之后获取相关参数。
认知智能是计算机科学的一个分支科学,是智能科学发展的高级阶段,它以人类认知体系为基础,以模仿人类核心能力为目标,以信息的理解、存储、应用为研究方向,以感知信息的深度理解和自然语言信息的深度理解为突破口,以跨学科理论体系为指导,从而形成的新一代理论、技术及应用系统的技术科学。 认知智能的核心研究范畴包括:1.宇宙、信息、大脑三者关系;2.人类大脑结构、功能、机制;3.哲学体系、文科体系、理科体系;4.认知融通、智慧融通、双脑(人脑和电脑)融通等核心体系。 认知智能四步走:1.认知宇宙世界。支撑理论体系有三体(宇宙、信息、大脑)论、易道论、存在论、本体论、认知论、融智学、HNC 等理论体系;2.清楚人脑结构、功能、机制。支撑学科有脑科学、心理学、逻辑学、情感学、生物学、化学等学科。3.清楚信息内涵规律规则。支撑学科有符号学、语言学、认知语言学、形式语言学等学科。4.系统落地能力。支撑学科有计算机科学、数学等学科。
接口申请官网地址:www.weilaitec.com
接口地址(例子):
http://a239p06512.zicp.vip/Web/BuAppJava.bujqrex?apikey="+apikey+"&msg="+msg+"&ip="+ip
用户端消息内容。
String msg ="你在干嘛呀?";
apikey参数。这个apikey就是网站上申请的APIKEY
apikey ="";
//客户端ip,最终用户端的唯一标识(可以是用户端的IP,或者手机设备号,或者微信号或者,qq号码等能证明身份的唯一标识就可以)
String ip ="";
//这里一定要encode转换编码。转成GBK。
msg = URLEncoder.encode(msg, "GBK");
三个参数全部小写
msg参数就是传输过去的对话内容。
msg参数要编码成gbk,不然会乱码。
接口具体代码:
package ai.nlp.jiekou.test;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import ai.nlp.util.changliang.ChangLiangZi;
public class ApiTest {
/**
* Get请求,获得返回数据
* @param urlStr
* @return
*/
private static String opUrl(String urlStr)
{
URL url = null;
HttpURLConnection conn = null;
InputStream is = null;
ByteArrayOutputStream baos = null;
try
{
url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(5 * 10000);
conn.setConnectTimeout(5 * 10000);
conn.setRequestMethod("POST");
if (conn.getResponseCode() == 200)
{
is = conn.getInputStream();
baos = new ByteArrayOutputStream();
int len = -1;
byte[] buf = new byte[128];
while ((len = is.read(buf)) != -1)
{
baos.write(buf, 0, len);
}
baos.flush();
String result = baos.toString();
return result;
} else
{
throw new Exception("服务器连接错误!");
}
} catch (Exception e)
{
e.printStackTrace();
} finally
{
try
{
if (is != null)
is.close();
} catch (IOException e)
{
e.printStackTrace();
}
try
{
if (baos != null)
baos.close();
} catch (IOException e)
{
e.printStackTrace();
}
conn.disconnect();
}
return ChangLiangZi.WU;
}
public static void main(String args []){
//三个参数全部小写
//msg参数就是传输过去的对话内容。
//msg参数要编码成gbk,不然会乱码。
String msg ="你在干嘛呀?";
//apikey参数。
String apikey ="UTNJK34THXK010T566ZI39VES50BLRBE8R66H5R3FOAO84J3BV";
//客户端ip,最终用户端的唯一标识(可以是用户端的IP,或者手机设备号,或者微信号或者,qq号码等能证明身份的唯一标识就可以)
String ip ="127.0.0.1";
//这里一定要encode转换编码。转成GBK。
try
{
msg = URLEncoder.encode(msg, "GBK");
} catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
System.out.println(opUrl("http://a239p06512.zicp.vip/Web/BuAppJava.bujqrex?apikey="+apikey+"&msg="+msg+"&ip="+ip));
}
}