Android实现聊天机器人之火影忍者

用Python实现一个简单的微信聊天机器人 刚学习Python,做点小玩意练练手( ̄▽ ̄)~* 文章目录 一、准备工作 IDE:pycharm2019 Python:3.7 还有安卓手机一台(^_-) 代码git:代码地址 二、环境搭建 1.安装安卓工具 首先进入谷歌官网,下载对应的SDK工具,这里我使用的是android-sdk_r24.4.1 下载完之后解压,打开SDK Manager,安装对应的工具(P... 阅读详情

相信进来的同学大部分都是喜欢看火影的,我本人也是,这是我第一次在优快云上发表博客,多多支持咯~
那么话不多说,先上效果图

这是主界面
这是人机交互的情况
这是两个机器人交互的情况

我们的主角当然是鸣人咯,所以是鸣人和机器人聊天,这里的机器人是用的图灵机器人的接口实现的。
首先搭好界面,然后去图灵机器人官网注册开发者账号,创建应用,拿到接口就好搞了。
我这里的界面比较简单,可以下载源码看。关于第一张图片中的三条对话,前两个都是人机交互,最后一个是两个机器人互相聊,叫佐鸣之恋,佐助和鸣人互相撩,嘿嘿。

这里重点说一下,两个机器人怎么聊?
1.佐助发问候语给鸣人

//此时是佐助发问候语给鸣人
        if (personName.equals("佐鸣之恋")) {
            SystemClock.sleep(500);
            //发消息给子线程
            Message message = Message.obtain();
            message.what = MSG_WHAT_MAIN; // 1
            message.obj = personLastSpeakContent;
            handler_main_to_child.sendMessage(message);//发送消息到CustomThread

        }
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.子线程接收消息进行耗时操作

//自定义子线程
    class CustomThread extends Thread {
        @Override
        public void run() {
            //建立消息循环的步骤
            Looper.prepare();//1、初始化Looper
            handler_main_to_child = new Handler() {//2、绑定handler到CustomThread实例的Looper对象
                public void handleMessage(Message msg) {//3、定义处理消息的方法
                    switch (msg.what) {
                        case MSG_WHAT_MAIN:// 1
                            //在子线程中进行耗时操作,实现机器人回复
                            robotReply((String) msg.obj);
                            break;
                        default:
                            break;
                    }
                }
            };
            Looper.loop();//4、启动消息循环
        }
    }
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

3.耗时操作中的网络请求,将得到的答复从子线程发送到主线程更新UI

//佐鸣之恋(机器人与机器人交互)
        if (!personLastSpeak.equals("")) {
            JsonObjectRequest request = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        if (personLastSpeak.equals("佐助")) {
                            addDialog(list_dialog, CUSTOMER, response.getString("text"));
                            personLastSpeak = "鸣人";
                            personLastSpeakContent = response.getString("text");
                        } else if (personLastSpeak.equals("鸣人")) {
                            addDialog(list_dialog, ROBOT, response.getString("text"));
                            personLastSpeak = "佐助";
                            personLastSpeakContent = response.getString("text");
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                        addDialog(list_dialog, ROBOT, "不知道你在说什么");
                        personLastSpeak = "佐助";
                        personLastSpeakContent = "不知道你在说什么";
                    }
                    //发送到主线程更新UI
                    handler_child_to_main.sendEmptyMessage(MSG_WHAT_CHILD);// 2
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    if (personLastSpeak.equals("佐助")) {
                        addDialog(list_dialog, CUSTOMER, "你不联网,我怎么知道你说的是什么");
                        personLastSpeak = "鸣人";
                        personLastSpeakContent = "你不联网,我怎么知道你说的是什么";
                    } else if (personLastSpeak.equals("鸣人")) {
                        addDialog(list_dialog, ROBOT, "你不联网,我怎么知道你说的是什么");
                        personLastSpeak = "佐助";
                        personLastSpeakContent = "你不联网,我怎么知道你说的是什么";
                    }
                    //发送到主线程更新UI
                    handler_child_to_main.sendEmptyMessage(MSG_WHAT_CHILD);// 2
                }
            });
            mQueue.add(request);

        } else {  //人机交互
            JsonObjectRequest request = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        addDialog(list_dialog, ROBOT, response.getString("text"));
                    } catch (JSONException e) {
                        e.printStackTrace();
                        addDialog(list_dialog, ROBOT, "不知道你在说什么");
                    }
                    //发送到主线程更新UI
                    handler_child_to_main.sendEmptyMessage(MSG_WHAT_CHILD);// 2
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    addDialog(list_dialog, ROBOT, "你不联网,我怎么知道你说的是什么");
                    //发送到主线程更新UI
                    handler_child_to_main.sendEmptyMessage(MSG_WHAT_CHILD);// 2
                }
            });
            mQueue.add(request);
        }
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

