Android智能聊天机器人

        苹果有Siri,百度有小度,小米有小爱,而且后来竟然又出了个小兵,总之类似的智能聊天机器人是越来越多了。面对这样智能的机器人,我们似乎只能是体验者。想想底层的算法就让人头疼,它到底是怎么识别出一句话的意思的?又是怎么实现智能回复的?难道这就是传说中的机器学习、神经网络?不不不,其实这叫图灵机器人。也许底层算法真的很难很复杂,但如果你想实现一个自己的机器人,其实一点也不难。

        今天就手把手教大家实现一个属于自己的智能聊天机器人。

 

        首先我们百度图灵机器人,进入官网,网址为http://www.tuling123.com/

        点击右上角的小头像便可以进入控制台了

 来到控制台我们就可以根据自己的需求创建机器人了,过程没什么难度,这里有一点需要注意,当我们创建完成之后点击设置

会进入到如下界面

注意这个密钥开关,不要打开,不要打开,不要打开!!!否则在开发过程中会报40001:加密方式错误。

        如果大家自学能力比较强可以直接看文档接入,不懂的地方再来借鉴一下。文档地址为

https://www.kancloud.cn/turing/www-tuling123-com/718227这里也有一点需要注意,接口地址只允许post请求访问,我们直接用浏览器是无法访问的。所以不要以为浏览器不能访问接口就不能用了。

        必要的准备工作已经完成了,下面进入开发阶段。

        整个聊天机器人的核心思想就是将用户发送的信息通过post请求访问图灵机器人接口,然后解析接口返回的数据,将有用的回复信息提取出来显示到界面上。

        首先创建一个工具类叫做HttpUtils用来处理网络请求。用原生的HttpUrlConnection也可以完成,但远远不如OkHttp用起来方便,因此我们选择OkHttp来进行网络请求,打开app的build.gradle文件,在dependencies中加入

implementation 'com.squareup.okhttp3:okhttp:3.12.1'//用于处理网络请求
implementation 'com.google.code.gson:gson:2.8.5'//用于解析json数据
implementation 'de.hdodenhof:circleimageview:3.0.0'//用于处理圆形头像

不要忘了声明权限

    <uses-permission android:name="android.permission.INTERNET"/>

然后实现我们的网络请求方法

    /**
     * 使用OkHttp自身回调请求数据
     * @param msg
     * @param callback
     * enqueue()方法中会自动开启线程
     */
    public static void sendOkHttpRequest(String msg, okhttp3.Callback callback) {
        OkHttpClient client = new OkHttpClient();
        final String json = "{" +
                "\"reqType\":0," +
                "    \"perception\": {" +
                "        \"inputText\": {" +
                "            \"text\": \"" + msg + "\"" +
                "        }," +
                "        \"inputImage\": {" +
                "            \"url\": \"\"" +
                "        }," +
                "        \"selfInfo\": {" +
                "            \"location\": {" +
                "                \"city\": \"天津\"," +
                "                \"province\": \"天津\",\n" +
                "                \"street\": \"天津理工大学\"\n" +
                "            }" +
                "        }" +
                "    }," +
                "    \"userInfo\": {" +
                "        \"apiKey\": \"" + API_KEY + "\"," +
                "        \"userId\": \"" + "572780350" + "\"" +
                "    }" +
                "}";
        RequestBody body = RequestBody.create(JSON,json);
        Request request = new Request.Builder()
                .url(URL)
                .post(body)
                .build();
        //注意这里用的是enqueue()方法,此方法会在内部自动开启一个线程
        client.newCall(request).enqueue(callback);
    }

        至于我们为什么这样构建请求体呢,那是因为官方文档中给出了请求示例。 我们只需要将inputText下面的text内容替换为用户输入的信息,并将userInfo下面的apikey替换为我们创建机器人时得到的apikey就可以了。此外还需要将userId替换为一个长度小于等于32位的字符串,用于标识用户,这里我用了自己的QQ号。

        可以看到里面有很多请求信息,其中某些是必须要填写 的,还有一些是不必须的,具体大家可以查看文档。

 

        还有一点需要注意的是网络请求需要在子线程中进行,而我们并没有开启子线程,而是在方法中接收了一个 okhttp3.Callback类型的参数。而且也没有像往常一样使用client.newCall(request).execute();方法,而是调用了

client.newCall(request).enqueue(callback);方法。其实enqueue()方法内部已经自动帮我们开启了子线程,我们只需要在调用的时候实现okhttp3提供的callback接口就可以轻松处理返回的数据了。

        当然,如果你不习惯使用okhttp3提供的callback接口的话,可以实现自己的接口,并在自己定义的接口中处理返回数据,就像下面这样。

    /**
     * 自己构造回调方法请求数据,测试时使用
     * @param msg
     * @param listener
     * 因为是网络请求,因此需要开启线程
     */
    public static void doRequest(String msg, final HttpCallbackListener listener) {
        final String json = "{" +
                "\"reqType\":0," +
                "    \"perception\": {" +
                "        \"inputText\": {" +
                "            \"text\": \"" + msg + "\"" +
                "        }," +
                "        \"inputImage\": {" +
                "            \"url\": \"\"" +
                "        }," +
                "        \"selfInfo\": {" +
                "            \"location\": {" +
                "                \"city\": \"天津\"," +
                "                \"province\": \"天津\",\n" +
                "                \"street\": \"天津理工大学\"\n" +
                "            }" +
             
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值