设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 4767|回复: 0
打印 上一主题 下一主题

价值2个亿的代码

[复制链接]

169

主题

1

好友

733

积分

版主

Rank: 7Rank: 7Rank: 7

跳转到指定楼层
楼主
发表于 2018-12-19 15:28:54 |只看该作者 |正序浏览

前两天朋友圈里看到一段号称“价值一亿”的代码:

可以智能应答,很厉害是不是?

源码:

Python 极简版:
  1. while True:
  2.     print(input('').replace('吗','').replace('?','!'))
复制代码
其实就是几个字符替换!抖了个机灵,也顺便黑了把当下某些言必称 AI 的风气。你别说,当年区块链概念火爆的时候,还真有人代码里放了个“Hello World”就出来诓钱了。风口之下,什么样的妖魔鬼怪都有。

不过真要自己做一个自动应答的机器人,其实也很简单,而且功能还比上面这位更强大。

方法一:ChatterBot 模块

ChatterBot 是一个生成自动应答的第三方库。一个简单的例子:
  1. from chatterbot import ChatBot
  2. # 生成机器人,指定输入输出和训练器
  3. chatbot = ChatBot(
  4.     'CrossinBot',
  5.     input_adapter='chatterbot.input.TerminalAdapter',
  6.     output_adapter='chatterbot.output.TerminalAdapter',
  7.     trainer='chatterbot.trainers.ChatterBotCorpusTrainer'
  8. )
  9. # 以中文语料进行训练
  10. chatbot.train('chatterbot.corpus.chinese')
  11. print('你好,请问需要什么帮助?')
  12. # 循环问答
  13. while True:
  14.     try:
  15.         bot_input = chatbot.get_response(None)
  16.     except (KeyboardInterrupt, EOFError, SystemExit):
  17.         # CTRL-C/CTRL-D 中断退出
  18.         break
复制代码
效果:

使用 ChatterBot 的好处是问答数据保存在本地,无需联网。缺点则是你需要自己去训练你的机器人,默认语料的效果其实挺差的,一开始聊天差不多就是人工智障……而且通过聊天的过程学习,也存在被用户“教坏”的问题。官方文档地址:chatterbot.readthedocs.io

方法二:开放 AI 接口

鉴于方法一的问题,有很多平台提供了智能应答的 API 接口服务。以腾讯 AI 开放平台的“智能闲聊”接口为例:
  1. import requests as rq
  2. import time
  3. import random
  4. import string
  5. import urllib
  6. import hashlib
  7. APPKEY = 'ABDEFGH'  # 换成你的APPKEY
  8. def get_sign(data):
  9.     lst = [i[0]+'='+urllib.parse.quote_plus(str(i[1])) for i in data.items()]
  10.     params = '&'.join(sorted(lst))
  11.     s = params + '&app_key=' + APPKEY
  12.     h = hashlib.md5(s.encode('utf8'))
  13.     return h.hexdigest().upper()
  14. def chat(question):   
  15.     url_chat = 'https://api.ai.qq.com/fcgi-bin/nlp/nlp_textchat'
  16.     nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 16))
  17.     data = {
  18.         'app_id': 1234567890,  # 换成你的app_id
  19.         'time_stamp': int(time.time()),
  20.         'nonce_str': nonce_str,
  21.         'session': '10000',
  22.         'question': question,
  23.     }
  24.     data['sign'] = get_sign(data)
  25.     r = rq.post(url_chat, data=data)
  26.     answer = r.json()['data']['answer']
  27.     return answer
  28. print('你好,请问需要什么帮助?')
  29. while True:
  30.     try:
  31.         print(chat(input()))
  32.     except (KeyboardInterrupt, EOFError, SystemExit):
  33.         # CTRL-C/CTRL-D 中断退出
  34.         break
复制代码
效果:

这个效果显而易见。但接口的前提是要联网,另外平台通常会有请求频率或功能的限制。现在很多平台还都可免费申请使用,部分特性可能需要付费。开放平台的好处是开发者可以不用费事就能得到很好的结果,不过要深度定制就不太方便,另外核心技术和数据也都是平台方的。

如果说前面那段代码可以估值一亿,拿个天使轮投资。那我这两段代码怎么也得值2个亿吧,可以直接A轮了。记得到时把咨询费打赏给我

玩笑归玩笑,但以上三段代码,也的确代表了三种开发方式:
自己实现用第三方框架/库/代码用 API 接口服务
在实际开发中,尤其是非核心功能,通常不建议自己从头实现,即“不重复造轮子”。因为很可能已经有成熟的开源项目做得比你好,站在前人的肩膀上可以事半功倍。这也是软件/互联网行业得以蓬勃发展的基石。但在使用开源项目和代码时也要尊重知识产权,注意人家的协议,是否可以商用,很多接口和数据也是有限制的。并不是你能拿到代码、能扒出接口、爬到数据,就可以放到自己的产品中。这方面有不少规矩,不按规矩来,即侵犯了别人的利益,也可能让自己掉坑里。下次可以来细说一下。



════

其他文章及回答:

编程实训 | 如何自学Python | 新手引导 | 精选Python问答 | Python单词表 | 人工智能 | 爬虫 | 我用Python | requests | 计算机视觉

欢迎搜索及关注公众号:Crossin的编程教室

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-24 17:15 , Processed in 0.023865 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部