基于Python+AIML+Tornado的智能聊天机器人(NLP+深度学习)含全部工程源码+语料库 适合个人二次开发

目录

  • 前言
  • 总体设计
    • 系统整体结构图
    • 系统流程图
  • 运行环境
    • Python 环境
    • Tornado 环境
  • 模块实现
    • 1. 前端
    • 2. 后端
    • 3. 语料库
    • 4. 系统测试
  • 其它资料下载

在这里插入图片描述

前言

本项目旨在利用AIML技术构建一个聊天机器人,实现用户通过聊天界面与机器人交互的功能。通过提供的工程源代码,用户可以轻松地进行二次开发,例如使用网页与机器人进行交互,实现智能问答等。通过网页与机器人的交互,您可以实现智能问答、情感分析等多种功能,为您的应用场景带来更多可能性。快来一起探索AI技术的无限魅力吧!

当然针对现在最火爆的ChatGPT等通用大语言模型,伙伴们可以直接将其应用在模块实现第2部分,其它详细的接口使用操作,大家可以关注我博客的其它关于ChatGPT接口使用的说明。

总体设计

本部分主要包括系统整体结构图和系统流程图。

系统整体结构图

系统整体结构如图所示。

在这里插入图片描述

系统流程图

AIML系统流程如下:

第一步:系统初始化
AIML系统在启动时,首先根据配置文件进行系统的初始化操作,把需要替换的词串(如把it’s替换为itis)、自身的相关信息(如名字、性别等)、人称转换信息以及此前的对话情景变量读入系统,并把AIML文件内容(即知识库)以树的结构形式加载到内存当中,形成内存知识树,这样当系统在响应用户输入的问句时,可直接在内存树中进行推理,提高了响应速度。加载完毕之后,等待用户输入问句。

第二步:接收用户输入,进行问句规范化处理
当AIML解析器接收到一行用户的输入后,首先把输入的文字分成单独的句子,进行问句规范化处理,分析当前句子中是否包含需要替换的字符串,如果有,则替换之。例如把问句中出现的“you’ve”替换为“youhave”,“I’m”替换为“Iam”等等。问句规范化处理完以后,以规范问句到内存知识树中查询推理答案。

第三步:问句查询推理
这一过程是AIML的核心部分,将规范化处理后的问句与内存知识树中的模式进行匹配,寻找最佳匹配结果,找到之后,读出该匹配模式对应的模板信息,进行下一步处理。

第四步:模板处理
也就是答案的后处理,模板中可能包含一些特殊标记需要处理,如读出机器人名字标记所代表的实际名称,还原星号部分所代表的内容,如果包含跳转标记,还需要在内存知识树中以跳转部分的内容做进一步的推理。模板处理完后返回用户结果,等待用户输入新问句。

系统流程如图所示:

在这里插入图片描述

运行环境

本部分包括 Python 环境、Tornado 环境。

Python 环境

需要 Python 2.7,下载地址:https://www.python.org/downloads/windows/。

Tornado 环境

Tornado 是使用 Python 编写的一个强大的、可扩展的 Web 服务器。

模块实现

本项目主要包括 3 个模块,前端、后端、语料库,下面分别给出各模块的功能介绍及相关代码。

1. 前端

前端框架地是采用 Bootstrap 框架。Bootstrap,来自 Twitter,是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JavaScript 的,它在 jQuery 的基础上进行了更为个性化和人性化的完善,形成一套自己独有的网站风格,并兼容大部分 jQuery 插件。Bootstrap 简洁灵活,使得 Web 开发更加快捷。其最大的优势是响应式布局,使得开发者
可以方便的让网页无论在台式机、平板设备、手机上都获得最佳的体验。

<!DOCTYPE html>
<html>
<head><!-- <meta charset="utf-8"> --><title>ChatBotx</title><!-- 新 Bootstrap 核心 CSS 文件 --><link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"><!-- jQuery文件。务必在bootstrap.min.js 之前引入 --><script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script><!-- 最新的 Bootstrap 核心 JavaScript 文件 --><script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script><style type="text/css">.top-margin-20{margin-top: 20px;  //设置上边距}#result_table,#result_table thead th{text-align: center;}#result_table .td-width-40{width: 40%;}</style><script type="text/javascript">var AppDomain = 'http://localhost:8000/'$(document).ready(function(){$("#btn_sub").click(function(){var user = 'XXX';var resUser = 'Bot';var request_txt = $("#txt_sub").val();setView(user,request_txt);$.ajax({type: 'post',url: AppDomain+'chat',async: true,//异步dataType: 'json',// contentType: "application/x-www-form-urlencoded; charset=utf-8", data: ({"msg":encodeURI(request_txt)}),success: function (data){console.log(JSON.stringify(data));if (data.is_success == true) {setView(resUser,data.message);}},error: function (data){console.log(JSON.stringify(data));}});});});function setView(user,text){var subTxt = user + "   "+new Date().toLocaleTimeString() +'\n·'+ decodeURI(text);$("#txt_view").val($("#txt_view").val()+'\n\n'+subTxt);var scrollTop = $("#txt_view")[0].scrollHeight;  $("#txt_view").scrollTop(scrollTop);  }</script>
</head>
<body class="container"><header class="row"><header class="row"><a href="/" class="col-md-2" style="font-family: SimHei;font-size: 20px;text-align:center;margin-top: 30px;"><span class="glyphicon glyphicon-home"></span>Home</a><font class="col-md-4 col-md-offset-2" style="font-family: SimHei;font-size: 30px;text-align:center;margin-top: 30px;">ChatBot</font></header></header><hr><article class="row"><section class="col-md-10 col-md-offset-1" style="border:border:solid #7FFFD4 1px;padding: 0; background-color: #FFDEAD;"><span class="glyphicon glyphicon-user"></span> User: XXX </section><section class="col-md-10 col-md-offset-1 row" style="border:solid #7FFFD4 1px;padding:0"><section class="col-md-9" style="height: 400px;"><section class="row" style="height: 270px;"><textarea class="form-control" style="width:100%;height: 100%;resize: none;overflow-x: none;overflow-y: scroll;background-color:antiquewhite" readonly="true" id="txt_view"></textarea></section><section class="row" style="height: 130px;border-top:solid #7FFFD4 1px; "><textarea class="form-control" style="overflow-y: scroll;overflow-x: none;resize: none;width: 100%;height:70%;border: #fff;background-color:rgb(107, 170, 189)" id="txt_sub"></textarea><button class="btn btn-primary" style="float: right;margin: 0 5px 0 0;background-color:gray" id="btn_sub">Submit</button></section></section><section class="col-md-3" style="height: 400px;border-left: solid #7FFFD4 1px;"></section></section></article>
</body>
</html>

2. 后端

后端我们采用的是 tornado 架构,之所以使用 tornado 是因为 Tornado 是使用 Python编写的一个强大的、可扩展的 Web 服务器。它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中。Tornado 和主流 Web服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。