4.主线程接收到答复,更新UI,机器人就说出话来了

private Handler handler_child_to_main = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case MSG_WHAT_CHILD:// 2
                    //更新UI
                    tvMainTitle.setText(personName);
                    showDialogAdapter.notifyDataSetChanged();
                    if (personName.equals("佐鸣之恋")) {
                        //发消息给子线程
                        Message message = Message.obtain();
                        message.what = MSG_WHAT_MAIN; // 1
                        message.obj = personLastSpeakContent;
                        handler_main_to_child.sendMessage(message);//发送消息到CustomThread
                    }
                    break;
                case MSG_WHAT_INPUTTING:// 3
                    tvMainTitle.setText("对方正在输入");
                    break;
                default:
                    break;
            }
        }
    };
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

下面就给上面给出的关键代码理一下思路。
这里涉及到一个死循环,所以需要借助子线程和handler,在子线程中进行耗时操作(网络请求机器人答复),首先呢,在图灵机器人官网创建两个机器人,佐助和鸣人,得到各自的接口。接下来就是代码实现的逻辑,由佐助说第一句话(这句话是早就准备好的随机问候语),此时把佐助的这句话当做用户的话,传给鸣人机器人的接口(从主线程中利用handler发送到子线程进行网络请求),得到鸣人机器人返回的内容,由鸣人说出来(从子线程中得到答复后利用handler传给主线程更新UI)。然后再将鸣人的话当做用户的话发送给佐助机器人,这里就和佐助发给鸣人的道理一样了。道理很简单,但要注意区分说话的人是谁,答复的人是谁(可以使用Tag标记上次说话的人)。还有要和人机交互模式区分开来,做好判断,这里面的小细节还是有点多的。所以理清逻辑很重要,能封装的就封装。比如将机器人或用户说出话来的功能封装起来,方便调用。具体请看源码。
欢迎大家和我一起交流,共同进步,谢谢!

源码下载地址(两个都可以):http://download.youkuaiyun.com/download/qq_33553668/10031938
https://github.com/Shenggq558/MyFirstDeepLearningDemo

Android智能聊天机器人的实现 近年来,随着人工智能技术的不断发展,智能聊天机器人成为了各个领域中的热门话题。在移动设备广泛应用的今天,如何将智能聊天机器人应用到Android平台上,提供用户友好的交互体验,成为了开发者们的关注焦点。本文将介绍如何使用现有的技术和工具,在Android平台上实现一个智能聊天机器人。为了简化开发过程,我们可以使用开源的自然语言处理库,如NLTK或SpaCy,来支持语义理解和生成的功能。同时,我们可以使用现有的聊天机器人框架,如Rasa或ChatterBot,来实现对话管理的功能。 阅读详情

相关推荐

Android Studio聊天机器人应用实战

Android Studio是官方推荐的Android应用开发集成开发环境(IDE),由Google主导开发。它支持跨平台的开发方式,提供了代码编辑、调试、性能分析等一系列开发工具,使得Android应用开发更加高效。在Android开发中,XML布局文件是定义用户界面的基础。开发者通过编写XML代码,可以定义界面元素的位置、大小、颜色以及其他属性。合理地编写和优化XML布局文件不仅能够提高应用性能,还能提升用户界面的响应速度和用户体验。XML布局文件的编写应该遵循以下原则:模块化。

weixin_36078669的博客 1018

基于Android Studio 开发之智能聊天机器人App

基于Android Studio 开发之智能聊天机器人App 本文将介绍如何使用Android Studio开发一个智能聊天机器人项目。我们将使用Android Studio,JAVA语言,JDK1.8,数据库Sqlite。通过使用 OkHttp 库和 GSON 库实现了向服务器发送请求并从服务器接收响应的操作,使用户可以与机器人进行聊天互动。

编程乐学的博客 3903

Android聊天机器人之火影忍者

本项目使用图灵机器人接口实现的基于Android的聊天机器人Demo,意在交流学习。

Android Studio实现智能聊天机器人

综合运用SQLite数据库、HttpURLConnection、ListView、GSON、SharedPreferences等技术开发一款智能聊天机器人应用。打开应用,进入欢迎页面,3s后跳转到登录页面。先注册账号,系统会检验账号是否已注册,注册成功后会将账号信息插入到用户表中,接着会跳转至登录页面,并且自动填充账号和密码。如果勾选了记住密码并且成功登录,那么下次打开应用就会自动填充账号和密码。

