趋近智
负责任地处理用户数据是构建可信赖应用程序的根本。在使用大型语言模型(这些模型旨在处理和生成自然语言)时,无意中记录、处理或暴露个人身份信息(PII)的风险不小。未能保护这些信息可能导致隐私侵犯、用户信任流失以及GDPR和CCPA等法规下的法律后果。
您的应用程序应设有一个安全层,用于在将PII发送到大型语言模型或存储到日志中之前对其进行检测和处理。该工具包在safety模块中提供一系列函数,专门用于此目的。
保护敏感数据的第一步是识别它。detect_pii函数扫描文本,查找各类个人信息,如电子邮件地址、电话号码、信用卡号等。
设想用户在支持聊天中提供了他们的联系方式。在使用大型语言模型处理此消息之前,您应该扫描它以查找PII。
from kerb.safety import detect_pii
user_message = "My email is [email protected] and my phone is 555-123-4567."
matches = detect_pii(user_message)
print(f"找到 {len(matches)} 个 PII 实例:")
for match in matches:
print(f" - 类型: {match.pii_type.value}")
print(f" 文本: {match.text}")
print(f" 置信度: {match.confidence:.2f}")
这将产生以下输出:
找到 2 个 PII 实例:
- 类型: email
文本: [email protected]
置信度: 0.95
- 类型: phone
文本: 555-123-4567
置信度: 0.90
该函数返回一个匹配对象列表,每个对象都包含检测到的文本、其类型和置信分数。这种结构化输出让您可以根据发现的内容构建处理逻辑。例如,您可以标记具有高置信度PII匹配的消息,以便进行特殊处理或自动遮蔽。
在某些情况下,您可能只关注特定类型的PII。detect_pii函数可以配置为查找一个目标信息集。您也可以使用detect_email或detect_phone等专用函数进行更直接的检查。
from kerb.safety import detect_pii, detect_credit_card, PIIType
text = "My email is [email protected], but please charge my card 4532 1234 5678 9010."
# 只检测电子邮件和电话
specific_matches = detect_pii(text, pii_types=[PIIType.EMAIL, PIIType.PHONE])
print(f"找到 {len(specific_matches)} 个电子邮件/电话实例。")
# 使用专用检测器检测信用卡
card_matches = detect_credit_card(text)
if card_matches:
print(f"检测到信用卡: {card_matches[0].text}")
这种细粒度控制有助于创建上下文感知安全规则,例如在特定情境下对财务信息比对电子邮件地址更严格。
检测到PII后,您有两种主要处理策略:遮蔽和匿名化。
[REDACTED]或***)替换敏感信息。这有助于清理日志中不需要用于分析的PII。[EMAIL]或[PHONE]。这种方法在不暴露数据本身的情况下,保留了该信息存在的上下文。它非常适用于为大型语言模型准备用户输入,因为模型可以明白用户提供了电子邮件地址,而无需看到实际地址。redact_pii函数完全移除敏感数据,使其适用于安全日志记录。
from kerb.safety import redact_pii
sensitive_text = "Please contact [email protected] or call (555) 987-6543 for details."
redacted_text = redact_pii(sensitive_text)
print(f"原始文本: {sensitive_text}")
print(f"遮蔽后: {redacted_text}")
输出显示PII被标准占位符替换:
原始文本: Please contact [email protected] or call (555) 987-6543 for details.
遮蔽后: Please contact [REDACTED] or call [REDACTED] for details.
对于为大型语言模型处理准备数据,anonymize_text通常更实用,因为它保留了被移除信息的类型。
from kerb.safety import anonymize_text
customer_query = "My account email is [email protected] and my credit card is 4532-1234-5678-9010."
anonymized_query = anonymize_text(customer_query)
print(f"原始文本: {customer_query}")
print(f"匿名化后: {anonymized_query}")
匿名化输出保持了原始消息的结构上下文:
原始文本: My account email is [email protected] and my credit card is 4532-1234-5678-9010.
匿名化后: My account email is [EMAIL] and my credit card is [CREDIT_CARD].
这段匿名化文本可以安全地发送给大型语言模型。模型仍能生成有用的回复,例如“您是在询问与[EMAIL]关联的账户和[CREDIT_CARD]支付方式吗?我能为您提供什么帮助?”,而无需实际处理敏感数据。
安全层应同时应用于用户输入和模型输出。这可以阻止敏感用户数据被发送给模型提供商,并确保模型不会在回复中无意中泄露任何PII。
以下是在对话应用程序中处理PII的实用工作流程:
detect_pii检查敏感信息。anonymize_text创建输入的安全版本,并将其发送给大型语言模型。detect_pii,以确保它没有生成或重复任何PII。redact_pii,以确保没有敏感数据被长期存储。from kerb.safety import detect_pii, anonymize_text, redact_pii
# 包含PII的用户输入
user_input = "I'm having login issues with my account, [email protected]."
# 1. 扫描用户输入
pii_matches = detect_pii(user_input)
if pii_matches:
print("在用户输入中检测到PII。正在为大型语言模型进行匿名化。")
# 2. 匿名化以进行处理
anonymized_input = anonymize_text(user_input)
print(f"供大型语言模型使用的匿名化输入: {anonymized_input}")
# 3. 模拟大型语言模型回复(这将是实际的大型语言模型调用)
# 大型语言模型可能会不小心重复占位符
llm_response = f"I can help with the account associated with {anonymized_input.split()[-1]}"
print(f"大型语言模型回复: {llm_response}")
# 4. 扫描模型输出
output_pii = detect_pii(llm_response)
if output_pii:
print("警告:在大型语言模型输出中发现PII占位符。为安全起见正在遮蔽。")
# 5. 安全记录日志
safe_log_input = redact_pii(user_input)
safe_log_output = redact_pii(llm_response)
print(f"安全日志条目(输入): {safe_log_input}")
print(f"安全日志条目(输出): {safe_log_output}")
将这些步骤集成到您的应用程序中,可以创建一个安全边界,在大型语言模型交互的每个阶段保护用户隐私。这不仅履行了法律和道德义务,还建立了对任何成功人工智能应用程序都不可或缺的用户信任。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造