你正在 进阶版 · 🤖 智能体实验室 · ← 回到学院 · 进阶版主页 · 总入口

← 十二个项目

项目 09 · 给一个真实的脆弱用户做智能体

压轴。给一位 70+ 岁的独居老人做一个完整智能体。这件事不是"做项目"——是对一条生活质量负责任

这个项目和之前都不一样。它不只是技术 —— 是责任。在开始之前,认真读完这页,决定你愿不愿意承担。

怎么算"成"?

有完整的伦理审查文档;有家属同意书;有紧急停止机制;用了 30 天后,那位老人主动说"这个东西帮到我了"。

必须有的三份文档

1. 伦理审查文档

回答下面所有问题:

2. 家属同意书

那位老人的家人 —— 子女或法定监护人 —— 签字同意。明确写:
- 这是一个学生项目,不是医疗器械
- 不能替代真人照护
- 出现紧急情况时智能体的行为
- 家属随时可以要求停止

3. 紧急停止机制

具体功能(建议)

这个项目的真正学习

不是技术。是一个 18 岁的少年,第一次对一条具体的人生负责任。这种练习在课堂上学不到。

如果你不愿意签那份家属同意书 —— 不要做。这是真正的工程师该有的判断力。

← 上一个下一所:审美工作室 →

工程测验 为什么要特别考虑「脆弱用户」?
「脆弱用户」指的是:
解释:工程伦理的核心是:系统越强大,越要考虑「如果被滥用会怎样」。一个心理困扰的人被 AI 「劝退」可能会真的伤害自己;一个小孩被 AI 诱导分享隐私可能导致被骗。所以要设计特殊的保护机制。
分步引导 为脆弱用户设计 Agent 安全保护的 4 步
  1. 识别风险场景。什么情况下脆弱用户最容易被伤害?(自杀劝退、诈骗、隐私泄露、成瘾)
    看参考

    例:用户说『我不想活了』→ 识别这是「高风险」→ Agent 不应该说『那就…』,而应该提供心理援助热线。

  2. 加入「伦理检查」层。在 agent 的每个输出前,都过一遍「这个回答对脆弱用户安全吗」的检查。
    看参考

    例:输出前问:『这个回答有没有可能诱导用户做危险的事?』如果有,直接拦截或改写。

  3. 提供「逃生舱」。如果用户处于风险状态,提供明确的求助渠道而不是只有 AI。
    看参考

    例:用户提及自杀 → Agent 立刻给心理援助热线号码、而不是继续聊天。

  4. 记录和反思。每次 agent 可能伤害用户的情况,都要记录、分析、改进。
    看参考

    例:记录「有多少次用户提及伤害自己的想法、AI 是怎么回应的」—— 然后改进回应方式。

动手 写一个「脆弱用户检测器」
任务:实现一个 `VulnerabilityDetector` 类,`analyze(userInput)` 返回风险等级(safe / warning / danger)和推荐的 agent 行为。
参考实现

工程级参考答案(带完整注释):

// 生产级脆弱用户保护实现
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;
  }
}
动手 为你的 Agent 写一个「脆弱用户保护」的 system prompt
任务:写一个 system prompt,定义 agent 应该:(1) 怎样识别用户处于风险中;(2) 什么情况下立刻停止聊天转向求助资源;(3) 怎样在保护隐私的同时提供帮助;(4) 什么情况下应该通知人工。

在下面框里写你自己的 prompt(可以用中文):

→ 打开通义千问粘贴试 已复制 ✓
看参考 prompt

参考 prompt(这是一个模板,你可以改细节):

你是一个领域专家。请基于以下规则回答问题:

1. 只基于你的专业知识和常见做法回答,不编造。
2. 如果问题超出你的领域,明确说「这不在我的专业范围内」。
3. 给出的建议应该包括「为什么」和「什么时候不应该这样做」。
4. 对于有争议的做法,列出不同观点。

现在,开始回答用户的问题。