博舍

Nonebot QQ机器人插件七:智能聊天机器人 qq上人工智能聊天怎么设置不了

Nonebot QQ机器人插件七:智能聊天机器人

OpenCV数字图像处理基于C++:图像分割

梦幻棉花糖:分水岭算法的比喻相当精彩啊,一下就领悟了

OpenCV数字图像处理实战二:模板匹配(C++)

guofei9987:缩放的模版可以匹配到吗

NonebotQQ机器人插件一:实时天气获取

夏洛特:这咋用阿

NonebotQQ机器人插件五:随机网易云音乐

qq_24896281:ffmpeg已安装,环境路径也设置了,但是用record()发送MP3格式的文件就会报错

NonebotQQ机器人插件九:qq群聊天记录词云图

聪明的西瓜:按步骤操作完showdatabse为什么没有聊天记录啊

智能聊天机器人实现 源码+解析

                                                前言:

今天带来的是智能聊天机器人实现(源码+解析),和上一篇教程一样,当你没有女朋友的时候,可以用它来打发时间。这里的API是图灵机器人提供的,实现一个十分强大的机器人。

具体功能包括:

• 支持聊天对话、智能问答• 拥有笑话、天气、公交等丰富功能• 支持自然语言处理及语义理解• 数十亿知识库数据,应有尽有

运行效果:

                  

源码下载:

源码已经传到git上了,欢迎下载学习。 

下载链接: https://github.com/colin1994/tulingIOS

源码解析:一。仿微信界面

如果你觉得这篇文章看起来稍微还有些吃力,或者想要系统地学习人工智能,那么推荐你去看床长人工智能教程。非常棒的大神之作,教程不仅通俗易懂,而且很风趣幽默。点击这里可以查看教程。

这个小demo的界面是仿微信的。只不过是简化版的,包括表情,语音什么的,都省略了。

对于界面这一块,我这里不多做介绍,因为这并不是本教程主要内容。毕竟,这个界面到自己实际项目中的时候,肯定是需要自定义的。

这里简要介绍一下。

该界面分成两部分: 

1.UITableView:显示聊天列表,其中,左边的是机器人回答,右边是自己的提问。

另外,列表的每个cell,由头像和文字组成。这个cell是自定义的,详细可以自己查看源码。

列表添加:

//addUItableView   self.tableView=[[UITableViewalloc]initWithFrame:CGRectMake(0,44,self.view.frame.size.width,self.view.frame.size.height-88)style:UITableViewStylePlain];   [self.tableViewregisterClass:[ChartCellclass]forCellReuseIdentifier:cellIdentifier];   self.tableView.separatorStyle=UITableViewCellSeparatorStyleNone;   self.tableView.allowsSelection=NO;   self.tableView.backgroundView=[[UIImageViewalloc]initWithImage:[UIImageimageNamed:@"chat_bg_default.jpg"]];   self.tableView.dataSource=self;   self.tableView.delegate=self;   [self.viewaddSubview:self.tableView];12. KeyBordVIew:自定义的UIView,用来显示自定义的键盘视图。

键盘添加:

   //addkeyBorad   self.keyBordView=[[KeyBordVIewalloc]initWithFrame:CGRectMake(0,self.view.frame.size.height-44,self.view.frame.size.width,44)];   self.keyBordView.delegate=self;   [self.viewaddSubview:self.keyBordView];1

另外,键盘涉及弹出和收起操作操作,这个需要在视图载入之前,注册通知,响应相关操作。

1.注册通知

   //注册通知,键盘收起,弹出   [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(keyboardShow:)name:UIKeyboardWillShowNotificationobject:nil];   [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(keyboardHide:)name:UIKeyboardWillHideNotificationobject:nil];12.响应操作//键盘弹出响应-(void)keyboardShow:(NSNotification*)note{   CGRectkeyBoardRect=[note.userInfo[UIKeyboardFrameEndUserInfoKey]CGRectValue];   CGFloatdeltaY=keyBoardRect.size.height;      [UIViewanimateWithDuration:[note.userInfo[UIKeyboardAnimationDurationUserInfoKey]floatValue]animations:^{              self.view.transform=CGAffineTransformMakeTranslation(0,-deltaY);   }];}//键盘收起响应-(void)keyboardHide:(NSNotification*)note{   [UIViewanimateWithDuration:[note.userInfo[UIKeyboardAnimationDurationUserInfoKey]floatValue]animations:^{       self.view.transform=CGAffineTransformIdentity;   }];}1二。图灵key获取

