热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

搭建一个聊天机器人

gossip前几个星期双11的时候,腾讯服务器搞活动,我就入手一台轻量应用服务器,然后买了一个2H4G的,它是真的便宜&#

gossip

前几个星期双11的时候,腾讯服务器搞活动,我就入手一台轻量应用服务器,然后买了一个2H4G的,它是真的便宜,我一下买了3年的,然后就打算捣鼓一下它,当然这个聊天机器人就是其中一个,因为之前捣鼓过一次了,比上一次好了许多,有一点轻车熟路的感觉。

Start

目前市面上也有很多大厂做聊天机器人,比如,腾讯,百度,微软等,而且也有一下开源的提供接口,比如青云客,思知。但是我想做一个自己的自己的聊天机器人,对于我这种不太会机器学习的人来说,难度很大,但是偶然一次我看到百度开源的paddlepaddle,它里面已经开源了一些模型,包括一个聊天的模型,并且提供了部署的框架,可谓是非常的贴心,话不多说,开始干。

Work

首先要安装一些它的库。

pip install --upgrade paddlepaddle -i https://mirror.baidu.com/pypi/simple
pip install --upgrade paddlehub -i https://mirror.baidu.com/pypi/simple

这两个是必要的,如果下面提示缺少什么就安装什么就好了,这些都是基本操作,不多说,那下面就是开始搭建聊天机器人,官方是给了一个微信聊天的机器人demo,而我想封装成一个api调用,这里先从简单的开始,先使用官方的那个一键启动。

hub serving start -m plato-mini

这里第一次使用会进行模型下载,然后运行完成之后,就可以发送请求了。

import requests
import jsontexts = [["今天是个好日子"], ["天气预报说今天要下雨"]]
data = {"data": texts}
# 发送post请求,content-type类型应指定json方式,url中的ip地址需改为对应机器的ip
url = "http://127.0.0.1:8866/predict/plato-mini"
# 指定post请求的headers为application/json方式
headers = {"Content-Type": "application/json"}r = requests.post(url=url, headers=headers, data=json.dumps(data))
print(r.json())

但是这个只是一个人家官方给出的,我想要的是再添加一些自己的功能,这时候我们可以用另一种方式,调用模型,进行一些处理

# 非交互模式
import paddlehub as hubmodel = hub.Module(name='plato-mini')
data = [["你是谁?"], ["你好啊。", "吃饭了吗?",]]
result = model.predict(data)

# 交互模式
import paddlehub as hubmodel = hub.Module(name='plato-mini')
with model.interactive_mode(max_turn=3):while True:human_utterance = input("[Human]: ").strip()robot_utterance = model.predict(human_utterance)[0]print("[Bot]: %s"%robot_utterance)

细心地可以发现在交互模式下有个max_turn,这个是代表是否与上面信息相关联,如果关联,关联多少条,这里写的3,代表3条。这个就搭建一个简单的了,但是又有问题了,比如,我如果发个它一个英语,但是它不会的,这就造成无法对话了,那怎么呢?学习一下机器学习,重新搞一下吗,不可能的。时间周期太长,还有就是时间不充裕,所以我选择翻译,这里我们用一下我们爬虫人的极速,逆向一下某度,某道的翻译,等于说发一段英语时,我们要先把它翻译成中文,然后预测,然后把预测的结果翻译成英文返回给用户,这样就ok了,这里就不细说它们的逆向了,反正不难。这样这个就ok了。我们看一下效果。

image

通过上图可以看到,我给它发的是Do you speak English?,它回答我的是Sure, would you?,还是非常不错的。但是接下来是我又想到一个问题,我想知道知道某个地方的天气,这个也想让机器人回答,这个怎么做,对于天气信息获取,我采用的高德的,但是怎么分析是否在获取天气呢,这里我才用的是paddlepaddle的语句分析,首先询问一个地方的天气肯定里面含有天气二字,然后里面肯定会有地方,对于时间这个不要求,如果有时间要求,就就返回对应时间的,如果没有就返回全部的。

这里我们看一段简单的代码,关于这个中文分析的。

import paddlehub as hublac = hub.Module(name="lac")
test_text = ["宁波明天天气怎么样"]results = lac.cut(text=test_text, use_gpu=False, batch_size=1, return_tag=True)
print(results)
#[{'word': ['宁波', '明天', '天气', '怎么样'], 'tag': ['LOC', 'TIME', 'n', 'r']}]

可以看到返回的信息,word是已经分好的词,而tag是其对应的词性。很明显,宁波对应地方,明天对应时间。我们完全可以通过这个实现。然后对接高德的查询天气接口就好了。

我们看一下效果。

效果图

因为我是把它应用于qq机器人的,所以这里返回的信息做了专门的处理,大致长下面这样。

image

好了,这样就做好了一个对话机器人,然后这仅仅是一部分,后面会加入很多,比如歌曲歌词的获取,点歌(已经实现网易云的了),还有玩游戏什么的,等等等。

END

其实这个过程还是有点小困难的,这里我仅仅说一个思路,有空我就代码上传github了,里面我加入,感兴趣的到时可以试试玩玩。好了,这一期就这样结束了,下期再见。

# paddlepaddle的github,也有gitee
https://github.com/PaddlePaddle
# paddlepaddle官网
https://www.paddlepaddle.org.cn/

感兴趣去试试,挺不错的。

欢迎关注俺的公众号

小版