振华OPPO的博客世界 1万+

桂电 数电实验 期末考试 试卷+解析(74LS192 + 74LS153 + 74LS139 + 74LS00 / 74LS20)

桂电 数电实验 期末考试 试卷+解析(74LS192 + 74LS153 + 74LS139 + 74LS00 / 74LS20)

Molly 的博客 1万+

【实战】S7-PLCSIM Advanced V3.0 授权问题排查指南(Error Code:-30与LicenseNotFound深度解析)

本文深度解析S7-PLCSIM Advanced V3.0启动时遇到的Error Code:-30与LicenseNotFound报错问题。文章提供了一套系统性的排查指南,从检查WinPcap驱动兼容性、确保Automation License Manager服务运行,到正确安装浮动授权以及清理系统残留缓存,逐步解决授权链条中的各个环节故障,帮助用户彻底解决仿真环境启动失败的问题。

weixin_29185167的博客 720

手把手教你搭建微信聊天机器人系列(三):搭建对接文心一言(ERNIE-Bot大模型)接口的微信聊天机器人

我们在app/service目录增加ernie.js。const {Servicetry {data: {},})我们按eggjs的service的写法,定义了一个方法,用来请求access_token,但是这样写并不能执行,我们需要有个逻辑,在应用启动完毕后会调用这个方法。sendMsg函数用于调用ERNIE-Bot会话接口,传入对话内容并返回对话结果。

sfsgtc的博客 5636

UNITE真菌数据库使用避坑指南:从下载到注释的完整流程

本文提供了UNITE真菌数据库从下载到注释的完整实战指南。针对真菌ITS序列分析,重点解析了数据库版本选择、格式转换的常见陷阱,并详细介绍了如何训练优化的sklearn分类器以提升物种注释的精度和可靠性,帮助用户构建高效稳定的本地工作流。

weixin_29240343的博客 199

Android开发之智能聊天机器人

Android开发之智能聊天机器人

不服输的小乌龟 1万+

一文帮你彻底搞懂ARM Debug Interface之SWD(转)

ARM的文档写的已经很好了,但是关于上电以后的第一时间应该怎么操作,依然写的不够清晰,导致我第一次用的时候还是费了一些周折。今天做一个详细的梳理,希望能够帮助到更多的朋友。BTW, ARM_Cortex-M0/3 DesignStart系列会持续更新,只是中间可能会穿插其他知识点。SWD是Serial Wire Debug的简称,翻译成中文是”串行线调试”。

2302_79847220的博客 6858

基于卷积神经网络的人脸识别算法

摘要:近年来,随着科学技术的不断发展,人脸识别技术日渐成熟,使得人脸识别技术的使用率不断增大。例如:门禁、ATM机、公安系统以及新兴起的人机交互等领域,都应用到了人脸识别系统。在人脸识别研究领域中,深度学习扮演着重要的角色。由于深度学习的人脸识别技术凭借其识别率高、识别快等特点,逐渐成为整个领域的主流技术。在众多深度学习算法中,以卷积神经网络为代表的人脸识别系统得到了广泛应用,主要研究内容如下:首先,通过对经典损失函数进行研究,对比每种损失函数的特点,然后根据A-Softmax函数进行改进,借助Margin

yyq2263511327的博客 1万+

智能聊天机器人实现(源码+解析)

前言: 之前写了一篇  《美女图片采集器 (源码+解析)》 得到了众多朋友的支持, 发现这样系列的教程还是挺受欢迎的, 也激励我继续写下去。 也在那一篇文章中提过, 美女图片采集只是我先前那个完整APP中的一个功能罢了, 还有其他几个比较好玩的尚未开源, 之后有时间会逐一写篇教程。 今天带来的是智能聊天机器人实现(源码+解析), 和上一篇教程一样, 当你没有女朋友的时

jjccwwbb的专栏 5283

基于FPGA设计的信号分析仪(项目资料ID:28)

基于现场可编程门阵列(FPGA)设计的信号分析仪。该信号分析仪旨在实现对各类信号的精确分析,具备频率、幅度、相位等参数测量功能。通过采用 FPGA 作为核心处理单元,充分利用其并行处理能力和可重构特性,提高了系统的处理速度和灵活性。论文介绍了信号分析仪的总体设计方案,包括硬件电路设计和软件算法实现。

以培养嵌入式工程师为己任 1万+

Android聊天程序开发

