匿名化个人身份信息数据

向大型语言模型(LLMs)披露个人身份信息(PII)可能引发严重的安全与隐私风险,包括违反合同义务,并增加数据泄露或数据泄露事件的发生概率。 您可以通过用人工数据替换原始数据,或以不同于原始形式的方式重新排列数据集属性,来实现个人身份信息的匿名化处理。

为何要对个人身份信息数据进行匿名化处理?

在使用大型语言模型时,您可能需要处理姓名、电子邮件地址、电话号码、社会保障号码或财务数据等敏感信息。 将此类信息直接发送给大型语言模型(LLM)提供商,可能使贵组织面临违反合规要求(如GDPR、HIPAA、CCPA)、数据泄露及隐私问题的风险。

使用LLM-Guard进行匿名化处理

LLM-Guard通过在向大型语言模型发送提示前对个人身份信息进行匿名化处理,并在响应中恢复原始数据,确保与大型语言模型的交互始终安全可靠。

安装

使用以下命令安装 LLM-Guard:

pip3 install llm-guard

实施示例

以下代码片段展示了如何为您的应用程序添加个人身份信息匿名化处理:

from llm_guard.input_scanners import Anonymize
from llm_guard.input_scanners.anonymize_helpers import BERT_LARGE_NER_CONF
from llm_guard.output_scanners import Deanonymize
from llm_guard.vault import Vault
from traceloop.sdk import Traceloop
from traceloop.sdk.decorators import workflow

vault = Vault()
Traceloop.init(app_name="watsonx_chat_security_service")

# Call anonymize() on prompt to replace the sensitive data with synthetic data 
@workflow(name="anonymize")
def anonymize(prompt: str):
    scanner = Anonymize(
        vault,
        preamble="Insert before prompt",
        allowed_names=["John Doe"],
        hidden_names=["Test LLC"],
        recognizer_conf=BERT_LARGE_NER_CONF,
        language="en"
    )
    sanitized_prompt, is_valid, risk_score = scanner.scan(prompt)
    return sanitized_prompt

# Call deanonymize() on the response to replace the synthetic data with original data 
@workflow(name="deanonymize")
def deanonymize(sanitized_prompt: str, answer: str):
    scanner = Deanonymize(vault)
    sanitized_model_output, is_valid, risk_score = scanner.scan(sanitized_prompt, answer)
    return sanitized_model_output

运作方式

  1. 匿名化输入 :该 anonymize() 功能在将用户提示发送至大型语言模型前,会检测并替换其中的个人身份信息,用合成占位符替代

  2. 发送至LLM :将匿名化提示词转发至您的LLM服务商

  3. 去匿名化输出 :该 deanonymize() 函数将恢复大型语言模型响应中的原始个人身份信息

这确保了大型语言模型供应商永远不会接触到实际的敏感数据,同时您的应用程序仍能获得符合上下文的准确响应。