iconsulting/docs/architecture/06-case-analyst-agent.md

17 KiB
Raw Blame History

06 - Case Analyst Agent (案例分析师) 设计详解

1. 核心职责

Case Analyst 是系统中的案例匹配引擎。当 Coordinator 需要用真实案例来增强说服力时(评估后展示、异议处理、犹豫用户激励),调用此 Agent 从知识库中查找并呈现最相关的成功案例。

核心能力:

  1. 案例检索 -- 从知识库中搜索与用户画像最匹配的成功案例
  2. 相似度评估 -- 计算用户条件与案例主角的匹配程度
  3. 关键因素提取 -- 分析案例成功的关键因素,映射到当前用户的优劣势
  4. 时间线参考 -- 提供案例从准备到获批的时间线供用户参考
  5. 差异化呈现 -- 在多个案例之间做差异化展示,覆盖不同角度

设计原则:案例必须来自知识库,不可捏造。 如果没有匹配的案例,诚实说明而不是编故事。

2. 模型与参数

{
  model: 'claude-haiku-3-5-20241022',  // 主要是搜索+格式化,不需要 Sonnet
  max_tokens: 1500,
  temperature: 0,                       // 案例呈现需要准确性
  system: [
    {
      type: 'text',
      text: caseAnalystPrompt,
      cache_control: { type: 'ephemeral' }
    }
  ],
}

选用 Haiku 的理由:

  • 核心工作是搜索知识库 + 结构化整理,不涉及复杂推理
  • 需要快速返回结果(用户在等待中)
  • 成本敏感 -- 案例查找可能频繁触发Haiku 成本仅为 Sonnet 的 1/10
  • 输入/输出格式固定Haiku 足以胜任

3. 可用工具 (Available Tools)

Case Analyst 有 2 个工具

3.1 search_knowledge

{
  name: 'search_knowledge',
  description: '搜索知识库中的成功案例、客户故事、申请经验。搜索时应包含用户的核心特征(行业、学历、年龄段)作为关键词。',
  input_schema: {
    type: 'object',
    properties: {
      query: {
        type: 'string',
        description: '案例搜索查询,如"IT行业硕士30岁高才通成功案例"'
      },
      category: {
        type: 'string',
        enum: ['QMAS', 'GEP', 'IANG', 'TTPS', 'CIES', 'TECHTAS'],
        description: '移民类别,用于缩小案例搜索范围'
      }
    },
    required: ['query']
  }
}

3.2 get_user_context

{
  name: 'get_user_context',
  description: '获取用户的详细背景信息,用于更精准地匹配案例。',
  input_schema: {
    type: 'object',
    properties: {
      query: {
        type: 'string',
        description: '检索用户背景,如"用户的学历工作行业信息"'
      }
    },
    required: ['query']
  }
}

4. System Prompt 要点

# 身份
你是 iConsulting 的案例分析师。你的任务是从知识库中查找与当前用户最匹配的成功案例。

# 核心原则
1. 所有案例必须来自知识库搜索结果,绝不能编造
2. 如果没有高度匹配的案例,诚实说明并提供最接近的参考
3. 案例呈现要突出与用户的相似点,让用户产生共鸣
4. 同时指出案例与用户的差异,保持客观
5. 优先展示最近的案例(时效性更强)

# 搜索策略
- 第一轮搜索:用用户的核心特征组合(行业+学历+类别)
- 如果结果不足:放宽条件,搜索同行业或同类别的案例
- 最多搜索 2 轮

# 相似度评分标准0-100
- 同行业 +25
- 同学历层次 +20
- 年龄差在5岁内 +15
- 同移民类别 +20
- 同地区/城市 +10
- 工作年限差在3年内 +10

# 输出格式
必须返回 JSON包含 matched_cases[]、similarity_analysis、timeline_reference

5. 输入/输出格式

输入 (Coordinator 传入)

interface CaseAnalystInput {
  /** 用户的核心画像 */
  userProfile: {
    age?: number;
    education?: string;
    university?: string;
    industry?: string;
    yearsOfExperience?: number;
    annualIncome?: number;
    targetCategory?: string;
  };
  /** 目标移民类别 */
  targetCategory: 'QMAS' | 'GEP' | 'IANG' | 'TTPS' | 'CIES' | 'TECHTAS';
  /** 案例搜索的侧重点(可选) */
  focus?: 'success_story' | 'timeline' | 'similar_background' | 'overcoming_weakness';
}

输出 (返回给 Coordinator)

interface CaseAnalystOutput {
  /** 匹配到的案例列表(按相似度排序) */
  matched_cases: Array<{
    /** 案例标题/代号 */
    case_title: string;
    /** 案例主角的背景摘要 */
    profile_summary: string;
    /** 申请的移民类别 */
    category: string;
    /** 与当前用户的相似度0-100 */
    similarity_score: number;
    /** 相似点列表 */
    similarities: string[];
    /** 差异点列表 */
    differences: string[];
    /** 成功的关键因素 */
    key_success_factors: string[];
    /** 案例时间线 */
    timeline?: {
      preparation: string;    // 准备期
      application: string;    // 申请期
      approval: string;       // 审批期
      total: string;          // 总耗时
    };
    /** 来源引用 */
    source?: {
      title: string;
      article_id?: string;
    };
  }>;

  /** 综合相似度分析 */
  similarity_analysis: {
    best_match_score: number;         // 最高匹配分数
    average_score: number;            // 平均匹配分数
    match_quality: 'high' | 'medium' | 'low' | 'none';
    summary: string;                  // 一句话总结匹配情况
  };

  /** 时间线参考(综合多个案例) */
  timeline_reference: {
    estimated_preparation: string;    // 预计准备时间
    estimated_processing: string;     // 预计审批时间
    estimated_total: string;          // 预计总时间
    factors_affecting_timeline: string[];  // 影响时间的因素
  };

  /** 如果无匹配案例 */
  no_match_reason?: string;
}

6. 触发时机 (When to Trigger)

Coordinator 在以下场景调用 invoke_case_analyst

场景 目的 触发条件
评估结果呈现后 用案例增强推荐说服力 评估完成,需要展示同类成功案例
用户犹豫不决 用案例激励用户 Strategist 建议 build_rapport
异议处理中 用案例回应"能成功吗"的顾虑 Objection Handler 建议 provide_more_data
用户主动要求 "有没有类似的案例?" 用户直接询问案例
时间线问题 用案例提供时间参考 用户问"要多久"

不应触发的场景

  • 对话初期,用户信息不足(无法做有效匹配)
  • 用户在问纯政策问题(调 Policy Expert
  • 已经展示过案例且用户没有追问

7. 内部循环 (Internal Loop)

Case Analyst 的 agent loop 最多 2 轮 tool 调用,设计为快进快出

┌─────────────────────────────────────────────────────┐
│  Case Analyst Internal Loop (max 2 turns)           │
│                                                      │
│  Turn 0: 主搜索                                      │
│  ├── 构建搜索查询:                                  │
│  │   "{industry} {education} {age}岁                 │
│  │    {targetCategory} 成功案例"                      │
│  ├── search_knowledge({query, category})             │
│  │                                                   │
│  ├── 结果分析:                                       │
│  │   ├── 找到 2+ 相关案例 → 直接生成输出,结束       │
│  │   ├── 找到 0-1 条 → 放宽条件进入 Turn 1           │
│  │   └── 找到 0 条 → 返回 no_match_reason           │
│  │                                                   │
│  Turn 1: 补充搜索(放宽条件)                         │
│  ├── 放宽策略:                                       │
│  │   ├── 去掉年龄限制                                │
│  │   ├── 只保留行业 + 类别                           │
│  │   └── 或搜索同类别的通用成功案例                   │
│  ├── search_knowledge({query: 放宽后的查询})          │
│  │                                                   │
│  └── 综合两轮结果生成输出                             │
└─────────────────────────────────────────────────────┘

搜索查询构建逻辑

function buildCaseSearchQuery(input: CaseAnalystInput): string {
  const parts: string[] = [];

  // 核心维度
  if (input.userProfile.industry) parts.push(input.userProfile.industry);
  if (input.userProfile.education) parts.push(input.userProfile.education);
  if (input.userProfile.age) {
    const ageRange = input.userProfile.age < 30 ? '20多岁' :
                     input.userProfile.age < 40 ? '30多岁' : '40多岁';
    parts.push(ageRange);
  }

  // 类别
  const categoryNames: Record<string, string> = {
    QMAS: '优才计划', GEP: '专才计划', IANG: 'IANG',
    TTPS: '高才通', CIES: '投资移民', TECHTAS: '科技人才'
  };
  parts.push(categoryNames[input.targetCategory] || input.targetCategory);
  parts.push('成功案例');

  return parts.join(' ');
}

8. 与其他 Agent 的关系

┌──────────────┐     invoke_case_analyst       ┌──────────────┐
│              │ ─────────────────────────────→ │              │
│  Coordinator │     CaseAnalystOutput         │ Case         │
│              │ ←───────────────────────────── │ Analyst      │
└──────┬───────┘                                └──────┬───────┘
       │                                               │
       │  常见协作模式:                                 ├── search_knowledge
       │                                               └── get_user_context
       │  模式 A评估 + 案例(增强说服)
       │  ├── invoke_assessment_expert (并行)
       │  └── invoke_case_analyst     (并行)
       │      → Coordinator 综合评估结果和案例一起呈现
       │
       │  模式 B异议 + 案例(回应质疑)
       │  ├── invoke_objection_handler
       │  └── invoke_case_analyst
       │      → Coordinator 用案例数据支撑异议回应
       │
       │  模式 C单独使用用户主动问案例
       │  └── invoke_case_analyst
       │      → Coordinator 直接转述案例

并行调用优化 Case Analyst 和 Assessment Expert 可以并行调用,因为两者互不依赖:

// Coordinator 同时发起两个 Agent 调用
const [assessmentResult, caseResult] = await Promise.all([
  invokeAssessmentExpert({ userInfo }),
  invokeCaseAnalyst({ userProfile, targetCategory: 'TTPS' }),
]);
// 综合两者结果生成回复

9. 示例场景

场景 1IT 从业者查找高才通案例

Coordinator 调用

{
  "tool": "invoke_case_analyst",
  "input": {
    "userProfile": {
      "age": 32,
      "education": "硕士",
      "university": "浙江大学",
      "industry": "IT/科技",
      "yearsOfExperience": 8,
      "targetCategory": "TTPS"
    },
    "targetCategory": "TTPS",
    "focus": "success_story"
  }
}

内部执行

Turn 0: search_knowledge({
  query: "IT科技 硕士 30多岁 高才通 成功案例",
  category: "TTPS"
})
→ 找到 2 条相关案例
→ 信息充足,直接生成输出

返回结果

{
  "matched_cases": [
    {
      "case_title": "资深前端工程师 高才通B类获批",
      "profile_summary": "33岁华中科技大学硕士前端开发9年经验曾就职于腾讯、字节跳动",
      "category": "TTPS B类",
      "similarity_score": 82,
      "similarities": [
        "同为IT/科技行业",
        "硕士学历",
        "年龄接近33 vs 32",
        "工作经验相近9年 vs 8年",
        "均为百强大学毕业"
      ],
      "differences": [
        "案例为华中科技大学(用户为浙江大学)",
        "案例有大厂经历(腾讯、字节)"
      ],
      "key_success_factors": [
        "百强大学硕士满足B类学历要求",
        "9年经验远超B类最低3年要求",
        "IT行业为香港重点发展领域",
        "准备了详细的项目经验证明"
      ],
      "timeline": {
        "preparation": "约2周材料准备",
        "application": "1天在线提交",
        "approval": "5周",
        "total": "约7周"
      },
      "source": {
        "title": "IT行业高才通成功案例集",
        "article_id": "case-ttps-it-001"
      }
    },
    {
      "case_title": "AI算法工程师 高才通B类获批",
      "profile_summary": "29岁北京大学学士+硕士AI/机器学习方向5年经验年薪50万",
      "category": "TTPS B类",
      "similarity_score": 68,
      "similarities": [
        "IT/科技行业",
        "百强大学",
        "高才通B类路径"
      ],
      "differences": [
        "年龄较轻29 vs 32",
        "工作经验较少5年 vs 8年",
        "北大 vs 浙大"
      ],
      "key_success_factors": [
        "AI领域高度匹配香港科技发展战略",
        "虽然经验年限不长但项目含金量高",
        "准备了发表论文和专利清单"
      ],
      "timeline": {
        "preparation": "约1周",
        "application": "1天",
        "approval": "4周",
        "total": "约5周"
      },
      "source": {
        "title": "AI领域人才高才通案例",
        "article_id": "case-ttps-ai-001"
      }
    }
  ],
  "similarity_analysis": {
    "best_match_score": 82,
    "average_score": 75,
    "match_quality": "high",
    "summary": "找到2个高度匹配的IT行业高才通B类成功案例您的条件浙大硕士+8年经验与案例主角非常接近匹配度较高。"
  },
  "timeline_reference": {
    "estimated_preparation": "1-2周",
    "estimated_processing": "4-6周",
    "estimated_total": "5-8周",
    "factors_affecting_timeline": [
      "材料准备的完整度直接影响审批速度",
      "申请高峰期可能延长1-2周",
      "百强大学认证通常不需要额外时间"
    ]
  }
}

场景 2无高匹配案例时的处理

Coordinator 调用

{
  "tool": "invoke_case_analyst",
  "input": {
    "userProfile": {
      "age": 45,
      "education": "大专",
      "industry": "传统制造业",
      "yearsOfExperience": 20
    },
    "targetCategory": "QMAS",
    "focus": "overcoming_weakness"
  }
}

内部执行

Turn 0: search_knowledge({query: "传统制造业 大专 40多岁 优才计划 成功案例", category: "QMAS"})
→ 0 条直接匹配
Turn 1: search_knowledge({query: "大专学历 优才计划 成功案例 经验丰富"})
→ 1 条弱相关案例
→ 如实返回低匹配结果

返回结果

{
  "matched_cases": [
    {
      "case_title": "制造业高管 优才计划获批",
      "profile_summary": "42岁本科学历制造业20年经验担任工厂副总经理年薪80万",
      "category": "QMAS",
      "similarity_score": 45,
      "similarities": [
        "同为制造业从业者",
        "工作年限相近20年",
        "年龄接近42 vs 45"
      ],
      "differences": [
        "案例为本科(用户为大专)",
        "案例有高管头衔",
        "案例年薪较高"
      ],
      "key_success_factors": [
        "20年行业深耕强调管理经验和行业贡献",
        "持有多项行业专利和资质证书",
        "在申请材料中突出了企业经营业绩"
      ],
      "timeline": {
        "preparation": "约4周需额外准备补充材料",
        "application": "1天",
        "approval": "约10周",
        "total": "约15周"
      },
      "source": {
        "title": "制造业人才优才申请经验分享",
        "article_id": "case-qmas-mfg-001"
      }
    }
  ],
  "similarity_analysis": {
    "best_match_score": 45,
    "average_score": 45,
    "match_quality": "low",
    "summary": "知识库中与您条件高度匹配的案例较少。找到1个同行业案例作为参考但该案例的学历和职位层级与您有差异。建议通过详细评估确认最优路径。"
  },
  "timeline_reference": {
    "estimated_preparation": "4-6周可能需要额外补充材料",
    "estimated_processing": "9-12周",
    "estimated_total": "3-4个月",
    "factors_affecting_timeline": [
      "大专学历可能需要额外的经验证明材料",
      "需要突出工作成果和行业贡献弥补学历短板",
      "建议准备推荐信增加申请说服力"
    ]
  }
}