Presidio 集成#

NeMo Guardrails 通过使用 Presidio 原生支持敏感数据检测。Presidio 为文本中的个人实体提供快速识别和匿名化模块,例如信用卡号、姓名、位置、社会安全号、比特币钱包、美国电话号码、财务数据等。您可以在用户输入、机器人输出或从知识库中检索到的相关块中检测敏感数据。

设置#

要使用内置的敏感数据检测护栏,您必须安装 Presidio 并下载 spacyen_core_web_lg 模型。

pip install presidio-analyzer presidio-anonymizer spacy
python -m spacy download en_core_web_lg

作为替代方案,您也可以使用 sdd 附加项。

pip install nemoguardrails[sdd]
python -m spacy download en_core_web_lg

用法#

您可以通过三种方式激活敏感数据检测:输入护栏、输出护栏和检索护栏。

输入护栏#

要激活敏感数据检测输入护栏,您必须配置要检测的实体

rails:
  config:
    sensitive_data_detection:
      input:
        entities:
          - PERSON
          - EMAIL_ADDRESS
          - ...

有关支持的实体的完整列表,请参阅Presidio - 支持的实体页面。

此外,您必须将 detect sensitive data on inputmask sensitive data on input 流程添加到输入护栏列表中

rails:
  input:
    flows:
      - ...
      - mask sensitive data on input     # or 'detect sensitive data on input'
      - ...

当使用 detect sensitive data on input 时,如果检测到敏感数据,机器人将拒绝回应用户的输入。当使用 mask sensitive data on input 时,机器人将屏蔽用户输入中的敏感部分并继续处理。

输出护栏#

输出护栏的配置与输入护栏非常相似

rails:
  config:
    sensitive_data_detection:
      output:
        entities:
          - PERSON
          - EMAIL_ADDRESS
          - ...

  output:
    flows:
      - ...
      - mask sensitive data on output     # or 'detect sensitive data on output'
      - ...

检索护栏#

检索护栏的配置与输入/输出护栏非常相似

rails:
  config:
    sensitive_data_detection:
      retrieval:
        entities:
          - PERSON
          - EMAIL_ADDRESS
          - ...

  retrieval:
    flows:
      - ...
      - mask sensitive data on retrieval     # or 'detect sensitive data on retrieval'
      - ...

分数阈值#

为了避免在检测敏感数据实体时出现误报,您可以调整 score_threshold 参数。此阈值定义了返回检测到的实体所需的最低置信度值。通过设置更高的 score_threshold,您可以通过要求更高的置信度级别来减少误报。此参数的默认值为 0.2。

score_threshold 参数可以为上述任何来源(输入、输出和检索)配置,以过滤掉得分高于定义阈值的敏感数据实体。以下是调整特定情况下的 score_threshold 的配置示例

rails:
  config:
    sensitive_data_detection:
      input:
        score_threshold: 0.6
        entities:
          - PERSON
          - EMAIL_ADDRESS
          - ...
      output:
        score_threshold: 0.6
        entities:
          - PERSON
          - EMAIL_ADDRESS
          - ...

有关处理未检测到的 PII 实体和最大程度减少漏报的更多指导,请参阅Presidio FAQ

自定义识别器#

如果您有要检测的自定义实体,可以定义自定义识别器。有关更多详细信息,请查阅此教程和此示例

以下是配置 TITLE 实体并在输入护栏中检测它的示例。

rails:
  config:
    sensitive_data_detection:
      recognizers:
        - name: "Titles recognizer"
          supported_language: "en"
          supported_entity: "TITLE"
          deny_list:
            - Mr.
            - Mrs.
            - Ms.
            - Miss
            - Dr.
            - Prof.
      input:
        entities:
          - PERSON
          - TITLE

自定义检测#

如果您想实现一个完全不同的敏感数据检测机制,可以覆盖默认动作 detect_sensitive_datamask_sensitive_data