解決方案 - 建立不雅字詞過濾服務¶
身為書店老闆,您的目標是每當客戶提交新的負面評論時,立即在 Slack 頻道中收到通知。透過利用 Knative 函數,您可以設定一個包含簡單不雅字詞過濾服務的無伺服器函數,以判斷文字是否包含任何仇恨/侮辱性言論。
我們將學習哪些 Knative 功能?¶
- 使用 Knative 函數部署服務的簡便性,並使其由 Knative Serving 管理,這使您能夠將服務自動擴展為零,並擴展以處理需求。
最終交付成果的外觀為何?¶
一個正在執行的無伺服器 Knative 函數,其中包含一個 Python 應用程式,該應用程式會接收新的評論作為 CloudEvent,並傳回結果,告知您的輸入文字是否包含任何不當語言。結果將以 CloudEvent 的形式傳回。
資訊
我們正在使用 profanity_check
程式庫來偵測文字中的不雅字詞。這是一個開放原始碼程式庫。請參閱此處的免責聲明。結果可能不是 100% 準確。
函數的輸出只會是
- good (好的)
- bad (不好)
實作¶
該流程很簡單
- 首先利用
func create
命令產生您的程式碼範本。 - 接下來,將您獨特的程式碼併入此範本中。
- 最後,執行
func deploy
將您的應用程式無縫部署到 Kubernetes 叢集中。
此工作流程確保在 Knative Functions 生態系統中從開發到部署的順利轉換。
疑難排解
如果您看到 command not found
,您可能需要將 func CLI 新增到您的 PATH。)
步驟 1:建立 Knative 函數範本¶
使用 func
CLI 建立新的函數
func create -l <language> <function-name>
在此案例中,我們正在建立一個 Python 函數,因此命令將會是
func create -l python bad-word-filter
此命令會建立一個名為 bad-word-filter
的新目錄,並在其中建立許多檔案。func
CLI 會產生一個基本的函數範本供您開始使用。
您可以在這裡找到所有支援的語言範本。
驗證
檔案樹狀結構會如下所示
/start/bad-word-filter
├── func.yaml
├── .funcignore
├── .gitignore
├── requirements.txt
├── app.sh
├── test_func.py
├── README.md
├── Procfile
└── func.py
步驟 2:將產生的程式碼替換為不雅字詞過濾邏輯¶
bad-word-filter/func.py
是包含函數程式碼的檔案。您可以將產生的程式碼替換為不雅字詞過濾邏輯。您可以使用下列程式碼作為起點
bad-word-filter/func.py
from parliament import Context
from profanity_check import predict
from cloudevents.http import CloudEvent
# The function to convert the bad word filter result into a CloudEvent
def create_cloud_event(inputText, data):
attributes = {
"type": "new-review-comment",
"source": "book-review-broker",
"datacontenttype": "application/json",
"badwordfilter": data,
}
# Put the bad word filter result into a dictionary
data = {"reviewText": inputText, "badWordResult": data}
# Create a CloudEvent object
event = CloudEvent(attributes, data)
return event
def inappropriate_language_filter(text):
profanity_result = predict([text["reviewText"]])
result = "good"
if profanity_result[0] == 1:
result = "bad"
profanity_event = create_cloud_event(text["reviewText"], result)
return profanity_event
def main(context: Context):
"""
Function template
The context parameter contains the Flask request object and any
CloudEvent received with the request.
"""
print("Received CloudEvent: ", context.cloud_event)
# Add your business logic here
return inappropriate_language_filter(context.cloud_event.data)
步驟 3:設定相依性¶
bad-word-filter/requirements.txt
檔案包含函數的相依性。您可以將下列相依性新增至 requirements.txt
檔案
bad-word-filter/requirements.txt
parliament-functions==0.1.0
alt-profanity-check==1.4.1.post1
cloudevents==1.10.1
當您建置函數時,Knative Function 會自動安裝此處列出的相依性。
步驟 4:將函數部署到叢集¶
注意
當您執行以下命令時,請輸入 /bad-word-filter
。
完成程式碼後,您可以使用下列命令將函數部署到叢集
func deploy -b=s2i -v
驗證
部署完成後,您會看到以下輸出
Function deployed in namespace "default" and exposed at URL:
http://bad-word-filter.default.svc.cluster.local
驗證¶
部署後,func
CLI 會提供一個 URL 來存取您的函數。您可以透過傳送包含範例評論的請求來驗證函數的運作。
只需使用 Knative Function 的命令 func invoke
,直接將 CloudEvent 傳送至您叢集上的函數
func invoke -f=cloudevent --data='{"reviewText":"I love Knative so much"}' -v
-f
旗標表示資料的類型,是HTTP
或cloudevent
--data
旗標是輸入文字- 您可以使用
-t
旗標來指定 Knative Function 的 URI。
驗證
如果函數執行成功,您會看到以下輸出
Context Attributes,
specversion: 1.0
type: new-review-comment
source: book-review-broker
id: ebbcd761-3a78-4c44-92e3-de575d1f2d38
time: 2024-05-27T04:44:07.549303Z
datacontenttype: application/json
Extensions,
badwordfilter: good
Data,
{
"reviewText": "I love Knative so much",
"badWordResult": "good"
}
下一步¶
在本教學中,您學習到如何使用 Knative 建立一個用於簡單服務的無伺服器函數,該函數可以偵測文字中不當的語言。
接下來,我們將學習如何使用 Knative 序列來連接 2 個 ML 工作流程,並確保它們以您想要的順序執行。