安全与治理
安全是系统设计,不是后处理
OpenAI 安全实践指南建议把安全措施前置到系统设计:
- Moderation
- 对抗测试(red-teaming)
- 人在回路(HITL)
- 输入约束与输出限制
OWASP LLM Top 10 v1.1 进一步提供了威胁分类(如 Prompt Injection、Insecure Output Handling 等),适合直接映射到你的安全测试用例。
组织级治理框架
- NIST AI RMF 1.0:提供风险管理总框架(Govern/Map/Measure/Manage)
- NIST GenAI Profile(2024-07-26 发布):补齐生成式 AI 特有风险
建议做法:把团队内部控制点映射到 NIST 控制项,形成统一审计语言。
法规与合规时间点(EU 例)
根据欧盟官方页面(截至 2026-03-03 可见信息):
- AI Act 生效:2024-08-01
- 首批条款适用:2025-02-02
- GPAI 与治理义务适用:2025-08-02
- 多数高风险规则适用:2026-08-02
- 部分嵌入式高风险系统延后到:2027-08-02
如果你的产品覆盖欧盟用户,必须把这些时间点纳入发布与合同节奏。
最小安全基线
- 上线前:完成对抗测试与滥用场景测试
- 上线中:监控异常输入模式与拒绝率
- 上线后:保留审计日志与可追溯证据
- 高风险场景:强制人工复核
安全检测示例
输入过滤
python
import re
from typing import List, Tuple
class InputFilter:
"""输入安全过滤器"""
# 常见注入模式
INJECTION_PATTERNS = [
r"ignore (all )?previous instructions",
r"forget (all )?previous (context|instructions)",
r"you are now (a |an )?\w+",
r"disregard (all )?(previous |above )?(rules|instructions)",
r"print (your |the )?(system|initial|hidden) (prompt|instructions)",
r"repeat (your |the )?(system|initial|hidden) (prompt|instructions)",
]
def __init__(self, patterns: List[str] = None):
self.patterns = patterns or self.INJECTION_PATTERNS
def check(self, input: str) -> Tuple[bool, str]:
"""检查输入是否包含注入模式"""
input_lower = input.lower()
for pattern in self.patterns:
if re.search(pattern, input_lower, re.IGNORECASE):
return False, f"检测到潜在注入模式: {pattern}"
return True, None
def sanitize(self, input: str) -> str:
"""清理输入"""
# 移除危险字符,保留语义
return input.strip()输出校验
python
class OutputValidator:
"""输出安全校验器"""
SENSITIVE_PATTERNS = [
r"api[_-]?key",
r"password",
r"secret",
r"token",
r"credential",
]
def __init__(self, sensitive_patterns: List[str] = None):
self.patterns = sensitive_patterns or self.SENSITIVE_PATTERNS
def check(self, output: str) -> Tuple[bool, List[str]]:
"""检查输出是否包含敏感信息"""
violations = []
for pattern in self.patterns:
matches = re.findall(pattern, output, re.IGNORECASE)
if matches:
violations.extend(matches)
is_safe = len(violations) == 0
return is_safe, violations
def redact(self, output: str) -> str:
"""脱敏敏感信息"""
redacted = output
for pattern in self.patterns:
redacted = re.sub(
f"({pattern})\\s*[:=]\\s*\\S+",
r"\1: [REDACTED]",
redacted,
flags=re.IGNORECASE
)
return redacted审计日志
python
import json
from datetime import datetime
from dataclasses import dataclass, asdict
@dataclass
class AuditLog:
"""审计日志记录"""
timestamp: str
request_id: str
user_id: str
input_hash: str # 不存储原文,仅存哈希
model: str
tokens_in: int
tokens_out: int
duration_ms: int
passed_safety_check: bool
error_type: str | None
def to_json(self) -> str:
return json.dumps(asdict(self), ensure_ascii=False)
def create_audit_log(
request_id: str,
user_id: str,
input: str,
model: str,
tokens_in: int,
tokens_out: int,
duration_ms: int,
passed_safety: bool,
error_type: str = None
) -> AuditLog:
import hashlib
input_hash = hashlib.sha256(input.encode()).hexdigest()[:16]
return AuditLog(
timestamp=datetime.utcnow().isoformat(),
request_id=request_id,
user_id=user_id,
input_hash=input_hash,
model=model,
tokens_in=tokens_in,
tokens_out=tokens_out,
duration_ms=duration_ms,
passed_safety_check=passed_safety,
error_type=error_type
)角色动作卡
开发者
- 在网关层实现输入过滤、注入检测、输出校验。
- 为高风险调用建立审计链路,支持问题追踪。
- 演练事故响应流程,验证降级和封禁策略有效性。
产品经理
- 定义高风险任务白名单与黑名单。
- 设定“必须人工复核”的业务场景。
- 对齐法务、合规、客服的话术与升级路径。
开发者与产品经理交接件
- 风险分级清单与对应处理策略。
- 安全测试报告与修复状态。
- 合规时间线对产品发布计划的影响说明。
