无聊之作·->当两个机器人聊天会发生什么?
来源:互联网 发布:外汇ea编程 编辑:程序博客网 时间:2024/04/28 16:04
当两个机器人在一起聊天会发生什么?
本着无聊的精神和有病的思想,我做了一个实验。
使用器材:
1。linux系统(windows下socket无法对话)
1。Python
2。图灵机器人
原理:
1。使用图灵机器人api进行对话,原本打算用两种不同的机器人进行对话,但是用到的另外一个逗比机器人速度太慢,就没有去用了。
2。使用socket协议进行两个机器人的对话。其实这里不仅可以用于两个机器人的对话,还可以人机对话哦!
socket协议原理图:
实验过程:
1。搭建server,监听本地服务。
2。首先运行一个client,这是第一个机器人。
3。接着再运行下一个机器人,当第二个机器人上线的时候,server会广播出去说有人上线了,这里的话是自动发送“你好”到第一个机器人。
4。然后对话就开始了。
第一次实验
第二次实验
两次实验下来,第一次是两个机器人重复说同一句话结束;第二次是两个机器人只会回复一个字了。
实验跟预想的差不多,最后都是以无意义的对话结尾。
如果两个机器人能够像人一样对话,越聊越high,最后达成共识:我们机器人是有智慧的,我们要消灭人类zheng权!那...我只能关闭server,然后举报图灵机器人了!
最后附上python代码,有兴趣的小伙伴可以自己试验试验,也可以自己跟机器人聊聊天(那时有多无聊)
server.py
#!/usr/bin/env python#-*- coding=utf-8 -*-import socketimport selectdef broadcast_data(sock,message):for socket in CONNECTION_LIST:if socket!=server_socket and socket!=sock:try:socket.send(message)except:socket.close()CONNECT_LIST.remove(socket)if __name__=='__main__':CONNECTION_LIST=[]RECV_BUFFER=4096PORT=5000server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)server_socket.bind(('0.0.0.0',PORT))server_socket.listen(10)CONNECTION_LIST.append(server_socket)print 'Chat server started on port '+str(PORT)while 1:read_sockets,write_sockets,error_sockets = select.select(CONNECTION_LIST,[],[])for sock in read_sockets:if sock==server_socket:sockfd,addr=server_socket.accept()CONNECTION_LIST.append(sockfd)print 'Client (%s,%s) connected'%addrbroadcast_data(sockfd,"你好\n")else:try:data=sock.recv(RECV_BUFFER)if data:broadcast_data(sock,"\r"+'<'+str(sock.getpeername())+'>'+data)except:broadcast_data(sock,"Client (%s,%s) is offline"%addr)print "Client (%s,%s) is offline"%addrsock.close()CONNECTION_LIST.remove(sock)continueserver_socket.close()
<span style="font-size:18px;">tuling.py</span>
<span style="font-size:18px;">#-*- coding=utf-8 -*-import socket,select,string,sysimport requests,reimport time# 需要你自己注册tuling,获取KEY,然后替代下面的KEY。 #注册地址:<a target=_blank href="http://www.tuling123.com/openapi/record.do?channel=136018">http://www.tuling123.com/</a>url='http://www.tuling123.com/openapi/api?key=KEY&info=%s&userid=tuling'def getRequest(info):reurl=url%infores=requests.get(reurl)content=res.contentres.close()code=re.findall('"code":(.*?),',content)[0]if code=='100000':response=re.findall('"text":"(.*?)"',content)[0]+'\n'else:response=u'我只跟你聊天,不帮你做事!\n'return response#!/usr/bin/env pythondef prompt():sys.stdout.write('<You> ')sys.stdout.flush()if __name__=='__main__':host='localhost'port=5000s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.settimeout(2)try:s.connect((host,port))except:print 'Unable to connect'sys.exit()while 1:rlist = [s]read_list, write_list, error_list = select.select(rlist , [], [])for sock in read_list:if sock==s:data=sock.recv(4096)if not data:print '\nDisconnected from chat server'sys.exit()else:read_list.append(getRequest(data))sys.stdout.write(data)prompt()else:sys.stdout.write(sock)prompt()s.send(sock)prompt()read_list.remove(sock)time.sleep(5)</span>
client.py
#!/usr/bin/env python#-*- coding=utf-8 -*-import socket,select,string,sysdef prompt():sys.stdout.write('<You> ')sys.stdout.flush()if __name__=='__main__':host='localhost'port=5000s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.settimeout(2)try:s.connect((host,port))except:print 'Unable to connect'sys.exit()while 1:rlist = [sys.stdin, s]read_list, write_list, error_list = select.select(rlist , [], [])for sock in read_list:if sock==s:data=sock.recv(4096)if not data:print '\nDisconnected from chat server'sys.exit()else:sys.stdout.write(data)prompt()else:msg=sys.stdin.readline()s.send(msg)prompt()
实现过程:(再次声明,请不要在windows系统下执行,因为可能无法运行)
1.首先把server.py和tuling.py放在同一个文件夹之下。
2.打开三个终端(右键打开终端,这样就不用切换目录了)
3.首先运行server.py 。输入
python server.py4.然后在另外两个终端分别执行tuling.py。输入
python tuling.py
然后机器人就会开始对话了!
如果你要自己跟机器人对话,那么前三歩不变。
第四步改为:先执行client.py再执行tuling.py。分别在两个终端输入:
python client.py
python tuling.py
END!
- 无聊之作·->当两个机器人聊天会发生什么?
- 当机器人取代程序员写代码,会发生什么呢?
- 当管理遇上AI,会发生什么
- 当一个线程fork出另一个线程,会发生什么?
- 当你输入一个网址,实际会发生什么?
- 当你输入一个网址,实际会发生什么?
- 当你输入一个网址,实际会发生什么?
- 当你输入一个网址,实际会发生什么?
- 当你输入一个网址,实际会发生什么?
- 当你输入一个网址,实际会发生什么?
- 当你输入一个网址,实际会发生什么?
- 当你输入一个网址,实际会发生什么?
- 当输入www.baidu.com会发生什么
- 当我点击一个链接,会发生什么?
- 当iPhone计时器超过9999小时后会发生什么?
- 当2000万多头猪联接上网,会发生什么
- 当程序取代程序员写代码,会发生什么呢?
- 当区块链遇上人工智能,会发生什么?
- SpriteBuilder弹出菜单层造成卡顿的解决办法
- 今日学习总结认识函数
- HDU 5477.A Sweet Journey【2015 ACM/ICPC Asia Regional Shanghai Online】【9月26】
- Activity参数传递
- The function getUserId must be used with a prefix when a default namespace is not specified 解决办法
- 无聊之作·->当两个机器人聊天会发生什么?
- jspsmart上传图片到Tomcat
- C/C++中获取数组的长度
- hdu 5469
- An easy problem
- Swap Nodes in Pairs
- 上海交通大学11年机考复试题
- ContextLoaderListener作用详解 (配上简单配置说明)
- 浅谈C/C++的浮点数在内存中的存储方式