#!/usr/bin/env python# -*- coding: utf-8 -*-import os.path
import tornado.auth
import tornado.escape
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, optionsimport os
import aimlos.chdir(r'C:\Users\clys\Desktop\AIML\example1')
k = aiml.Kernel()
k.learn("cn-startup.xml")
k.respond("load aiml cn")define('port', default=8000, help='run on the given port', type=int)class Application(tornado.web.Application):def __init__(self):handlers = [    #handlers,它告诉 Tornado 应该用哪个类来响应请求。(r'/', MainHandler),(r'/chat', ChatHandler),]settings = dict(template_path=os.path.join(os.path.dirname(__file__), 'templates'), #该句作是告诉 tornado 在哪里找模板文件static_path=os.path.join(os.path.dirname(__file__), 'static'),debug=True,   #设置调制模式,默认为 false)tornado.web.Application.__init__(self, handlers, **settings)class MainHandler(tornado.web.RequestHandler):def get(self):   #get 的作用是渲染界面self.render('index.html')   #发送 index.HTML 文件给浏览器def post(self):  #post 的作用是获取参数,并分析,返回结果result = {'is_success': True,'message': '123'}respon_json = tornado.escape.json_encode(result)self.write(str(respon_json))def put(self):respon_json = tornado.escape.json_encode("{'name':'XXX','age':123}")#tornado.escape.json_encode(result)的作用是:json 对指定的 python 对象进行编码self.write(respon_json)class ChatHandler(tornado.web.RequestHandler):  # 定 义 一 个tornado.web.RequestHandler 的子类为 ChatHandlerdef get(self):self.render('chat.html')def post(self):try:message = self.get_argument('msg', None)print(str(message))result = {'is_success': True,'message': str(k.respond(message))}print(str(result))respon_json = tornado.escape.json_encode(result)self.write(respon_json)except Exception as ex:repr(ex)print(str(ex))result = {'is_success': False,'message': ''}self.write(str(result))def main():tornado.options.parse_command_line()http_server = tornado.httpserver.HTTPServer(Application())http_server.listen(options.port)tornado.ioloop.IOLoop.instance().start()if __name__ == '__main__':print('HTTP server starting ...')main()

3. 语料库

1)标签解释:

<aiml>:定义一个 aiml 文件的开始与结束
<category>:定义一个知识的单元
<pattern>:定义一个模板,来匹配用户可能的输入
<template>:定义根据用户的输入需要返回的回答

因此表现在聊天界面的效果就是:

user:你好
bot:嗨,好久不见
user:你是谁
bot:我是灰太狼 1234

但是光是以上如此简单的模式,要适应大量的人类语言与句式,显得异常笨重,aiml 提供了许多其他 tag 来帮助人们构建更有效更灵活的问答模式。

代码示例:

<?xml version="1.0" encoding="UTF-8"?><aiml version="1.0"><meta name="author" content="Andelf"/>
<meta name="language" content="zh"/><category>
<pattern>登录</pattern>
<template>
你的用户名是?
</template>
</category><category>
<pattern>*</pattern>
<template><condition><li name="password" value="123456">密码正确, <get name="username" />已通过验证.</li><li name="password" value="">请登陆.</li></condition>
</template>
</category><category>
<pattern>*</pattern>
<that>你的用户名是</that>
<template>
<think><set name="username"><star/></set></think>
你的密码是?
</template>
</category><category>
<pattern>*</pattern>
<that>你的密码是</that>
<template>
<think><set name="password"><formal><star/></formal></set></think>
谢谢.
</template>
</category></aiml>

2)在正式构建聊天机器人之前,需要创建一个名为后缀为.xml 的启动文件,用于作为加载AIML 文件的主入口点。

代码示例:

<aiml version="1.0"><category>
<pattern>LOAD AIML CN</pattern>
<template><!-- Template是模式的响应 --><!-- 这里学习一个aiml文件 -->n<learn>zhoudk.aiml</learn><learn>corpus1000.aiml</learn><learn>maimeng.aiml</learn><learn>rude.aiml</learn><learn>sex.aiml</learn><learn>shengji.aiml</learn><!-- 你可以在这里添加更多的aiml文件 --><!--<learn>chat.aiml</learn>-->
</template>
</category></aiml>

4. 系统测试

1) 运行后端服务器

运行后端服务器界面如图所示:

在这里插入图片描述

2) 后台运行结果

在浏览器中输入以下地址

http://localhost:8000/

聊天界面如图所示:

在这里插入图片描述

后台运行结果如图所示:

在这里插入图片描述

其它资料下载

如果大家想继续了解人工智能相关学习路线和知识体系,欢迎大家翻阅我的另外一篇博客《重磅 | 完备的人工智能AI 学习——基础知识学习路线,所有资料免关注免套路直接网盘下载》
这篇博客参考了Github知名开源平台,AI技术平台以及相关领域专家:Datawhale,ApacheCN,AI有道和黄海广博士等约有近100G相关资料,希望能帮助到所有小伙伴们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/58052.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Midjourney官方中文版登陆QQ!25张免费额度,聊天框召唤机器人即可作画

