跳至內容

解決方案 - 建立不雅字詞過濾服務

image

身為書店老闆,您的目標是每當客戶提交新的負面評論時,立即在 Slack 頻道中收到通知。透過利用 Knative 函數,您可以設定一個包含簡單不雅字詞過濾服務的無伺服器函數,以判斷文字是否包含任何仇恨/侮辱性言論。

我們將學習哪些 Knative 功能?

  • 使用 Knative 函數部署服務的簡便性,並使其由 Knative Serving 管理,這使您能夠將服務自動擴展為零,並擴展以處理需求。

最終交付成果的外觀為何?

image

一個正在執行的無伺服器 Knative 函數,其中包含一個 Python 應用程式,該應用程式會接收新的評論作為 CloudEvent,並傳回結果,告知您的輸入文字是否包含任何不當語言。結果將以 CloudEvent 的形式傳回。

資訊

我們正在使用 profanity_check 程式庫來偵測文字中的不雅字詞。這是一個開放原始碼程式庫。請參閱此處的免責聲明。結果可能不是 100% 準確。

函數的輸出只會是

  • good (好的)
  • bad (不好)

實作

image

該流程很簡單

  1. 首先利用 func create 命令產生您的程式碼範本。
  2. 接下來,將您獨特的程式碼併入此範本中。
  3. 最後,執行 func deploy 將您的應用程式無縫部署到 Kubernetes 叢集中。

此工作流程確保在 Knative Functions 生態系統中從開發到部署的順利轉換。

疑難排解

如果您看到 command not found,您可能需要將 func CLI 新增到您的 PATH。)

步驟 1:建立 Knative 函數範本

image

使用 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:將產生的程式碼替換為不雅字詞過濾邏輯

image

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:設定相依性

image

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:將函數部署到叢集

image

注意

當您執行以下命令時,請輸入 /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

驗證

image

部署後,func CLI 會提供一個 URL 來存取您的函數。您可以透過傳送包含範例評論的請求來驗證函數的運作。

只需使用 Knative Function 的命令 func invoke,直接將 CloudEvent 傳送至您叢集上的函數

func invoke -f=cloudevent --data='{"reviewText":"I love Knative so much"}' -v
  • -f 旗標表示資料的類型,是 HTTPcloudevent
  • --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"
}

下一步

image

在本教學中,您學習到如何使用 Knative 建立一個用於簡單服務的無伺服器函數,該函數可以偵測文字中不當的語言。

接下來,我們將學習如何使用 Knative 序列來連接 2 個 ML 工作流程,並確保它們以您想要的順序執行。

前往建立 Knative 序列

我們使用分析和 Cookie 來了解網站流量。您使用我們網站的資訊會與 Google 分享,以達到此目的。 了解更多。