推荐阅读
  • HTTP请求与响应机制:基础概览
    在Web浏览过程中,HTTP协议通过请求和响应报文实现客户端与服务器之间的通信。当用户访问一个网页时,浏览器会发送一个HTTP请求报文至服务器,服务器接收到请求后,会生成并返回一个HTTP响应报文。这两种报文均包含三个主要部分:起始行、头部字段和消息体,确保了数据的有效传输和解析。 ... [详细]
  • 在Linux环境下编译安装Heartbeat时,常遇到依赖库缺失的问题。为确保顺利安装,建议预先通过yum安装必要的开发库,如glib2-devel、libtool-ltdl-devel、net-snmp-devel、bzip2-devel和ncurses-devel等。这些库是编译过程中不可或缺的组件,能够有效避免编译错误,确保Heartbeat的稳定运行。 ... [详细]
  • 浅析PHP中$_SERVER[
    在PHP后端开发中,`$_SERVER["HTTP_REFERER"]` 是一个非常有用的超级全局变量,它可以获取用户访问当前页面之前的URL。本文将详细介绍该变量的使用方法及其在不同场景下的应用,如页面跳转跟踪、安全验证和用户行为分析等。通过实例解析,帮助开发者更好地理解和利用这一功能。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 在处理大规模并发请求时,传统的多线程或多进程模型往往无法有效解决性能瓶颈问题。尽管它们在处理小规模任务时能提升效率,但在高并发场景下,系统资源的过度消耗和上下文切换的开销会显著降低整体性能。相比之下,Python 的 `asyncio` 模块通过协程提供了一种轻量级且高效的并发解决方案。本文将深入解析 `asyncio` 模块的原理及其在实际应用中的优化技巧,帮助开发者更好地利用协程技术提升程序性能。 ... [详细]
  • HTTP协议作为互联网通信的基础,其重要性不言而喻。相比JDK自带的URLConnection,HttpClient不仅提升了易用性和灵活性,还在性能、稳定性和安全性方面进行了显著优化。本文将深入解析HttpClient的使用方法与技巧,帮助开发者更好地掌握这一强大的工具。 ... [详细]
  • 优化后的标题:PHP分布式高并发秒杀系统设计与实现
    PHPSeckill是一个基于PHP、Lua和Redis构建的高效分布式秒杀系统。该项目利用php_apcu扩展优化性能,实现了高并发环境下的秒杀功能。系统设计充分考虑了分布式架构的可扩展性和稳定性,适用于大规模用户同时访问的场景。项目代码已开源,可在Gitee平台上获取。 ... [详细]
  • 深入解析:RKHunter与AIDE在入侵检测中的应用与优势
    本文深入探讨了RKHunter与AIDE在入侵检测领域的应用及其独特优势。通过对比分析,详细阐述了这两种工具在系统完整性验证、恶意软件检测及日志文件监控等方面的技术特点和实际效果,为安全管理人员提供了有效的防护策略建议。 ... [详细]
  • 在Laravel中实现PHP对JSON数据的发布与处理 ... [详细]
  • 本章节深入探讨了 Webpack 命令的高级功能,涵盖了官方快速入门教程中未涉及的细节。通过实际操作和案例分析,对官方文档进行了详细解读与补充,帮助读者更好地理解和应用这些进阶技巧。 ... [详细]
  • 在本文中,我们将探讨如何使用 UniApp 封装小程序 API 请求接口的最佳实践。通过创建 `request.js` 文件,定义基础 URL 并传入后端提供的 URL 作为请求参数。同时,配置请求方法(如 GET、POST)和请求头(例如包含 token 的认证信息),以实现高效、安全的 API 调用。此外,我们还将介绍如何处理请求和响应的错误,以及如何优化请求性能,确保应用在不同平台上的兼容性和稳定性。 ... [详细]
  • Android 图像色彩处理技术详解
    本文详细探讨了 Android 平台上的图像色彩处理技术,重点介绍了如何通过模仿美图秀秀的交互方式,利用 SeekBar 实现对图片颜色的精细调整。文章展示了具体的布局设计和代码实现,帮助开发者更好地理解和应用图像处理技术。 ... [详细]
  • IIS配置大全:从基础到高级的全面指南
    IIS配置详解:从基础到高级的全面指南IIS前端配置与web.config文件紧密相关,相互影响。本文详细介绍了如何设置允许通过的HTTP请求方法,包括HEAD、POST、GET、TRACE和OPTIONS。提供了两种主要的配置方法,并探讨了它们在实际应用中的优缺点。此外,还深入讲解了其他高级配置选项,帮助读者全面提升IIS服务器的性能和安全性。 ... [详细]
  • Go语言中Goroutine与通道机制及其异常处理深入解析
    在Go语言中,Goroutine可视为一种轻量级的并发执行单元,其资源消耗远低于传统线程,初始栈大小仅为2KB,而普通线程则通常需要几MB。此外,Goroutine的调度由Go运行时自动管理,能够高效地支持成千上万个并发任务。本文深入探讨了Goroutine的工作原理及其与通道(channel)的配合使用,特别是在异常处理方面的最佳实践,为开发者提供了一套完整的解决方案,以确保程序的稳定性和可靠性。 ... [详细]
  • 表面缺陷检测数据集综述及GitHub开源项目推荐
    本文综述了表面缺陷检测领域的数据集,并推荐了多个GitHub上的开源项目。通过对现有文献和数据集的系统整理,为研究人员提供了全面的资源参考,有助于推动该领域的发展和技术进步。 ... [详细]
author-avatar
木桌上的年轮_1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有