丰色 发自 凹非寺量子位 | 公众号 QbitAI Breaking News&#xff01;现在上QQ就能玩Midjourney了。 Midjourney AI微信号发布最新公告称&#xff1a; Midjourney官方中文版已开启内测。 在哪里测&#xff1f;QQ频道。每周一和周五晚6点&#xff0c;大家准时扫码进入&#xff0c…

js调用gpt3.5(支持流回显、高频功能)

参考链接&#xff1a;直接在前端调用 GPT-3 API 效果图&#xff1a; 查看在线demo(要梯子) 注意&#xff1a; 1. 需要apiKey&#xff0c;自用安全&#xff0c;不要给别人 2. 需要梯子 3. 选择稳定、人少的代理ip 4. 不要频繁切换ip&#xff0c;防止封号 5. api调用上限高&…

自媒体多平台助手——融媒宝

近些年来随着自媒体风越吹越大&#xff0c;更多的博主或者自媒体发布平台&#xff0c;都在建议自由职业者去做自媒体工作&#xff0c;性价比高时间自由&#xff0c;也越来越多向往自由的年轻人去选择自媒体工作&#xff0c;在家就可以根据自己的兴趣把自己的思想转化为自己的收…

自媒体多平台分发教程

自媒体平台现在风很大&#xff0c;已经是处在风口浪尖了&#xff0c;所以想要赚钱或者是想要实现自己个人价值的朋友们都不要放过这个难得的好机会。但是现在自媒体平台多种多样&#xff0c;如果只选择一个多自媒体平台去进行发布的话无疑是浪费的。创造出一篇属于自己的原创文…

自媒体平台操作手册,自媒体平台算法操作技巧详解

自媒体平台算法&#xff1a; 定位领域&#xff1a;历史、军事&#xff08;最赚钱&#xff09;发布时间&#xff1a; 00&#xff1a;00 2日推荐昵称&#xff1a;关键词寓意简介&#xff1a;直截了当、开门见山回头率&#xff1a;多次阅读流量&#xff1a;外部流量&#xff08…

ChatGPT还是挺强大的,今天测试了一个冒泡排序 代码写的还是很规范,未来低级程序员是不是要失业了 有点焦虑了

感兴趣的小伙伴可以自己注册体验&#xff08;免费注册&#xff09;。 注册连接&#xff1a;https://chatgptmirror.com?shareK36L42

大模型入坑指南 大厂vs初创公司

大模型竞争激烈&#xff0c;创业公司随时可能倒掉&#xff0c;造成项目烂尾&#xff0c;EB3.5已经跟国内其他模型拉开了差距… 人工智能是当前时代的重要热点之一&#xff0c;它正在改变着我们的生活和工作。在人工智能领域&#xff0c;有一种技术尤其引人注目&#xff0c;那就…

UE4中背景音乐的制作

首先将音乐的MP3格式转换为WAV格式&#xff0c;在格式工厂里实现。 然后就可以了。将做好的音频导入内容浏览器中&#xff0c; 在内容浏览器里面新建Sound Cue 再在场景当中右键place actor选中我们创建的Sound Cue即可 点击音频下的文字&#xff0c;进入属性面板&…

给音频添加背景音乐 GoldWave软件运用教程分享

简略录制了一段音频&#xff0c;试听成效之后觉得有些枯燥&#xff0c;我们可以给其添加一段背景音乐&#xff0c;从而烘托氛围。今天小编就来教大家运用GoldWave来为音频添加背景音乐&#xff0c;细致方法如下&#xff0c;请参考。 如何应用goldwave添加音频背景音乐? 翻开Go…

小程序背景音乐实现

好久没有做小程序&#xff0c;今天看到一个需求&#xff0c;要做一个页面&#xff0c;需要带背景音乐。我看了官方文档&#xff0c;觉得这方面写的很好&#xff0c;但是没有示例&#xff0c;所以就想写一篇相关文章记录一下&#xff0c;也可以帮到其他人。 需求分析 实现一个…

