用途:为工作区检测最合适的用户画像,以个性化 Alex 体验,包括侧边栏品牌、技能建议和 Active Context 配置。归属为可继承(VS Code heir),通过 persona、know your customer、project type detection、welcome screen、sidebar persona 触发。
主要能力:采用优先级链检测,从高到低依次为 Focus(活跃番茄钟主题,置信度0.95)、Goal(goals.json 中的会话目标,0.85)、Phase(ROADMAP 阶段关键词,0.75)、Project Goals(user-profile.json 学习目标,0.70)、Profile Cache(缓存 projectPersona,7天内)、Profile + Workspace(技术栈、专长、文件结构评分)、Default(开发者回退,0.50)。检测在首个可信匹配处停止,低优先级仅在高优先级返回 null 时运行。
可用画像包括:developer、academic、researcher、technical-writer、architect、data-engineer、devops、content-creator、fiction-writer、game-developer、project-manager、security、student、job-seeker、presenter、power-user。
工作区评分采用三种模式:Path(含 /,需用 fs.pathExists() 确认目录存在)、Extension(以 . 开头,对工作区条目做 endsWith())、Filename(精确不区分大小写集合查找)。规则强调不得对工作区模式使用双向子串匹配,以免误判。
LLM 检测路径:调用 detectAndUpdateProjectPersona()(初始化/升级)时,从文件结构检测技术、收集项目上下文、发送结构化提示给 LLM(优先 GPT-4o > Claude Sonnet > 任意),解析 JSON 响应匹配或创建动态画像,保存为 user-profile.json 的 projectPersona,并通过 updatePersona() 更新 Active Context 的 persona 字段。
Active Context 会更新 persona 名称与置信度;Focus Trifectas 不在此过程自动分配,而是独立管理,因为 persona 是“用户是谁”(按项目),Focus 是“当前在做什么”(按会话)。欢迎视图显示置信度百分比和检测来源。
新增画像需在 personaDetection.ts 的 PERSONAS 数组添加字段,将画像 ID 加入 LLM 提示的 personaId 枚举,在 welcomeView.ts 的 skillNameMap 添加技能,并确保 .github/skills/ 存在匹配技能。已知问题包括 .github/ 子串匹配导致误判、缓存过期,已通过路径存在性检查、移除噪声信号和 7 天过期机制修复。限制:依赖工作区文件、LLM 可用性与缓存策略,具体支持平台与收费暂未提供。