コンテンツへスキップ

ソリューション - 悪口フィルターサービスの作成

image

書店オーナーとして、お客様が新しいネガティブなレビューコメントを送信するたびに、Slackチャンネルに即時通知を受け取ることを目指しています。Knative Functionを活用することで、テキストに嫌悪感/侮辱的な発言が含まれているかどうかを判断する単純な悪口フィルターサービスを含むサーバーレス関数を作成できます。

どのようなKnative機能について学習しますか?

  • Knative Functionを使用してサービスを簡単にデプロイし、Knative Servingによって管理させることで、サービスをゼロに自動スケールし、需要に合わせてスケールアップできるようになります。

最終成果物はどのようなものですか?

image

新しいレビューコメントをCloudEventとして受信し、入力テキストに不適切な言語が含まれているかどうかを示す結果を返すPythonアプリケーションを含む、実行中のサーバーレスKnative Functionです。結果は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 Functionテンプレートの作成

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フラグはデータの種類(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"
}

次のステップ

image

このチュートリアルでは、テキスト内の不適切な言語を検出できる単純なサービスのサーバーレス関数をKnativeで作成する方法を学習しました。

次に、Knative Sequenceを使用して2つのMLワークフローを接続し、目的の順序で実行されるようにする方法を学習します。

Knative Sequenceの作成へ

サイトトラフィックを理解するために、分析とCookieを使用しています。その目的で、お客様によるサイトの使用に関する情報はGoogleと共有されます。詳細情報。