0. 前言
好久不見,甚是想念~
社群也越做越好了 :) 繼續加油! 奧裡給!
非常感謝我的老朋友們!

今天給大家帶來的是:在騰訊雲上打造你的私人 AI 助手,沒想到騰訊雲還可以這樣玩。
本文有大量圖文,友善學習者可以一步一步進行參考。
這裡給大家準備了一個資料包:
assistant.zip
下載下傳位址:https://img.yingjoy.cn/qcloud/assistant.zip
1. 環境準備
點選即可跳轉
1.1 騰訊智能對話平台 TBP
現在正在公測申請,可以填寫資訊進行申請,秒過
1.1.1 申請 TBP
1.2 騰訊雲伺服器
手動滑稽
2. 開始打造
2.1 建立 TBP 的 Bot
Bot 是某一行業或領域(例如:音樂、新聞)相關意圖的集合。相當于是一個功能子產品。
點選建立:https://console.cloud.tencent.com/tbp/bots
Bot 辨別名可以按照規則随意取一個
建立完成後點選配置
2.2 配置你的 Bot
下面我來解釋一下各名額的含義:
測試
對你的 Bot 進行測試,會彈出一個對話框。
閑聊
開啟後可以進行日常對話,如果不開啟會出現隻要不比對意圖就會回複
兜底
,如下面的情況:
問答管理-門檻值設定
調整問答命中靈敏度,問題和意圖之間可接受的誤差,比如下面這句話:
- 意圖: 你吃飯了嗎
- 問題: 你吃了午餐嗎 (與意圖比對)
- 問題: 吃了午餐 (與意圖不比對)
具體想知道意圖和問題是否比對可以使用騰訊雲自然語言處理 NLP來測試
如圖,Similarity 為比對相似度,測試結果為 0.95,意味着我們隻要将門檻值設定在 0.1 即可匹命中。
這裡我不是很清楚這個對話平台是否采用了這個 API 來計算相似度,不過原理就是這麼個原理,由于該平台還在公測,是以會存在一些不完善的地方,我堅信後面都會逐漸完善的。
兜底(fallback)
當機器人無法回複使用者時,
- 若目前 Bot 開啟了閑聊,則通過閑聊進行兜底;
- 若目前 Bot 沒有開啟閑聊,則傳回兜底話術。
猜你想問設定
沒有命中意圖的時候會推薦相似的問題。
2.3 建立一個意圖
點選左邊導航菜單的: 語義模型 -> 意圖管理
點選建立意圖,按照規則建立意圖名,這裡我建立了一個
weather
點選配置,進行配置。
這裡我用一個
天氣查詢助手
作為示例
這裡借助了高德接口,感謝~
這裡先看一下我們最終的成果,下面是手機端,PC端也有:
這裡隻展示天氣助手的開發
3. 天氣助手
3.1 編寫接口
這裡我采用了
Python Flask
架構來編寫接口。
# -*- coding: utf8 -*-
import requests
import pandas as pd
from flask import Flask, make_response, jsonify, request, render_template
__author__ = 'YingJoy'
app = Flask(__name__)
GD_KEY = '高德地圖的Key,可以去申請'
@app.route('/')
def index():
"""助手首頁"""
return render_template('index.html')
@app.route('/weather', methods=['POST'])
def weather_assistant():
"""
天氣查詢助手,用于【玩轉騰訊雲】打造你的私人 AI 助手
"""
request_body = request.json
# 擷取參數,這裡為了示範就不做其他校驗,直接取資料
city_name = request_body['SlotInfoList'][0]['SlotValue']
request_id = request_body['RequestId']
# 讀取城市編号,這是采用了高德地圖的接口,詳見:https://lbs.amap.com/api/webservice/guide/api/weatherinfo
df = pd.read_excel('static/AMap_adcode_citycode_2020_4_10.xlsx', encoding='utf8')
adcode = df[df['中文名'] == city_name]['adcode']
if adcode.empty:
# 如果城市不存在,傳回錯誤,TBP會自動進行追問,當然也可以傳回TBP支援的Response Body, 在WebHookStatus中指定錯誤
return make_response('城市錯誤', 400)
resp = requests.get(f'https://restapi.amap.com/v3/weather/weatherInfo?key={GD_KEY}&city={int(adcode)}')
# 如果高德地圖接口調用失敗報錯
if resp.json()['status'] != '1':
return make_response(str(resp.json()), 500)
# 格式化天氣格式
weather_result = resp.json()['lives'][0]
query_date = weather_result['reporttime']
province = weather_result['province']
weather = weather_result['weather']
temperature = weather_result['temperature']
humidity = weather_result['humidity']
winddirection = weather_result['winddirection']
windpower = weather_result['windpower']
response_message = f"截至{query_date},{province} - {city_name}的天氣為{weather}," \
f"溫度:{temperature}°,濕度:{humidity},風向:{winddirection},風力:{windpower}。"
# 構造傳回體
return jsonify({
"RequestId": request_id,
"SessionAttributes": "string",
"ResponseMessage": {
"ContentType": "PlainText",
"Content": response_message
},
"WebHookStatus": ""
})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=4006, debug=True)
複制
将接口部署到伺服器即可。
3.2 接口部署
新使用者可以免費體驗 https://cloud.tencent.com/act/free 點選試用即可。
這裡由于我早已不是新使用者,是以我臨時購買了一台伺服器給大家示範~
我的伺服器配置:
3.2.1 安裝Python環境
登入伺服器編寫腳本
install.sh
,将如下内容複制進去
yum groupinstall "Development Tools" -y
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
yum install libffi-devel -y
wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz
tar xvf Python-3.8.1.tgz
cd Python-3.8.1/
./configure --prefix=/opt/python38
make && make install
echo "export PATH=\$PATH:/opt/python38/bin" >> /etc/profile
source /etc/profile
複制
然後執行:
bash install.sh
複制
等待一會伺服器的Python環境就安裝好了
3.2.2 安裝Python庫
我們采用
pipenv
作為伺服器的Python虛拟環境,是以執行
pip3 install pipenv
複制
3.2.3 部署接口
注意:這裡要修改main.py中的
GD_KEY
為你的
Key
才行,否則服務會啟動失敗
将我們的資料包放到伺服器上,并解壓
進入
assistant
目錄,執行指令,安裝虛拟環境
pipenv install
複制
3.3 建立城市詞典
點選 語義模型 -> 詞典管理 -> 建立自定義詞典
城市詞典内置詞典裡也有,這裡為了通用性,直接帶大家建立一個自定義詞典,内置詞典直接點引用即可。
建立詞典
city
,點選配置
在添加詞條處點選批量上傳
選擇資料包中的
static/詞條批量上傳模闆.xlsx
這個檔案就是點選
下載下傳模闆
後填入城市名稱的表
也可以手動添加你喜歡的城市,用分号隔開
導入成功後你可以得到這個詞典。
3.4 配置意圖
點選我們剛剛建立的
weather
意圖,進行配置
3.2.1 建立使用者說法
使用者說法就是内置的問題,這裡先介紹一下,這裡的使用者說法是可以使用
{}
進行參數申明的(即後面的槽位)。
根據這個槽位我們可以拿到主幹資訊進行對應的業務響應。
如:我要建立一個查詢天氣的問題:
别忘了點添加哦
這裡的
CityName
即為一個
槽位
3.2.2 建立槽位
建立槽位用于接受參數,建立一個
CityName
接受之前說法中的
城市名
這裡填寫槽位名稱為
CityName
,詞典選擇我們建立的
city
詞典,可以選擇必填。
追問是指如果沒有在詞典中找到對應的詞系統就會回複該語句繼續追問。
别忘了點添加哦
3.2.3 服務實作
這裡我們選用外部服務調用 (Web Service),讓服務調用我們的接口。
這裡我們填寫我們上面部署的接口位址
這裡填入你的接口位址
這裡延申一下接口的參考:
當使用者發起提問時,伺服器會受到包含
JSON
主體的
POST
請求
HTTP 頭
POST / HTTP/1.1
Content-Type : application/json;charset=UTF-8
Host : your.application.endpoint
Content-Length :
Accept : application/json
Accept-Charset : utf-8
複制
JSON 格式
{
"RequestId": "string",
"AppId": int,
"BotId": "string",
"BotName": "string",
"IntentName": "string",
"SlotInfoList": [
{
"SlotName": "string",
"SlotValue": "string"
},
{
"SlotName": "string",
"SlotValue": "string"
},
{
"SlotName": "string",
"SlotValue": "string"
},
{
"SlotName": "string",
"SlotValue": "string"
}
],
"UserId": "string",
"SessionAttributes": "string"
}
複制
參數具體意思可以見:https://cloud.tencent.com/document/product/1060/37447
我這就不貼出來了,以免本文篇幅過長。
接口傳回規範
這裡要注意,我們的接口傳回也是要遵循規範的
HTTP 頭
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length:
複制
響應正文(
JSON
)
{
"RequestId": "響應的ID,傳回req中的RequestId",
"SessionAttributes": "string",
"ResponseMessage": {
"ContentType": "PlainText",
"Content": "傳回消息内容"
},
"WebHookStatus": ""
}
複制
暫時隻支援回複文本,很期待後面的圖檔和視訊,結合AI可以有更多玩法,如果可以我後面會持續更新。
注:意圖串聯就是将多個意圖組合成複雜邏輯,歸根到底都是一個一個的意圖,本文就不展開了
最後點選儲存意圖。即可。
3.5 修改接口配置
3.3.1 修改 main.py
中的 GD_KEY
為你的 Key
為你的Key
main.py
GD_KEY
Key
3.3.2 釋出你的Bot
點選左邊導航的
釋出管理
,點選
釋出上線
,即可釋出我們的Bot
3.3.3 修改 templates/index.html
中 iframe
的 src
為你的 src
templates/index.html
iframe
src
src
點選應用接入,填寫你的API密鑰,可以通過API密鑰管理建立一個
在點選
Web接入
->
接入設定
複制這個
src
屬性,替換伺服器上
assistant/templates/index.html
的
iframe
的
src
标簽
儲存退出後,執行下面的指令啟動服務:
bash run.sh
複制
之後用浏覽器通路伺服器的
4003
端口,你會得到如下:
注意:如果發現端口無法通路,請檢查伺服器的防火牆是否關閉!
注意:如果發現端口無法通路,請檢查伺服器的防火牆是否關閉!
注意:如果發現端口無法通路,請檢查伺服器的防火牆是否關閉!
重要的事情說三遍
4. 成果
重新打開我們的首頁
http://111.230.206.33:4003/
注:如果失效了,請自行部署一個,我的伺服器是試用的臨時機器 :(
5. 結尾
這裡隻示範了一個很簡單的示例,有了這個示例,我相信大家一定能夠開發出更好玩的東西~
這裡也非常期望未來騰訊智能對話平台 TBP的全新版本,比如圖檔互動,語音互動等等,這樣結合更多AI元件,我們的私人AI助手能夠越來越智能!
如有疑問請聯系我:
社群或者郵箱都可以聯系我哦~
發件格式:請在郵件标題标注: 【騰訊雲社群 - AI助手】
謝謝~~~