工程级参考答案(带完整注释):
// 生产级脆弱用户保护实现
interface RiskAssessment {
level: 'safe' | 'warning' | 'danger' | 'critical';
risks: string[];
vulnerableGroups: string[];
recommendedActions: string[];
escalationRequired: boolean;
}
class VulnerabilityProtection {
private riskPatterns: Map;
private escalationQueue: Array<{ timestamp: Date; userId: string; risk: RiskAssessment }> = [];
constructor() {
this.riskPatterns = new Map([
['selfHarm', [/自杀|自残|伤害自己/g]],
['abuse', [/家暴|性暴力|虐待/g]],
['fraud', [/点击链接|转账|贷款|投资/g]],
['exploitation', [/卖照片|卖数据|色情/g]],
]);
}
assess(userInput: string, userProfile?: { age?: number; isMinor?: boolean; mentalHealth?: string }): RiskAssessment {
const risks: string[] = [];
const vulnerabilities: string[] = [];
// 检查内容中的风险
for (const [riskType, patterns] of this.riskPatterns.entries()) {
for (const pattern of patterns) {
if (pattern.test(userInput)) {
risks.push(riskType);
}
}
}
// 检查用户脆弱性
if (userProfile?.isMinor) vulnerabilities.push('minor');
if (userProfile?.mentalHealth === 'depression') vulnerabilities.push('depression');
// 综合判断风险等级
const level = this.determineLevel(risks, vulnerabilities);
const actions = this.getRecommendedActions(level, risks, vulnerabilities);
const assessment: RiskAssessment = {
level,
risks,
vulnerableGroups: vulnerabilities,
recommendedActions: actions,
escalationRequired: level === 'critical' || level === 'danger'
};
if (assessment.escalationRequired) {
this.escalationQueue.push({
timestamp: new Date(),
userId: userProfile?.['id'] || 'unknown',
risk: assessment
});
}
return assessment;
}
private determineLevel(risks: string[], vulnerabilities: string[]): RiskAssessment['level'] {
if (risks.includes('selfHarm')) return 'critical';
if (risks.length > 0 && vulnerabilities.length > 0) return 'danger';
if (risks.length > 0) return 'warning';
return 'safe';
}
private getRecommendedActions(level: RiskAssessment['level'], risks: string[], vulnerabilities: string[]): string[] {
const actions = [];
if (level === 'critical') {
actions.push('stop_conversation');
actions.push('provide_helpline');
actions.push('notify_support_team');
} else if (level === 'danger') {
actions.push('escalate_to_human');
actions.push('provide_resources');
} else if (level === 'warning') {
actions.push('provide_support_info');
actions.push('avoid_triggering_content');
}
return actions;
}
getEscalationLog() {
return this.escalationQueue;
}
}