1. 程式人生 > >價值2個億的python程式碼,一般人我指定不告訴他!

價值2個億的python程式碼,一般人我指定不告訴他!

前兩天朋友圈裡看到一段號稱“價值一億”的程式碼:

價值2個億的python程式碼,一般人我指定不告訴他!

 

可以智慧應答,很厲害是不是?

價值2個億的python程式碼,一般人我指定不告訴他!

 

原始碼:

價值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

效果:

價值2個億的python程式碼,一般人我指定不告訴他!

 

使用 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個億的python程式碼,一般人我指定不告訴他!

 

這個效果顯而易見。但介面的前提是要聯網,另外平臺通常會有請求頻率或功能的限制。現在很多平臺還都可免費申請使用,部分特性可能需要付費。開放平臺的好處是開發者可以不用費事就能得到很好的結果,不過要深度定製就不太方便,另外核心技術和資料也都是平臺方的。

如果說前面那段程式碼可以估值一億,拿個天使輪投資。那我這兩段程式碼怎麼也得值2個億吧,可以直接A輪了。記得到時把諮詢費打賞給我

玩笑歸玩笑,但以上三段程式碼,也的確代表了三種開發方式:

  1. 自己實現用第三方框架/庫/程式碼用 API 介面服務

在實際開發中,尤其是非核心功能,通常不建議自己從頭實現,即“不重複造輪子”。因為很可能已經有成熟的開源專案做得比你好,站在前人的肩膀上可以事半功倍。這也是軟體/網際網路行業得以蓬勃發展的基石。但在使用開源專案和程式碼時也要尊重智慧財產權,注意人家的協議,是否可以商用,很多介面和資料也是有限制的。並不是你能拿到程式碼、能扒出介面、爬到資料,就可以放到自己的產品中。這方面有不少規矩,不按規矩來,即侵犯了別人的利益,也可能讓自己掉坑裡。下次可以來細說一下。

價值2個億的python程式碼,一般人我指定不告訴他!