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

                      
               

前言:


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

具体功能包括:

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

运行效果:


                                   

源码下载:


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

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


源码解析:


一。仿微信界面


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

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

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

这里简要介绍一下。

该界面分成两部分: 

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

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

列表添加:


  
  
  1. //add UItableView
  2.     self.tableView=[[ UITableView alloc]initWithFrame: CGRectMake( 0, 44, self.view.frame.size.width, self.view.frame.size.height -88) style: UITableViewStylePlain];
  3.     [ self.tableView registerClass:[ChartCell class] forCellReuseIdentifier:cellIdentifier];
  4.     self.tableView.separatorStyle= UITableViewCellSeparatorStyleNone;
  5.     self.tableView.allowsSelection = NO;
  6.     self.tableView.backgroundView = [[ UIImageView alloc] initWithImage:[ UIImage imageNamed: @"chat_bg_default.jpg"]];
  7.     self.tableView.dataSource= self;
  8.     self.tableView.delegate= self;
  9.     [ self.view addSubview: self.tableView];
  • 1

2. KeyBordVIew: 自定义的UIView, 用来显示自定义的键盘视图。

键盘添加:


  
  
  1.     //add keyBorad
  2.     self.keyBordView=[[KeyBordVIew alloc]initWithFrame: CGRectMake( 0, self.view.frame.size.height -44, self.view.frame.size.width, 44)];
  3.     self.keyBordView.delegate= self;
  4.     [ self.view addSubview: self.keyBordView];
  • 1


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

1.注册通知


  
  
  1.     //注册通知, 键盘收起, 弹出
  2.     [[ NSNotificationCenter defaultCenter] addObserver: self selector: @selector(keyboardShow:) name: UIKeyboardWillShowNotification object: nil];
  3.     [[ NSNotificationCenter defaultCenter] addObserver: self selector: @selector(keyboardHide:) name: UIKeyboardWillHideNotification object: nil];
  • 1

2.响应操作


  
  
  1. //键盘弹出响应
  2. -( void)keyboardShow:( NSNotification *)note
  3. {
  4.     CGRect keyBoardRect=[note.userInfo[ UIKeyboardFrameEndUserInfoKey] CGRectValue];
  5.     CGFloat deltaY=keyBoardRect.size.height;
  6.    
  7.     [ UIView animateWithDuration:[note.userInfo[ UIKeyboardAnimationDurationUserInfoKey] floatValue] animations:^{
  8.        
  9.         self.view.transform= CGAffineTransformMakeTranslation( 0, -deltaY);
  10.     }];
  11. }
  12. //键盘收起响应
  13. -( void)keyboardHide:( NSNotification *)note
  14. {
  15.     [ UIView animateWithDuration:[note.userInfo[ UIKeyboardAnimationDurationUserInfoKey] floatValue] animations:^{
  16.         self.view.transform = CGAffineTransformIdentity;
  17.     }];
  18. }
  • 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.framework
MobileCoreServices.framework
CFNetwork.framework
libz.dylib


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