微信小程序背景音乐开发

wx.getBackgroundAudioManager() 背景音乐 wx.getBackgroundAudioManager() 推荐大家使用背景音乐不在使用audio audio播放音频加载时间长 体验需求达不到 相关文档 https://developers.weixin.qq.com/miniprogram/dev/api/media/background-audio/BackgroundAudioManage…

计算机ppt音乐,PPT制作-背景音乐最全面设置教程

有了好音乐&#xff0c;许多朋友们都不知道PPT背景音乐设置的方法&#xff0c;面对越来越多的朋友对PPT背景音乐设置的无从下手&#xff0c;我们下载吧就做了这期的专题&#xff0c;PPT背景音乐设置里&#xff0c;这应该是算目前最详细的设置教程了。 PPT背景音乐设置—如何在P…

html页面中如何添加背景音乐

如果我们要在html页面中添加背景音乐效果&#xff0c;可以使用如下几种方式。 方法一&#xff1a; 在html文件中添加如下代码即可&#xff08;音频文件根据需要进行更改&#xff09; 1234<audio autoplay"autoplay" controls"controls"loop"loop&q…

PyGame|给程序插入背景音乐

前言 上次圣诞节的时候尝试了用python画圣诞树&#xff0c;用pyqt6制作了gui窗口&#xff0c;把画圣诞树的代码打包成了一个小程序&#xff0c;觉得只有圣诞树过于单调&#xff0c;于是想着给程序加入一点背景音乐&#xff0c;更有节日氛围。看了大佬们的教程&#xff0c;最后…

VB开发中背景音乐的制作

VB开发中背景音乐的制作 http://www.sina.com.cn 2001/04/23 17:09 中国电脑教育报 武正伦   背景音乐不仅在软件中起到“声”、“文”并茂的效果&#xff0c;而且能使用户减少在漫长的计算、等待过程中所带来的困倦和烦躁情绪&#xff0c;我们将通过用Microsoft Visual Basi…

Android微信登录在华为手机上无法调起授权界面的问题

Android微信登录在华为手机上无法调起授权界面的问题 App集成了微信登录&#xff0c;在其他手机上微信登录都可以正常调起微信授权页面&#xff0c;并且登录成功&#xff0c;但是 在华为手机上调用微信登录&#xff0c;没报异常&#xff0c;也无法调起微信授权页面&#xff0c;…

AI 绘图:MidJourney 的提示语句(Prompt)怎么写?

这篇文章主要总结了在 AI 绘画中&#xff0c;使用 MidJourney 时提示语句 Prompt 的写法。 1、基本 Prompt 写法 完整的 Prompt 可以分为三个部分&#xff1a;[Image Prompts][Text Prompt][Parameters]&#xff0c;其中&#xff1a; 图片提示&#xff08;Image Prompts&…

【EasyPoi实战系列】Spring Boot使用EasyPoi的注解让表格更漂亮以及图片的导出 - 第468篇

历史文章&#xff08;文章累计460&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 【…

拉伯证券|大股东或易主,阿里巴巴换股入局

三大股指齐上扬&#xff0c;早盘主力埋伏这些股。 到午间收盘&#xff0c;“家居零售榜首股”之称的美凯龙一字涨停&#xff0c;港股红星美凯龙涨24%&#xff0c;此前一度涨超30%。 消息面上&#xff0c;1月13日晚间&#xff0c;美凯龙发布公告称&#xff0c;公司控股股东红星…

Day02| 第四期-阿里巴巴股票行情分析(一)

01 前言 2020年高考的第一天到来了&#xff0c;不晓得你的心情如何&#xff0c;我想我们始终忘不了的是对追梦过程中的努力&#xff0c;希望长大以后的我们也不要忘记那种拼搏的精神&#xff0c;今天也会是元气满满的一天&#xff0c;接下来&#xff0c…