ソリューション - 悪口フィルターサービスの作成¶
書店オーナーとして、お客様が新しいネガティブなレビューコメントを送信するたびに、Slackチャンネルに即時通知を受け取ることを目指しています。Knative Functionを活用することで、テキストに嫌悪感/侮辱的な発言が含まれているかどうかを判断する単純な悪口フィルターサービスを含むサーバーレス関数を作成できます。
どのようなKnative機能について学習しますか?¶
- Knative Functionを使用してサービスを簡単にデプロイし、Knative Servingによって管理させることで、サービスをゼロに自動スケールし、需要に合わせてスケールアップできるようになります。
最終成果物はどのようなものですか?¶
新しいレビューコメントをCloudEventとして受信し、入力テキストに不適切な言語が含まれているかどうかを示す結果を返すPythonアプリケーションを含む、実行中のサーバーレスKnative Functionです。結果はCloudEventとして返されます。
情報
テキスト内の悪口を検出するために、profanity_check
ライブラリを使用しています。これはオープンソースライブラリです。免責事項はこちらをご覧ください。結果は100%正確とは限りません。
関数の出力は次のようになります。
- good
- bad
実装¶
プロセスは簡単です。
func create
コマンドを使用してコードテンプレートを生成することから始めます。- 次に、このテンプレートに独自のコードを組み込みます。
- 最後に、
func deploy
を実行して、アプリケーションをKubernetesクラスタにシームレスにデプロイします。
このワークフローにより、Knative Functionsエコシステム内での開発からデプロイへのスムーズな移行が保証されます。
トラブルシューティング
command not found
が表示された場合は、func CLIをPATHに追加する必要がある場合があります。
ステップ1:Knative Functionテンプレートの作成¶
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 Sequenceを使用して2つのMLワークフローを接続し、目的の順序で実行されるようにする方法を学習します。