超赞!快来用Python的搭建你的AI老婆吧

夏天太热,又不想出门,就让我们用的Python来搭建属于自己的〜可以对话的AI老婆吧〜

本文拟使用Python的开发语言实现类似于的WIndows平台的“小娜”,或者是IOS下的“Siri的”。最终达到人机对话的效果。

超赞!快来用Python的搭建你的AI老婆吧

【实现功能】

柳猫将会从下面两个方面开始:

1.搭建人工智能 - 人机对话服务端平台

2.实现调用服务端平台进行人机对话交互

【实现思路】

AIML

AIML由Richard Wallace发明。他设计了一个名为ALICE(人工语言学互联网计算机实体人工语言网计算机实体)的机器人,并获得了多项人工智能大奖。有趣的是,图灵测试的其中一项就在寻找这样的人工智能:人与机器人通过文本界面展开数分钟的交流,以此查看机器人是否会被当作人类。

本文就使用了Python的语言调用AIML库进行智能机器人的开发。

本系统的运作方式是使用Python的搭建服务端后台接口,供各平台可以直接调用。然后客户端进行对智能对话API接口的调用,服务端分析参数数据,进行语句的分析,最终返回应答结果。

当前系统前端使用HTML进行简单地聊天室的设计与编写,使用异步请求的方式渲染数据。

【开发及部署环境】

开发环境:Windows 7×64英文版

JetBrains PyCharm 2017.1.3 x64

测试环境:Windows 7×64

【所需技术】

小伙伴们,如果要完全理解,请熟练以下技能(不会也​​没关系啦,一起学习就好了):

Python的语言的熟练掌握,Python的版本2.7及以上

Python的服务端开发框架龙卷风的使用

AIML库接口的简单使用

HTML + CSS +的JavaScript(jQuery的)的熟练使用

Ajax的技术的掌握

超赞!快来用Python的搭建你的AI老婆吧

【实现过程】

1.安装Python aiml库

pip install aiml

1

2

3

2.获取alice资源

Python aiml安装完成后在Python安装目录下的Lib / site-packages / aiml下会有alice子目录,将此目录复制到工作区。

或者在谷歌代码上下载

alice brain:aiml-en-us-foundation-alice.v1-9.zip

1

2

3

3. Python下加载alice

取得alice资源之后就可以直接利用Python aiml库加载alice brain了:

进口目的

os.chdir('./ src / alice')#将工作区目录切换到刚才复制的alice文件夹

alice = aiml.Kernel()

alice.learn( “startup.xml”)

alice.respond('LOAD ALICE')

1

2

3

4

5

6

7

注意加载时需要切换工作目录到爱丽丝(刚才复制的文件夹)下。

4.与alice聊天

加载之后就可以与爱丽丝聊天了,每次只需要调用响应接口:

alice.respond('hello')#这里的hello即为发给机器人的信息

1

2

柳猫紧接上篇,现在我们来实现AI老婆的对话(画脸):

5.用Tornado搭建聊天机器人网站

龙卷风可以很方便地搭建一个网络网站的服务端,并且接口风格是休闲风格,可以很方便搭建一个通用的服务端接口。

这里写两个方法:

得到:渲染界面

岗位:获取请求参数,并分析,返回聊天结果

1

2

3

4

类类的代码如下:

class ChatHandler(tornado.web.RequestHandler):

def get(self):

self.render( 'chat.html')

def post(self):

尝试:

message = self.get_argument('msg',None)

打印(STR(消息))

result = {

'is_success':是的,

'message':str(alice.respond(message))

}

打印(STR(结果))

respon_json = tornado.escape.json_encode(结果)

self.write(respon_json)

除了例外,例如:

再版(前)

打印(STR(前))

result = {

'is_success':错,

'信息': ''

}

self.write(STR(结果))

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

6.简单搭建一个聊天界面

超赞!快来用Python的搭建你的AI老婆吧

该界面是基于自举的,我们简单搭建这么一个聊天的界面用于展示我们的接口结果。同时进行简单的聊天。

7.接口调用

我们异步请求服务端接口,并将结果渲染到界面

$就({

类型:'post',

url:AppDomain +'chat',

async:true,//异步

dataType:'json',

数据:(

{

“味精”:request_txt

}),

成功:功能(数据)

{

的console.log(JSON.stringify(数据));

if(data.is_success == true){

的setView(resUser,data.message);

}

},

错误:功能(数据)

{

的console.log(JSON.stringify(数据));

}

}); //结束Ajax

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

这里我附上系统的完整目录结构以及完整代码 - >

8.目录结构

超赞!快来用Python的搭建你的AI老婆吧

** 9. Python服务端代码**

#!/ usr / bin / env python

# - * - 编码:utf-8 - * -

import os.path

导入tornado.auth

导入tornado.escape

import tornado.httpserver

import tornado.ioloop

导入tornado.options

import tornado.web

来自tornado.options导入定义,选项

进口口

进口目的

os.chdir( './ SRC /爱丽丝')

alice = aiml.Kernel()

alice.learn( “startup.xml”)

alice.respond('LOAD ALICE')

define('port',default = 3999,help ='在给定端口上运行',type = int)

class Application(tornado.web.Application):

def __init __(self):

处理程序= [

(r'/',MainHandler),

(r'/ chat',ChatHandler),

]

settings = dict(

template_path = os.path.join(os.path.dirname(__ file __),'templates'),

static_path = os.path.join(os.path.dirname(__ file __),'static'),

调试=真,

#conn = pymongo.Connection('localhost',12345)

#self.db = conn ['demo']

tornado.web.Application .__ init __(自我,处理程序,**设置)

class MainHandler(tornado.web.RequestHandler):

def get(self):

self.render( '的index.html')

def post(self):

result = {

'is_success':是的,

'message':'123'

}

respon_json = tornado.escape.json_encode(结果)

self.write(STR(respon_json))

def put(self):

respon_json = tornado.escape.json_encode(“{'name':'qixiao','age':123}”)

self.write(respon_json)

class ChatHandler(tornado.web.RequestHandler):

def get(self):

self.render( 'chat.html')

def post(self):

尝试:

message = self.get_argument('msg',None)

打印(STR(消息))

result = {

'is_success':是的,

'message':str(alice.respond(message))

}

打印(STR(结果))

respon_json = tornado.escape.json_encode(结果)

self.write(respon_json)

除了例外,例如:

再版(前)

打印(STR(前))

result = {

'is_success':错,

'信息': ''

}

self.write(STR(结果))

def main():

tornado.options.parse_command_line()

http_server = tornado.httpserver.HTTPServer(Application())

http_server.listen(options.port)

tornado.ioloop.IOLoop.instance()。开始()

如果__name__ =='__ main__':

print('HTTP服务器启动...')

主要()

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

66

67

68

69

70

71

72

73

74

75

76

** 10. Html前端代码**

<link>

<title> qixiao tools title>

<link>

/<title>


分享到:


相關文章: