價值2個億的python程式碼,一般人我指定不告訴他!
前兩天朋友圈裡看到一段號稱“價值一億”的程式碼:
可以智慧應答,很厲害是不是?
原始碼:
Python 極簡版:
while True: print(input('').replace('嗎','').replace('?','!'))
其實就是幾個字元替換!抖了個機靈,也順便黑了把當下某些言必稱 AI 的風氣。你別說,當年區塊鏈概念火爆的時候,還真有人程式碼裡放了個“Hello World”就出來誆錢了。風口之下,什麼樣的妖魔鬼怪都有。
不過真要自己做一個自動應答的機器人,其實也很簡單,而且功能還比上面這位更強大。
方法一:ChatterBot 模組
ChatterBot 是一個生成自動應答的第三方庫。一個簡單的例子:
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
效果:
使用 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輪了。記得到時把諮詢費打賞給我
玩笑歸玩笑,但以上三段程式碼,也的確代表了三種開發方式:
- 自己實現用第三方框架/庫/程式碼用 API 介面服務
在實際開發中,尤其是非核心功能,通常不建議自己從頭實現,即“不重複造輪子”。因為很可能已經有成熟的開源專案做得比你好,站在前人的肩膀上可以事半功倍。這也是軟體/網際網路行業得以蓬勃發展的基石。但在使用開源專案和程式碼時也要尊重智慧財產權,注意人家的協議,是否可以商用,很多介面和資料也是有限制的。並不是你能拿到程式碼、能扒出介面、爬到資料,就可以放到自己的產品中。這方面有不少規矩,不按規矩來,即侵犯了別人的利益,也可能讓自己掉坑裡。下次可以來細說一下。