「價值2個億」的AI代碼

前兩天朋友圈裏看到一段號稱「價值一億」的代碼: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輪了。記獲得時把諮詢費打賞給我

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

  1. 本身實現
  2. 用第三方框架/庫/代碼
  3. 用 API 接口服務

在實際開發中,尤爲是非核心功能,一般不建議本身從頭實現,即「 不重複造輪子 」。由於極可能已經有成熟的開源項目作得比你好,站在前人的肩膀上能夠事半功倍。這也是軟件/互聯網行業得以蓬勃發展的基石。但在使用開源項目和代碼時也要尊重知識產權,注意人家的協議,是否能夠商用,不少接口和數據也是有限制的。並非你能拿到代碼、能扒出接口、爬到數據,就能夠放到本身的產品中。這方面有很多規矩,不按規矩來,即侵犯了別人的利益,也可能讓本身掉坑裏。下次能夠來細說一下。

════

其餘文章及回答:

編程實訓 | 如何自學Python | 新手引導 | 精選Python問答 | Python單詞表 | 人工智能 | 爬蟲 | 我用Python | requests | 計算機視覺

歡迎搜索及關注公衆號: Crossin的編程教室

相關文章
相關標籤/搜索