使用Serverless架构打造的图像审核聊天机器人
在广受欢迎的即时通讯应用中,管理员们常常面临挑战,他们需要保护用户免受恶意上传的不适当图片的困扰。【Serverless参考架构】中的图像审核聊天机器人就是为解决这个问题而设计的。它利用了Amazon API Gateway, AWS Lambda和AWS Rekognition的深度学习图像审核功能,智能识别并过滤掉那些含有潜在不当内容的图片。
此示例适用于Slack,但经过适当调整后,也可应用于Facebook Messenger等其他流行聊天应用程序。
仓库中包含了所有描绘在以下图表中的Lambda函数的样本代码以及一个AWS CloudFormation模板,用于创建这些函数和相关资源。
架构解析
- 用户在一个被聊天机器人监控的频道中发布一条包含图片的消息。
- 聊天应用将事件发送到聊天机器人的Amazon API Gateway API。
- 聊天机器人验证事件,触发一个Lambda函数下载图片。
- Amazon Rekognition的图像审核功能检查图像是否包含暗示或明确的不适当内容。
- 如果发现含有明确或暗示的不适当内容,聊天应用API会从频道中删除该图片。
- 聊天机器人使用聊天应用API向频道发送消息,解释已删除图片的原因。
运行示例
预备工作:设置Slack
首先,请确保您已登录Slack,然后按照以下步骤准备您的机器人:
- 创建一个新的应用(文档)。
- 在“基本信息”页面记录下“验证令牌”,稍后会用到。
- 导航至“OAuth & Permissions”(OAuth和权限)标签页。
- 在“权限范围”部分添加以下权限:
- channels:history
- chat:write:bot
- files:read
- files:write:user
- 点击“保存更改”。
- 点击“安装到团队”,然后点击“授权”,记下“OAuth访问令牌”。
在AWS上部署示例
选项1:从Serverless应用库启动
可以在支持底层服务的任何区域通过Serverless应用库直接部署这个聊天机器人:
- 访问应用详细信息页面。
- 点击“部署”。
- 从右上角的地区下拉菜单中选择目标部署区域。
- 输入适当的“应用程序参数”。
- 滚动到底部并点击“部署”。
选项2:手动部署CloudFormation模板
如果您想手动部署模板,您需要在目标区域有一个S3桶,然后使用aws cloudformation package
工具将Lambda函数打包到S3桶中。
设置环境变量供后续命令使用:
S3BUCKET=[替换为你的桶名]
REGION=[替换为你所在的区域]
STACKNAME=[替换为想要的栈名]
VTOKEN=[替换为验证令牌]
ATOKEN=[替换为OAuth访问令牌]
之后进入cloudformation
目录,使用aws cloudformation package
工具:
cd cloudformation
aws cloudformation package --region $REGION --s3-bucket $S3BUCKET --template image_moderator.serverless.yaml --output-template-file image_moderator.output.yaml
最后,使用生成的yaml文件(image_moderator.output.yaml
)通过CloudFormation控制台或命令行进行部署:
aws cloudformation deploy --region $REGION --template-file image_moderator.output.yaml --stack-name $STACKNAME --capabilities CAPABILITY_NAMED_IAM --parameter-overrides VerificationToken=$VTOKEN AccessToken=$ATOKEN
完成Slack事件订阅
- 在创建的CloudFormation堆栈中查看“RequestURL”输出值,这会在稍后需要。
- 返回到Slack应用程序设置页面,对于早前创建的Slack应用:
- 导航到“事件订阅”标签页,在“特征”下启用事件。
- 在“请求URL”字段中输入之前记录的“RequestURL”值。
- 点击“添加工作区事件”并选择“message.channels”。
- 点击“保存更改”。
测试示例
要测试示例,打开你的Slack机器人,并尝试上传从Amazon Rekognition控制台演示中的样例图片,可以从以下链接下载:
清理资源
为了删除由本示例创建的所有资源,请执行以下操作:
- 删除CloudFormation堆栈。
- 删除与由CloudFormation堆栈创建的每个Lambda函数关联的CloudWatch日志组。
CloudFormation模板资源
以下章节解释了CloudFormation模板创建的所有资源。
AWS Lambda
- ImageModeratorFunction - 负责验证传入的Slack事件消息,检查其中是否存在包含不适宜内容的图片,并协调移除含有不适宜内容的图片。
- ImageModeratorFunctionImageModeratorAPIPostPermissionTest - 自动创建的Lambda权限,允许API Gateway Test阶段调用Lambda函数。
- ImageModeratorFunctionImageModeratorAPIPostPermissionProd - 自动创建的Lambda权限,允许API Gateway Prod阶段调用Lambda函数。
AWS IAM
- ImageModeratorFunctionRole - 自动创建的IAM角色,拥有允许Lambda函数调用“rekognition:DetectLabels”和“rekognition:DetectModerationLabels”API以及向CloudWatch Logs写入日志的策略。
Amazon API Gateway
- ImageModeratorAPI: - 图像审核聊天机器人的API。
- ImageModeratorAPIProdStage - 自动创建的生产阶段API。
- ImageModeratorAPIDeploymentXXXXXXXXX - 自动创建的API生产阶段部署。
许可证
此参考架构示例遵循Apache 2.0许可协议。
这款开源项目提供了一种强大而高效的方式来管理社交平台上的不适宜内容。它的服务器无状态化设计确保了高扩展性和低成本运行,而Rekognition的强大图像分析能力则提供了精确的内容过滤。无论你是大型社区管理员还是开发者,想要构建一个安全且健康的在线环境,这个项目都是值得尝试的选择。立即加入,体验Serverless架构带来的便捷和效率提升吧!