解决方案 - 创建不良词语过滤器服务¶
作为书店老板,您希望在客户提交新的负面评论时,在 Slack 频道中立即收到通知。通过利用 Knative Function,您可以设置一个无服务器函数,其中包含一个简单的不良词语过滤器服务,以判断文本是否包含任何仇恨/侮辱性言论。
我们将学习哪些 Knative 功能?¶
- 使用 Knative Function 部署服务的便捷性,并使其由 Knative Serving 管理,这使您能够将服务自动缩放到零,并向上扩展以处理需求。
最终交付成果是什么样的?¶
一个正在运行的无服务器 Knative Function,其中包含一个 Python 应用程序,该应用程序接收新的评论作为 CloudEvent 并返回结果,告诉您的输入文本是否包含任何不合适的语言。结果作为 CloudEvent 发送回。
信息
我们使用 profanity_check
库来检测文本中的不良词语。这是一个开源库。请参阅此处的免责声明。结果可能不完全准确。
函数的输出将仅来自
- 好
- 坏
实施¶
该过程非常简单
- 首先利用
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 将为您生成一个基本的函数模板,供您开始使用。
您可以在此处找到所有受支持的语言模板 here。
验证
文件树将如下所示
/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 工作流,并确保它们按您希望的顺序执行。