用过一些第三方API的都知道,通常我需要先注册成为它的用户,才能获取对应的key,以便调用API。

图灵也不例外,你需要先注册成为图灵用户,然后有相关教程,教你如何获取自己的key,以及正确的URL。这里就不重复了。图灵机器人官网链接

例如,我这个demo里面的key是:6c2cfaf7a7f088e843b550b0c5b89c26

对应的API是:http://www.tuling123.com/openapi/api?key=6c2cfaf7a7f088e843b550b0c5b89c26&&info=%@

所以,你只要把这里的key替换成你自己的就可以了。

三。图灵API的使用

这里使用了第三方网络请求库ASI和json格式数据解析库JsonKit。

在导入ASI的时候,如果你的项目是ARC,那么,请将对应的文件设置成支持ARC即可。(-fno-objc-arc)

另外,要导入一些框架

SystemConfiguration.frameworkMobileCoreServices.frameworkCFNetwork.frameworklibz.dylib

接着就能利用ASI调用图灵API,再利用jsonkit解析返回的数据了。

具体实现如下:

//每当编辑完问题后//1.显示自己的问题messageType=1//2.调用API,返回结果-(void)KeyBordView:(KeyBordVIew*)keyBoardViewtextFiledReturn:(UITextField*)textFiled{      //显示自己的问题   ChartCellFrame*cellFrame=[[ChartCellFramealloc]init];   ChartMessage*chartMessage=[[ChartMessagealloc]init];      chartMessage.icon=@"icon01.png";   chartMessage.messageType=1;   chartMessage.content=textFiled.text;   cellFrame.chartMessage=chartMessage;      [self.cellFramesaddObject:cellFrame];   [self.tableViewreloadData];      //滚动到当前行   [selftableViewScrollCurrentIndexPath];      //利用用户问题,查询结果      //API请求格式。具体格式见图灵官网   //6c2cfaf7a7f088e843b550b0c5b89c26替换成你申请的key即可   NSString*urlString=[NSStringstringWithFormat:@"http://www.tuling123.com/openapi/api?key=6c2cfaf7a7f088e843b550b0c5b89c26&&info=%@",textFiled.text];      //NSUTF8StringEncoding编码。避免中文错误urlString=[urlStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];   //调用API   NSURL*url=[NSURLURLWithString:urlString];   testRequest=[ASIHTTPRequestrequestWithURL:url];   [testRequestsetDelegate:self];   [testRequeststartAsynchronous];      textFiled.text=@"";   myTextField=textFiled;}#pragmamark-返回机器人回答//调用API完毕,返回图灵回答结果//1.收起键盘//2.显示回答内容-(void)requestFinished:(ASIHTTPRequest*)request{      //收起键盘   [myTextFieldresignFirstResponder];      //当以文本形式读取返回内容时用这个方法   //解析返回的json数据   NSString*responseString=[requestresponseString];   self.testDic=[responseStringobjectFromJSONString];   self.testArr=[testDicobjectForKey:@"text"];         //显示回答内容   ChartCellFrame*cellFrame=[[ChartCellFramealloc]init];   ChartMessage*chartMessage=[[ChartMessagealloc]init];      chartMessage.icon=@"icon02.png";   chartMessage.messageType=0;   chartMessage.content=[NSStringstringWithFormat:@"%@",self.testArr];   cellFrame.chartMessage=chartMessage;      [self.cellFramesaddObject:cellFrame];   [self.tableViewreloadData];      //滚动到当前行   [selftableViewScrollCurrentIndexPath];   }//API请求失败-(void)requestFailed:(ASIHTTPRequest*)request{   NSError*error=[requesterror];   NSLog(@"error---%@",error);      UIAlertView*alert_=[[UIAlertViewalloc]initWithTitle:@"提示"message:@"无网络可用,请检查网络状态"delegate:selfcancelButtonTitle:@"知道了"otherButtonTitles:nil];   [alert_show];}1学习的路上,与君共勉                    

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