内容审阅参考体系结构

并非每个人在网上玩游戏时都行为得当,因此为了在玩家之间保持文明、热情和愉悦的体验,需要进行一些审阅。 通过检测社区生成的不适当消息内容,在公众看到这些内容前将其消除或删除,您能够帮助实现这一目标。

本文介绍 GitHub 上的此示例中使用的体系结构。 请注意,此参考体系结构中的代码只是一个指南示例,在用于生产环境之前,可能还有需要优化的地方。

体系结构关系图

C内容审阅体系结构

体系结构服务

  • 内容审阅者 - 检查文本、图像和视频资料中是否存在可能具有攻击性、危险或其他不良的内容。 当发现此类资料时,此服务会对其内容应用相应的标签(标志)。
  • Azure 流量管理器 - 当在全球多个区域间进行扩展时,此服务将通过 DNS 选择要连接到的最近区域。
  • 事件中心 - 专为实时接收和处理大量事件(在本例中为聊天字符串)而量身定制的服务,以大幅减少或彻底消除管理开销。
  • Azure Function - 可按需运行代码的无服务器计算服务 - 在本用例中,代码将调用不同的认知服务。

体系结构注意事项

您只需创建一个事件中心命名空间,该命名空间将包含分别用于发送和接收消息的 2 个事件中心。

Azure 内容审阅者检测亵渎内容(已屏蔽或未屏蔽)和 PII。 它支持多个内容类型:文本图像视频。 文本是此体系结构中涉及的唯一内容类型。

部署模板

单击下面的按钮,将项目部署到您的 Azure 订阅:

此操作将触发模板部署,即系统会将 azuredeploy.json ARM 模板文件部署到您的 Azure 订阅,从而创建必要的 Azure 资源。 这可能会在您的 Azure 帐户中产生相应费用。

请查看一般指南文档,其中有一部分概述了 Azure 服务的命名规则和限制。

备注

如果您对 ARM 模板的工作原理感兴趣,请参阅此参考体系结构中使用的每个不同服务对应的 Azure 资源管理器模板文档:

有两种类型的 Azure 认知服务订阅。 第一种是单一服务订阅,例如计算机视觉或语音服务。 单一服务订阅仅限所订阅的服务。 第二种类型是多服务订阅。 这样,通过单一订阅就能获得多种 Azure 认知服务。 此选项还将合并帐单。 为了使此参考体系结构尽可能模块化,认知服务均设置为单一服务。

最后,添加以下函数 应用程序设置,以便示例项目可以连接 Azure 服务:

  • EVENTHUB_CONNECTION_STRING = 所创建的 Azure 事件中心命名空间的连接字符串
  • CONTENTMODERATOR_KEY - 用于访问已创建的 Azure 内容审阅者认知服务的访问密钥

提示

要在本地运行 Azure Functions,请使用这些相同的应用设置更新 local.settings.json 文件。

分步操作

  1. 玩家的设备在 Azure 流量管理器确定的特定区域中打开与聊天服务器的持久加密连接。 聊天服务器创建一个进程,负责维护与玩家的连接以及一些基本的元数据。
  2. 玩家的客户端通过先前创建的安全连接向聊天服务器发送聊天消息。 此玩家在聊天服务器中的进程接收消息并进行解密和解析。
  3. 运行标准验证,聊天服务器调用 Azure 事件中心服务(以保持消息顺序)。
  4. Azure 事件中心充当 Azure Function的输入触发器。
  5. Azure Function 调用 Azure 内容审阅者服务,该服务审阅玩家发送的消息并返回结果。
  6. 设置另一个 Azure 事件中心作为 Azure Function 的输出。
  7. 聊天服务器接收来自 Azure 事件中心的消息。
  8. 聊天服务器可选择将原始消息和来自 Azure 内容审阅者服务的结果都保存在 Azure Data Lake Storage 等永久性存储中。
  9. 如果此消息已存储,则可选择将其保存到 Azure Data Lake Analytics 中以供分析。
  10. 然后,来自 Azure 内容审阅者服务的结果将被发送到聊天服务器中的接收者玩家进程。 该进程对此消息进行进一步验证,对其进行序列化,然后通过它们的安全连接将其发送到接收者玩家的设备。

Azure 事件中心

请参阅此快速入门,了解以多种编程语言将事件发送到事件中心的简单实现。 此处提供了一些其他示例。

由一个 Azure 事件中心对另一个 Azure 事件中心触发的函数

触发事件中心触发器函数时,会将触发此函数的消息作为字符串传入此函数中。 使用事件中心输出绑定将事件写入事件流。

[return: EventHub("ehigce-output", Connection = "EventHubConnectionAppSetting")]
    public static string Run([EventHubTrigger("ehigce-input", Connection = "EventHubConnectionAppSetting")] string chatString, ILogger log)

请查看调用认知服务时出现 401 拒绝访问错误的常见原因和解决方案

安全注意事项

不要将任何事件中心或认知服务连接字符串硬编码到函数的源中。 但至少应充分利用函数应用设置,或者,若要获取更高的安全性,请改用密钥保管库。 有一个指南介绍如何创建密钥保管库、如何将托管服务与函数标识结合使用,以及如何从函数中读取存储在密钥保管库中的机密

查看事件中心身份验证和安全模型概述并付诸实践,确保只有聊天服务器可以与事件中心通信。

缩放

此体系结构中有两处可能会成为瓶颈,您应该知晓并制定应对方案:

  1. 认知服务具有良好的可伸缩性,但默认受到限制。 如果您计划大规模使用认知服务,请联系 Azure 支持以增加容量。
  2. 需要扩展接收 Azure 事件中心响应的聊天服务器。 请启动足够多的虚拟机来满足需求。

备选方案

如果您有兴趣使用基于 Apache Spark 的平台收集分析数据,可以考虑利用 Azure Redis 缓存Azure Databricks

其他资源和示例

适用于 Unity 的 Azure 事件中心 SDK:这是一个沙盒项目。 这篇文章中的内容不受支持,因此可能已过期或不处于工作状态。

定价

如果您没有 Azure 订阅,可以创建免费帐户,开始使用 12 个月的免费服务。 除非您超出这些服务的使用限制,否则无需为 Azure 免费帐户中包含的这些免费服务付费。 了解如何通过 Azure 门户使用情况文件查看服务使用情况。

您需要承担运行这些参考体系结构时所使用的 Azure 服务的费用。 总金额将因使用情况而异。 请参阅参考体系结构中使用的每项服务的定价网页:

您还可以使用 Azure 定价计算器,以配置和估算您计划使用的 Azure 服务的成本。