引入Redis

项目github链接

在集成Netty之后,为了提高效率,我打算将消息存储在Redis缓存系统中,本节将介绍Redis在项目中的引入,以及前端界面的开发。

引入Redis后,完整代码链接。

想要直接得到训练了13000步的聊天机器人可以直接下载链接中

这三个文件,以及词汇表文件

然后直接运行连接中的py脚本进行测试即可。

最终实现效果如下:

在Netty中引入Redis

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDateTime;import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.channel.group.ChannelGroup;
import io.netty.channel.group.DefaultChannelGroup;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
import io.netty.util.concurrent.GlobalEventExecutor;
import redis.clients.jedis.Jedis;public class ChatHandler extends SimpleChannelInboundHandler<TextWebSocketFrame>{private static ChannelGroup clients=new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);@Overrideprotected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) throws Exception {System.out.println("channelRead0...");//连接redisJedis jedis=new Jedis("localhost");System.out.println("连接成功...");System.out.println("服务正在运行:"+jedis.ping());//得到用户输入的消息,需要写入文件/缓存中,让AI进行读取String content=msg.text();if(content==null||content=="") {System.out.println("content 为null");return ;}System.out.println("接收到的消息:"+content);//写入缓存中jedis.set("user_say", content+":user");Thread.sleep(1000);//读取AI返回的内容String AIsay=null;while(AIsay=="no"||AIsay==null) {//从缓存中读取AI回复的内容AIsay=jedis.get("ai_say");String [] arr=AIsay.split(":");AIsay=arr[0];}//读取后马上向缓存中写入jedis.set("ai_say", "no");//没有说,或者还没说if(AIsay==null||AIsay=="") {System.out.println("AIsay==null||AIsay==\"\"");return;}System.out.println("AI说:"+AIsay);clients.writeAndFlush(new TextWebSocketFrame("AI_PigPig在"+LocalDateTime.now()+"说:"+AIsay));}@Overridepublic void handlerAdded(ChannelHandlerContext ctx) throws Exception {System.out.println("add...");clients.add(ctx.channel());}@Overridepublic void handlerRemoved(ChannelHandlerContext ctx) throws Exception {System.out.println("客户端断开,channel对应的长id为:"+ctx.channel().id().asLongText());System.out.println("客户端断开,channel对应的短id为:"+ctx.channel().id().asShortText());}}

在Python中引入Redis

with tf.Session() as sess:#打开作为一次会话# 恢复前一次训练ckpt = tf.train.get_checkpoint_state('.')#从检查点文件中返回一个状态(ckpt)#如果ckpt存在,输出模型路径if ckpt != None:print(ckpt.model_checkpoint_path)model.saver.restore(sess, ckpt.model_checkpoint_path)#储存模型参数else:print("没找到模型")r.set('user_say','no')#测试该模型的能力while True:line='no'#从缓存中进行读取while line=='no':line=r.get('user_say').decode()#print(line)list1=line.split(':')if len(list1)==1:input_string='no'else:input_string=list1[0]r.set('user_say','no')# 退出if input_string == 'quit':exit()if input_string != 'no':input_string_vec = []#输入字符串向量化for words in input_string.strip():input_string_vec.append(vocab_en.get(words, UNK_ID))#get()函数:如果words在词表中,返回索引号;否则,返回UNK_IDbucket_id = min([b for b in range(len(buckets)) if buckets[b][0] > len(input_string_vec)])#保留最小的大于输入的bucket的idencoder_inputs, decoder_inputs, target_weights = model.get_batch({bucket_id: [(input_string_vec, [])]}, bucket_id)#get_batch(A,B):两个参数,A为大小为len(buckets)的元组,返回了指定bucket_id的encoder_inputs,decoder_inputs,target_weights_, _, output_logits = model.step(sess, encoder_inputs, decoder_inputs, target_weights, bucket_id, True)#得到其输出outputs = [int(np.argmax(logit, axis=1)) for logit in output_logits]#求得最大的预测范围列表if EOS_ID in outputs:#如果EOS_ID在输出内部,则输出列表为[,,,,:End]outputs = outputs[:outputs.index(EOS_ID)]response = "".join([tf.compat.as_str(vocab_de[output]) for output in outputs])#转为解码词汇分别添加到回复中print('AI-PigPig > ' + response)#输出回复#向缓存中进行写入r.set('ai_say',response+':AI')

下一节将讲述通信规则的制定,以规范应用程序。

引入Redis|tensorflow实现 聊天AI--PigPig养成记(3)相关推荐

  1. 使用TensorFlow.js的AI聊天机器人三:改进了文本中的情感检测

    目录 使用通用语句编码器设置TensorFlow.js代码 GoEmotion数据集 通用句子编码器 训练AI模型 让我们发现情绪 终点线 下一步是什么? 下载项目代码-9.9 MB TensorFl ...

  2. 使用TensorFlow.js的AI聊天机器人一:检测文本中的情绪

    目录 设置TensorFlow.js代码 GoEmotion数据集 言语包 训练AI模型 检测文本中的情绪 终点线 下一步是什么? 下载项目代码-9.9 MB TensorFlow + JavaScr ...

  3. 聊天 AI 软件的简单实现

    对于写一个聊天 AI 软件的 demo,我们可以采用 Python 编程语言和 Tensorflow 框架来实现,以下是一个示例代码: import tensorflow as tf import n ...

  4. Apache Kafka流+机器学习(Spark,TensorFlow,H2O.ai)

    我于2017年5月开始在Confluent工作,担任技术传播者,专注于围绕开源框架Apache Kafka的主题. 我认为机器学习是当今最热门的流行语之一,因为它可以在任何行业中增加巨大的商业价值. ...

  5. 抓住人工智能红利,百度AI达人养成营带你速成深度学习

    未来几年,什么行业是最值得期待的"风口"?又是学什么专业才可以薪资爆表? 国际权威调研机构IDC发布的一份报告显示,2024年中国人工智能市场规模将达到127.5亿美金.随之而来的 ...

  6. 使用TensorFlow.js进行AI在网络摄像头中翻译手势和手语

    目录 起点 检测手势 其他手势和手语 技术脚注 终点线 下一步是什么? TensorFlow + JavaScript.现在,最流行,最先进的AI框架支持地球上使用最广泛的编程语言,因此,让我们在我们 ...

  7. 史诗级聊天AI ChatGPT来啦!

    羿阁 发自 凹非寺 量子位 | 公众号 QbitAI 一款新的聊天AI被网友们玩疯了. 能直接生成代码.会自动修复bug.在线问诊.模仿莎士比亚风格写作--各种话题都能hold住,它就是OpenAI刚 ...

  8. 基于tensorflow的聊天机器人

    ** 基于tensorflow的聊天机器人 ** 基于Tensorflow的聊天机器人,主要基于机器深度学习,采用seq2seq+Attention模型,先由jieba中文分词框架对汉字文本语句分词再 ...

  9. 人工智能在线AI智能模型聊天AI网站系统源码

    demo软件园每日更新资源,请看到最后就能获取你想要的: ​ 1.人工智能在线AI智能模型聊天AI网站系统源码 PHP网站系统源码 API接口源码 AI网站系统源码仅23kb,实现用户管理,一键添加接 ...

最新文章

  1. sql语句相似度统计的说明
  2. 2020版北大中文核心期刊目录_收藏备用最新版:《中文核心期刊要目总览》北大中文核心期刊目录...
  3. beam search算法
  4. [Python]Pydev中使用中文
  5. 上周热点回顾(6.5-6.11)
  6. Tomcat就是这么简单
  7. 马尔可夫------马尔可夫不等式
  8. 北京航空航天大学公开课:拓扑学
  9. 95-后程序员一出校门就拿年薪-30多万?,2021Android面试笔试总结
  10. 传智播客C++学院教学总监朱景尧老师
  11. GT传奇3服务器架设全攻略~!(新手篇)(转)
  12. NVMe Driver 需要装吗_厨房里的油烟很少,需要装油烟净化器吗?装哪种的比较好?...
  13. JetBrain Toolbox 更改安装目录
  14. 只要60页!金融量化博士总结的Python数据分析入门知识手册
  15. “三年拿下全球第一!”7年小米销量冲到全球第二,雷军做对了什么?
  16. 入门人工智能该读哪些书?五份AI经典书单
  17. Paypal学习 2 -- IPN (Instant Payment Notification)
  18. (3)JavaScript基本概念
  19. python安装第三方库方法_Python安装第三方库的4种方法
  20. matlab画出给定点,已知各点之间的距离,怎么用MATLAB画出点

热门文章

  1. 【粉丝福利放送】Python最新书籍免费领取!
  2. 近期必读的5篇AI顶会CVPR 2020 GNN (图神经网络) 相关论文
  3. SAP WM中阶之存储类型设置界面里的’Return Stock To Same Storage Bin’
  4. CSV合规的矫枉过正
  5. 隆重介绍!一款新型基于姿势的人像实例分割框架
  6. 机器学习:使用分形维数快速选择特征
  7. 强化学习应用于组合优化问题
  8. 掌握图神经网络GNN基本,看这篇文章就够了
  9. 热力学第二定律中的悖论 | 集智百科
  10. 量化因果涌现表明:宏观可以战胜微观