使用Python與圖靈機器人聊天

圖靈機器人對中文的識別準確率高達90%,是目前中文語境下智能度最高的機器人。有不少在Python中使用圖靈機器人API的博客,但都是1.0版本。因此今天簡單地總結一下在Python中使用圖靈機器人API v2.0的方法。python

獲取API KEY

首先,前往圖靈機器人官方網站 http://www.tuling123.com/ 註冊帳號。json

登陸後點擊 建立機器人 ,填寫一些簡單的基本信息以後便可建立。api

在機器人設置界面找到你的 API KEY ,記錄下來。app

在Python中使用圖靈機器人API v2.0

基本原理就是使用urllib.request模塊,向接口地址發送HTTP POST請求,請求中加入了聊天內容。iphone

*使用python3執行post

import json
import urllib.request

api_url = "http://openapi.tuling123.com/openapi/api/v2"
text_input = input('我:')

req = {
    "perception":
    {
        "inputText":
        {
            "text": text_input
        },

        "selfInfo":
        {
            "location":
            {
                "city": "上海",
                "province": "上海",
                "street": "文匯路"
            }
        }
    },

    "userInfo": 
    {
        "apiKey": "請替換爲你的API KEY",
        "userId": "OnlyUseAlphabet"
    }
}
# print(req)
# 將字典格式的req編碼爲utf8
req = json.dumps(req).encode('utf8')
# print(req)

http_post = urllib.request.Request(api_url, data=req, headers={'content-type': 'application/json'})
response = urllib.request.urlopen(http_post)
response_str = response.read().decode('utf8')
# print(response_str)
response_dic = json.loads(response_str)
# print(response_dic)

intent_code = response_dic['intent']['code']
results_text = response_dic['results'][0]['values']['text']
print('Turing的回答:')
print('code:' + str(intent_code))
print('text:' + results_text)

* 幾點說明:網站

一、字典 req 包含了向圖靈機器人發出請求所需的各項信息。其中 req['perception']['selfInfo']['location'] 包含了地理位置信息,向圖靈機器人發送與位置有關的請求時,若是沒有另外指定位置,則會默認使用這個位置。例如詢問"明天會下雨嗎",圖靈機器人會回答我"上海"明天是否下雨。編碼

二、req['userInfo'] 包含了API KEY,請替換成你的API KEY(雙引號不要刪除)。另外 userId 是用戶參數,暫時不明白用途,若是你有什麼想法懇請留言。url

三、圖靈機器人的回答能夠轉換爲python的字典格式。其中有一項 response_dic['intent']['code'] 官方稱爲"輸出功能code",表示這個回答是什麼"類型"的。例如10004表明普通的聊天回覆,10008表明與天氣相關的回覆。然而奇怪的是,目前API v2.0的官方文檔並無給出code和類型的對照表。目前本身總結了一些以下,歡迎補充:spa

code 類型
10004 聊天
10008 天氣
10013 科普類,例如"班戟是什麼"
10015 菜譜類,例如"剁椒魚頭怎麼作"
10019 日期類,例如"愚人節是幾號"、"明天是星期幾"
10020 中英翻譯
10023 通常返回網頁會是這個code,例如"iphone多少錢"
10034 語料庫中本身設定的回答

小結

到如今爲止,已經快把每一個獨立的模塊完成了,接下來該準備考慮如何把它們整合在一塊兒了。但願能幫到你。

感謝你閱讀文章!

相關文章
相關標籤/搜索