具体实现如下:


  
  
  1. //每当编辑完问题后
  2. //1. 显示自己的问题 messageType=1
  3. //2. 调用API,返回结果
  4. -( void)KeyBordView:(KeyBordVIew *)keyBoardView textFiledReturn:( UITextField *)textFiled
  5. {
  6.    
  7.     //显示自己的问题
  8.     ChartCellFrame *cellFrame=[[ChartCellFrame alloc]init];
  9.     ChartMessage *chartMessage=[[ChartMessage alloc]init];
  10.    
  11.     chartMessage.icon= @"icon01.png";
  12.     chartMessage.messageType= 1;
  13.     chartMessage.content=textFiled.text;
  14.     cellFrame.chartMessage=chartMessage;
  15.    
  16.     [ self.cellFrames addObject:cellFrame];
  17.     [ self.tableView reloadData];
  18.    
  19.     //滚动到当前行
  20.     [ self tableViewScrollCurrentIndexPath];
  21.    
  22.     //利用用户问题, 查询结果
  23.    
  24.     //API请求格式。 具体格式见图灵官网
  25.     //6c2cfaf7a7f088e843b550b0c5b89c26 替换成你申请的key即可
  26.     NSString* urlString = [ NSString stringWithFormat: @"http://www.tuling123.com/openapi/api?key=6c2cfaf7a7f088e843b550b0c5b89c26&&info=%@", textFiled.text];
  27.    
  28.     //NSUTF8StringEncoding编码。 避免中文错误
  29. urlString = [urlString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
  30.     //调用API
  31.     NSURL *url = [ NSURL URLWithString:urlString];
  32.     testRequest = [ASIHTTPRequest requestWithURL:url];
  33.     [testRequest setDelegate: self];
  34.     [testRequest startAsynchronous];
  35.    
  36.     textFiled.text= @"";
  37.     myTextField = textFiled;
  38. }
  39. #pragma mark - 返回机器人回答
  40. //调用API完毕, 返回图灵回答结果
  41. //1. 收起键盘
  42. //2. 显示回答内容
  43. - ( void)requestFinished:(ASIHTTPRequest *)request
  44. {
  45.    
  46.     //收起键盘
  47.     [myTextField resignFirstResponder];
  48.    
  49.     // 当以文本形式读取返回内容时用这个方法
  50.     // 解析返回的json数据
  51.     NSString *responseString = [request responseString];
  52.     self.testDic = [responseString objectFromJSONString];
  53.     self.testArr = [testDic objectForKey: @"text"];
  54.    
  55.    
  56.     //显示回答内容
  57.     ChartCellFrame *cellFrame=[[ChartCellFrame alloc]init];
  58.     ChartMessage *chartMessage=[[ChartMessage alloc]init];
  59.    
  60.     chartMessage.icon= @"icon02.png";
  61.     chartMessage.messageType= 0;
  62.     chartMessage.content=[ NSString stringWithFormat: @"%@", self.testArr];
  63.     cellFrame.chartMessage=chartMessage;
  64.    
  65.     [ self.cellFrames addObject:cellFrame];
  66.     [ self.tableView reloadData];
  67.    
  68.     //滚动到当前行
  69.     [ self tableViewScrollCurrentIndexPath];
  70.    
  71. }
  72. // API请求失败
  73. - ( void)requestFailed:(ASIHTTPRequest *)request
  74. {
  75.     NSError *error = [request error];
  76.     NSLog( @"error --- %@",error);
  77.    
  78.     UIAlertView *alert_ = [[ UIAlertView alloc]initWithTitle: @"提示" message: @"无网络可用,请检查网络状态" delegate: self cancelButtonTitle: @"知道了" otherButtonTitles: nil];
  79.     [alert_ show];
  80. }
  • 1



学习的路上, 与君共勉

                       
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
免费_人工智能聊天对话机器人阿玉 v2.1源码免费下载 人工智能聊天对话机器人阿玉(全站源码),你可以教机器人知识,然后提问教过的知识,或机器人已知的知识。 现在知识库知识太少,请按使用说明,先教后问,不要直接就问。 独特之处1:你可以教机器人知识,然后提问教过的知识,或她已知的知识。而其它聊天机器人,教完再问,就一问三不知了。 独特之处2:动态sql,就是根据不同的提问,把不同的指令碎片拼接,形成程序,然后执行。从而使机器人能自己给自己编写程序,以应对无限种可能。 独特之处3:我没有用python,也没有用任何人工智能库和库函数。所有人工智能程序,都是mysql存储过程形式,存放于数据库中。 独特之处4:唯美的动画界面:文字逐字输出,人物口随说话而变化,环境背景和人物穿着随时间和情况而变化,语言发音,背景音乐等。 2.0版本更新: 主要更新基础训练,在数据库存储过程中,有9个基础训练(z1到z9),看完基础训练,就能轻易看懂人工智能源码。之前我总担心有人看不懂我的源码,所以这次我完善了基础训练,因此2.0版本可以称为教学版,主要是以教学为目的。 增加由抽象到具体的思维。这个版本中,机器人可以把抽象的概念,转化为具体的概念来回答。 2.1版本更新 修正一个小错误,句子最后可以加标点符号。 之前按照聊天的一般输入习惯,句子最后结尾,不用写标点符号。所以当时没考虑写了标点符号会报错。 安装方法 运行需要mysql数据库和php运行环境(例如AppServ)。 新建数据库,把snow.sql导入数据库,字符集设utf8,排序规则设utf8_general_ci config配置文件改成你的信息,就可以运行了。 搭建php运行环境: 第一步:安装AppServ。安装时,出现4个组件的选择安装,把MySql Database的钩去掉,就是不要安装,否则会覆盖已安装的mysql数据库。mysql数据库应另外单独安装,用不着通过AppServ方式安装。 第二步:把网页程序文件,都放到C盘的AppServ文件夹里的www文件夹里。 第三步:浏览器网址栏输入localhost/index.html就可以打开网页主页了。 最好在www文件夹下,再建立一个文件夹,例如叫a。网页文件都放入a文件夹,那么网址就是localhost/a/index.html

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值