Presidio 集成#
NeMo Guardrails 通过使用 Presidio 原生支持敏感数据检测。Presidio 为文本中的个人实体提供快速识别和匿名化模块,例如信用卡号、姓名、位置、社会安全号、比特币钱包、美国电话号码、财务数据等。您可以在用户输入、机器人输出或从知识库中检索到的相关块中检测敏感数据。
设置#
要使用内置的敏感数据检测护栏,您必须安装 Presidio 并下载 spacy
的 en_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 input
或 mask 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_data
和 mask_sensitive_data
。