跳至内容

解决方案 - 创建不良词语过滤器服务

image

作为书店老板,您希望在客户提交新的负面评论时,在 Slack 频道中立即收到通知。通过利用 Knative Function,您可以设置一个无服务器函数,其中包含一个简单的不良词语过滤器服务,以判断文本是否包含任何仇恨/侮辱性言论。

我们将学习哪些 Knative 功能?

  • 使用 Knative Function 部署服务的便捷性,并使其由 Knative Serving 管理,这使您能够将服务自动缩放到零,并向上扩展以处理需求。

最终交付成果是什么样的?

image

一个正在运行的无服务器 Knative Function,其中包含一个 Python 应用程序,该应用程序接收新的评论作为 CloudEvent 并返回结果,告诉您的输入文本是否包含任何不合适的语言。结果作为 CloudEvent 发送回。

信息

我们使用 profanity_check 库来检测文本中的不良词语。这是一个开源库。请参阅此处的免责声明。结果可能不完全准确。

函数的输出将仅来自

实施

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 将为您生成一个基本的函数模板,供您开始使用。

您可以在此处找到所有受支持的语言模板 here

验证

文件树将如下所示

/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 Sequence 连接 2 个 ML 工作流,并确保它们按您希望的顺序执行。

转到创建 Knative Sequence

我们使用分析和 Cookie 来了解网站流量。出于此目的,您的网站使用信息将与 Google 共享。 了解更多。