前兩天朋友圈裏看到一段號稱「價值一億」的代碼:git
能夠智能應答,很厲害是否是?編程
源碼:json
Python 極簡版:api
while True: print(input('').replace('嗎','').replace('?','!'))
其實就是幾個字符替換!抖了個機靈,也順便黑了把當下某些言必稱 AI 的風氣。你別說,當年區塊鏈概念火爆的時候,還真有人代碼裏放了個「Hello World」就出來誆錢了。風口之下,什麼樣的妖魔鬼怪都有。session
不過真要本身作一個自動應答的機器人,其實也很簡單,並且功能還比上面這位更強大。app
方法一:ChatterBot 模塊框架
ChatterBot 是一個生成自動應答的第三方庫。一個簡單的例子:dom
from chatterbot import ChatBot # 生成機器人,指定輸入輸出和訓練器 chatbot = ChatBot( 'CrossinBot', input_adapter='chatterbot.input.TerminalAdapter', output_adapter='chatterbot.output.TerminalAdapter', trainer='chatterbot.trainers.ChatterBotCorpusTrainer' ) # 以中文語料進行訓練 chatbot.train('chatterbot.corpus.chinese') print('你好,請問須要什麼幫助?') # 循環問答 while True: try: bot_input = chatbot.get_response(None) except (KeyboardInterrupt, EOFError, SystemExit): # CTRL-C/CTRL-D 中斷退出 break
效果:post
使用 ChatterBot 的好處是問答數據保存在本地,無需聯網。缺點則是你須要本身去訓練你的機器人,默認語料的效果其實挺差的,一開始聊天差很少就是人工智障……並且經過聊天的過程學習,也存在被用戶「教壞」的問題。
官方文檔地址:
chatterbot.readthedocs.io學習
方法二:開放 AI 接口
鑑於方法一的問題,有不少平臺提供了智能應答的 API 接口服務。以騰訊 AI 開放平臺的「智能閒聊」接口爲例:
import requests as rq import time import random import string import urllib import hashlib APPKEY = 'ABDEFGH' # 換成你的APPKEY def get_sign(data): lst = [i[0]+'='+urllib.parse.quote_plus(str(i[1])) for i in data.items()] params = '&'.join(sorted(lst)) s = params + '&app_key=' + APPKEY h = hashlib.md5(s.encode('utf8')) return h.hexdigest().upper() def chat(question): url_chat = 'https://api.ai.qq.com/fcgi-bin/nlp/nlp_textchat' nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 16)) data = { 'app_id': 1234567890, # 換成你的app_id 'time_stamp': int(time.time()), 'nonce_str': nonce_str, 'session': '10000', 'question': question, } data['sign'] = get_sign(data) r = rq.post(url_chat, data=data) answer = r.json()['data']['answer'] return answer print('你好,請問須要什麼幫助?') while True: try: print(chat(input())) except (KeyboardInterrupt, EOFError, SystemExit): # CTRL-C/CTRL-D 中斷退出 break
效果:
這個效果顯而易見。但接口的前提是要聯網,另外平臺一般會有請求頻率或功能的限制。如今不少平臺還均可免費申請使用,部分特性可能須要付費。開放平臺的好處是開發者能夠不用費事就能獲得很好的結果,不過要深度定製就不太方便,另外核心技術和數據也都是平臺方的。
若是說前面那段代碼能夠估值一億,拿個天使輪投資。那我這兩段代碼怎麼也得值2個億吧,能夠直接A輪了。記獲得時把諮詢費打賞給我
玩笑歸玩笑,但以上三段代碼,也的確表明了三種開發方式:
在實際開發中,尤爲是非核心功能,一般不建議本身從頭實現,即「 不重複造輪子 」。由於極可能已經有成熟的開源項目作得比你好,站在前人的肩膀上能夠事半功倍。這也是軟件/互聯網行業得以蓬勃發展的基石。但在使用開源項目和代碼時也要尊重知識產權,注意人家的協議,是否能夠商用,不少接口和數據也是有限制的。並非你能拿到代碼、能扒出接口、爬到數據,就能夠放到本身的產品中。這方面有很多規矩,不按規矩來,即侵犯了別人的利益,也可能讓本身掉坑裏。下次能夠來細說一下。
════
其餘文章及回答:
編程實訓 | 如何自學Python | 新手引導 | 精選Python問答 | Python單詞表 | 人工智能 | 爬蟲 | 我用Python | requests | 計算機視覺
歡迎搜索及關注公衆號: Crossin的編程教室