(1)聊天页面Activity代码如下,其中sendData()方法是发送信息的方法,它获取你输入的信息,放入信息列表中,并且调用getDataFromServer()方法,将你输入的信息发送到服务器,从服务器获取返回信息,从而实现和机器人的聊天功能。开发一款机器人聊天程序,首先来看效果,如图所示,它是一个简单的聊天界面,我问了它一个关于文学的问题和一个关于计算机程序的问题,看起来这两个问题回答得还不错,那么接下来就来看看这款程序是怎么开发的。方法用于发送聊天信息并获取服务器返回的聊天信息。

liuhaikang的博客 2078

23、电生理与CSD分析:探索大脑活动的前沿技术

本文介绍了电生理与电流源密度(CSD)分析在探索大脑活动中的前沿应用。从电生理技术的发展现状,到局部场电位(LFPs)的起源与解释,重点阐述了CSD分析的原理、实验方法及其在绘制皮层兴奋流、解析突触输入和研究自发振荡中的广泛应用。文章还总结了该领域的优势与挑战,并展望了技术改进、多模态融合、数据分析创新及临床拓展的未来方向,展示了这些技术在揭示大脑功能机制中的关键作用。

Apple的专栏 119

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Python实现聊天机器人(基于ChatterBot)

2.在pycharm中建立工程,输入如下。1.安装chatterbot。然后运行一下就成功了……废话不多说,直接上正题。

Lemonlittle的博客 2382

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

基于Android studio开发的图灵智能聊天机器人

设计一个对话框能实现聊天功能,要求能联网实现自动对话的功能,可以实现编辑、发送、删除等功能。

qq_57749830的博客 3785

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android开发 聊天机器人简版

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:paddingTop="30dp" android:background="#f5f5f5" android:layout_height="match_parent"> <TextView and

m0_74017744的博客 1203

Android智能聊天机器人的实现(1)

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。还有。

m0_74931244的博客 1101

Android智能聊天机器人

智能聊天机器人 一、概述 (一)研究背景   随着科技的快速发展,机器人技术及其产业也发展迅速.越来越多各式各样的机器人被应用到社会生产的各个行业以及社会生活的各个领域,他们发挥着越来越重要的作用.智能机器人的研究备受关注越来越多,成为当今热点问题.本次介绍了基于Android的平台的智能机器人研究,机器人可以聊天,报天气预报,讲笑话等功能. (二)研究意义   聊天机器人在很多大型App上都有使用,比如QQ群里的QQ小冰,淘宝京东等App上在没有人工客服之前会有机器人跟你聊天,根据你发的问题关键词,向你推

weixin_44728725的博客 1322

Android聊天机器人

一、项目介绍 ​ 本项目使用android来开发一个智能聊天机器人,该智能聊天机器人主要是供用户娱乐,他可以供用户娱乐休闲,他可以与用户讲故事、说笑话、说笑话、跟用户聊天,非常有趣。 涉及到知识点: 网络编程【okhttp】 json数据解析 Handler处理 在实现智能机器人聊天功能,在实现这个功能的过程中申请了一个图灵机器人的key,根据该key并通过异步访问网络获取机器人回复的信息,接着调用Handler将获取的信息发送到主线程,并通过JSON解析将获取的聊天数据解析成字符串显示到界面上。

Elf.筱焱的博客 2831

NLP简单项目实战——ChatBOT(一)

需要实现一个聊天机器人,该机器人可以起到智能客服的作用。由于语料的限制,准备了相关的编程问题,回答什么是python、python有什么优势等问题。实现流程:后面的QA机器人是问答模型内容,我们将在前面将基础功能进行完善,后续实现问答模型只用实现内部细节就好了。实际运作流程:接受用户的问题之后对问题进行基础的处理,然后对问题进行分类判断意图。如果用户希望咨询问题就调用问答模型,希望进行闲聊就调用闲聊模型。

weixin_62436171的博客 5332

重拾Android之AS4.1配置greendao(最新)

导入greendao依赖: 1.在app级build.gradle中添加代码: id 'org.greenrobot.greendao' // apply plugin greendao { schemaVersion 1 //数据库版本号 daoPackage 'com.yme.stationapp.greendao' //填写自己的包名+文件夹 // 设置DaoMaster、DaoSession、Dao 包名 targetGenDir '

盛国强的博客 1762
上一篇: 简化的微信小程序剪切头像we-cropper框架案例
下一篇: 微信小程序关于we-cropper框架对各类机型适配问题 - 已解决
盛国强
博客等级 码龄11年 105粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值