diff --git a/docs/AI陪练二期开发推进计划.md b/docs/AI陪练二期开发推进计划.md new file mode 100644 index 00000000..223f4f84 --- /dev/null +++ b/docs/AI陪练二期开发推进计划.md @@ -0,0 +1,392 @@ +# AI 陪练二期开发推进计划 + +> 版本:v0.2 | 日期:2026-07-06 +> 输入源:《AI陪练功能优化与缺口分析(修订版 · 2026-07-06)》+《物业行业 AI 人力资源系统 · BRD v1.1》。 +> v0.2 修订:与两份输入源逐项复核后补齐 6 处缺漏——#6/#9/#16/师徒演练的明确处置(§2)、#13 定向再练的里程碑落点(M4)、画像雷达图与 BRD L1「留」段验收承载(M4)、TechSpec P1 表映射与岗位身份前置(M1)、场景管理权限口径(M1/§7)、G6 成本上限量化(§7)。 +> 结论:二期不做“24 个缺口全量铺开”,先把 AI 陪练从 MVP 演示闭环推进到**生活顾问岗位试点可用**。 + +## 1. 二期目标 + +二期的交付主题是:围绕“生活顾问”岗位,把 AI 陪练做成可训练、可复盘、可派发、可衡量的“数字师傅”训练闭环。 + +业务上承接 BRD 的“育 / 用 / 留”三段: + +| BRD 主线 | 二期落点 | +|---|---| +| 用 | 岗位 SOP 与训练场景绑定,训练前给预习卡和红线话术 | +| 育 | 语音对手戏、多场景训练、求助、打断纠偏、训练记录 | +| 留 | 画像扩展、复盘标注、主管预警、定向再练 | + +二期不追求招聘、薪酬、绩效、知识图谱、原生 APP 的全量扩张。AI 分数仍定位为“辅助参考,人可否决”。 + +## 2. 范围切割 + +### 必做 + +| 工作包 | 覆盖缺口 | 价值 | +|---|---|---| +| 场景地基 | #1 #2 #3 #13 #17 #19 | 把代码 seed 迁到表,让岗位、场景、分发可运营 | +| 对练体验增强 | #4 #5 #7 #8 #10 | 训练前有准备、训练中有情绪变化和纠偏、语音体验更像真实业主 | +| 复盘与记录 | #11 #12 #14 #20 | 训练后能回放、标注、人工校准,形成可复盘资产 | +| 画像与主管侧 | #15 #17 #19 | 员工看成长,主管看风险并派专项 | +| 数据治理底线 | #22 #23 | Rubric 有版本,文本入库前脱敏,为试点和合规留余地 | + +### 暂缓 + +| 暂缓项 | 原因 | +|---|---| +| 实时主管旁听(#18) | WebSocket + 低延迟音频工程量大;先做事后回放 | +| 录像存储 | 涉员工隐私和 G3/G4,二期只存录音 | +| 完整离线对练(#24) | 无 LLM 不可离线;只做 SOP/预习/题目缓存 | +| 纯视觉向量检索 | 依赖素材规模和供应商合规;现有关键帧 caption 已可覆盖大部分检索 | +| 原生 APP、SSO、知识图谱、绩效挂钩 | BRD 已明确为二期后或生产闸门项 | +| 图片/视频情境输入(#9) | BRD 4.3.3 明列(拍照报修),vision 模型已就绪;但场景素材是瓶颈,待 12 条文本场景跑稳后独立评估,可与 B3 文生图联动 | +| 环境噪音模拟(#6) | 前端混音成本不高但非试点闭环必需;噪音音源授权未解决 | +| 自动案例沉淀(#16) | 挂 BRD 4.6/4.7 共创与 review_task 审核链;二期只保证"贡献度"有人工计分入口(见 M4),自动沉淀待案例量起来再评估 | +| 师徒演练(BRD 4.4) | 依赖 mentor_assignment(P1)与真人师父运营;二期由"主管复盘 + 派发"承载师徒最小语义 | +| 动态难度调级(#1 后半 / BRD 4.5) | 场景表保留 difficulty 字段即可;自动升降级依赖画像数据稳定,分发规则 v1 不做 | + +## 3. 技术路线 + +### 3.1 数据地基先行 + +二期第一优先级是把训练运营对象落库。当前现状是 2 个 seed 场景 + `aihr_practice_session` 汇总表,足够演示,不够试点。 + +建议新增或补齐以下表,统一使用 `aihr_*` 前缀: + +| 表 | 用途 | +|---|---| +| `aihr_practice_scenario` | 训练场景、岗位、项目类型、难度、人设、SOP 绑定 | +| `aihr_practice_rubric` / `aihr_practice_rubric_dimension` | Rubric 版本、维度、权重、启停 | +| `aihr_practice_assignment` | 主管/规则引擎派发每日小训、专项训练 | +| `aihr_practice_annotation` | finish 后逐句标注、好/差示例、证据 turn | +| `aihr_practice_calibration` | 人工修正评分,沉淀一致率校准集 | +| `aihr_practice_audio` 或 `audio_oss_id` 字段 | 对练录音 MinIO/sys_oss 回放 | + +注意:旧 TechSpec 中出现过 `practice_scenario` 等无前缀名称,二期实现时应同步修正文档或在 DDL 中明确采用 `aihr_practice_*`,避免和若依/未来模块冲突。 + +与 TechSpec P1 表的映射(不另建平行体系): + +- `aihr_practice_assignment` 吸收 `daily_drill`(每日一练)与 `training_camp`(专项训练营)的语义,用 `source`(daily/camp/retry/manual)+ `reason` 字段区分来源,不再单独建这两张表。 +- `mistake_book`(错题本)语义由“低分维度 → 定向再练派发”承载(见 M4),`assignment.source='retry'` 即错题重练记录。 +- 跨期五维画像仍走 TechSpec M6 的 `competency_assessment`,本计划只做单场四维分与四项画像聚合,勿与跨期评估混成一个数(BACKLOG B5 口径)。 + +### 3.2 复用现有能力 + +- 语音识别继续复用 `POST /api/ai/asr`,不新建移动端专用 ASR。 +- TTS 继续复用 `POST /api/ai/tts`,二期把 `voice` 扩成 `voice_profile`。 +- 文件与录音存储复用 `sys_oss` + MinIO。 +- SOP 求助复用 `/api/knowledge/search` 和 `/api/knowledge/summary-card`。 +- 模型配置继续走 `aihr_model_config` 的 `chat/vector/rerank/asr/tts/vision` 分类。 +- 员工端训练仍复用 `/api/train/practice/start|turn|finish`,不要另起一套移动端训练后端。 + +## 4. 里程碑计划 + +### M0. 二期基线冻结(2 天) + +目标:确认二期不再追 MVP 演示壳,而是追试点可用闭环。 + +- 锁定首个岗位:生活顾问。 +- 锁定首批场景:投诉处理、催费/停车费、报修跟进、突发求助。 +- 每类至少 3 条场景,二期首批共 12 条。 +- 每条场景必须有:人设、开场、成功条件、雷点/爽点、SOP 引用、Rubric。 +- 明确试点指标:20 名员工、每人 10 次对练、完训率 80%、满意度 4/5。 + +验收: + +- `docs/BACKLOG.md` 和本计划无冲突。 +- 内容负责人能提供或确认 12 条场景素材。 +- 开发不再把“实时旁听、录像、知识图谱、原生 APP”拉进二期。 + +### M1. 场景与 Rubric 地基(第 1-2 周) + +目标:让“场景管理”和“评分标准版本”从代码 seed 变成可运营数据。 + +后端: + +- `backend/script/sql/aihr_practice_mysql8.sql`:补二期表或新增同目录二期 DDL。 +- `backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrPracticeDto.java`:补 scenario/rubric/assignment DTO。 +- 新增 `AihrPracticeScenarioService` 或扩展 `AihrPracticeSeedService`:优先读表,失败回退 seed。 +- `AihrPracticeController`:新增场景列表、详情、保存、启停、Rubric 查询接口。 +- `scripts/reset-dev-db.sh`:导入新 DDL 和 12 条生活顾问 seed。 + +管理端: + +- `frontend/src/api/aihr/practice.ts`:补场景/Rubric API。 +- `frontend/src/views/train/practice.vue`:先加轻量场景选择和 Rubric 预览,不做复杂 CRUD。 + +移动端: + +- `mobile/src/App.vue`:“开始训练”根据岗位/今日安排传 `scenarioId`,没有数据时回退当前 seed。 + +验收: + +- 管理端能选择不同生活顾问场景并开始对练。 +- API 可返回场景绑定的 SOP、Rubric、persona。 +- 模型失败或表为空时,原 MVP 对练仍可跑。 +- 场景 CRUD 接口挂 `hr_operator` 角色权限(BACKLOG B1“出题”职责),普通员工端只读。 +- 员工进入训练时能按登录身份取到岗位(`position`),场景列表按岗位过滤——这是 M4 派发与分发规则的身份前置。 + +### M2. 训练前与训练中增强(第 3-4 周) + +目标:把体验从“回合制答题”推进到“有准备、有情绪、有求助”的语音对手戏。 + +功能: + +- 训练前预习卡:从场景 SOP 生成“要点 / 红线 / 可说话术”。 +- 每轮 emotion 由 LLM 输出并落入 turn/session,不再只用 seed 锚点。 +- 求助按钮:训练中弹出该场景 SOP 提示,记录一次求助事件。 +- 主动打断:COACH_CHECK 命中红线时中断本轮,提示纠正后重来。 +- 方言/多语气:先支持 `voice_profile.speed/emotion/dialect`,不做语音克隆。 + +文件落点: + +- `AihrPracticeLlmService.java`:扩展 turn 输出 JSON,包含 `emotion/trustDelta/redFlag/coachHint`。 +- `AihrPracticeSeedService.java`:seed fallback 也返回同样字段。 +- `AihrSpeechDto.java` / `AihrSpeechService.java`:扩展 TTS voice 参数,保留旧字符串兼容。 +- `frontend/src/views/train/practice.vue`:加预习卡、情绪条、求助按钮、红线提示。 +- `mobile/src/App.vue`:复用训练前卡和求助逻辑,语音失败仍退文本。 + +验收: + +- 员工开始训练前能看到该场景预习卡。 +- 至少 3 条场景能看到情绪随话术变化。 +- 求助按钮命中 SOP 并显示引用。 +- 红线话术触发纠偏,但不在训练中做逐句评分。 + +### M3. 录音回放与复盘标注(第 5 周) + +目标:训练完成后能复盘,但不做实时旁听。 + +功能: + +- 训练中员工音频和 TTS 音频按需存 MinIO,记录 `oss_id`。 +- 主管复盘详情展示音频回放。 +- finish 后对整场 dialogue 做一次性逐句标注,输出“问题句 / 推荐改写 / 命中或漏掉的 SOP 点”。 +- 标杆对话先用导师改写生成“更优示例”,不等案例库自然积累。 + +文件落点: + +- `backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrPracticeSeedService.java`:保存 session 时写 audio/annotation 信息。 +- 新增 `AihrPracticeReviewService.java`:生成和查询逐句标注。 +- `AihrMobileController.java`:复盘详情返回 audio 和 annotations。 +- `mobile/src/App.vue`:主管复盘详情增加回放和逐句标注区。 + +验收: + +- 完成一场训练后,主管端能打开回放。 +- 逐句标注只在 finish 后生成一次,刷新不重复算分。 +- 没有录音权限时仍保存文本 transcript。 + +### M4. 画像、校准与主管派发(第 6-7 周) + +目标:把训练结果变成员工成长与主管管理动作。 + +功能: + +- 员工画像扩展为四项:训练时长、贡献度、测评分、AI 等级(BACKLOG B5;贡献度二期用人工计分入口记 `incentive_point`,不做自动案例沉淀)。 +- 员工端画像以雷达图 + 趋势呈现单场四维分聚合(BRD 4.5 可视化口径,数据留跨期 `competency_assessment` 的入口)。 +- 主管端预警:连续低分、超期未训、分数下滑。 +- 批量训练任务派发:主管按岗位/短板派发专项。 +- 定向再练(#13):低分维度自动生成 `source='retry'` 的待训任务,员工“今日安排”可见——错题本语义的最小实现。 +- 人工评分校准:HR/主管可修正 AI 评分,形成校准集。 +- 训练数据脱敏:入库前处理姓名、手机号、房号等明显 PII。 + +文件落点: + +- `AihrMobileSeedService.java`:扩展 `profile()` 聚合。 +- `AihrMobileDto.java`:补画像、预警、派发 DTO。 +- `AihrMobileController.java`:新增/扩展主管预警、派发接口。 +- `frontend/src/views/train/practice.vue` 或新增管理端页:提供人工校准入口。 +- `mobile/src/App.vue`:员工画像和主管待办展示新增字段。 + +验收: + +- 员工端能看到四项画像,不做同侪排名。 +- 主管端能看到待处理预警并派发训练。 +- 低分场景完成后,员工待训列表出现对应的再练任务。 +- 人工修正评分后,保留原 AI 分和修正分。 +- 入库文本中明显手机号/房号被脱敏。 + +### M5. 试点收口(第 8 周) + +目标:二期可进入 1-2 个住宅项目小范围试点。 + +验收清单: + +- 生活顾问 12 条场景可用。 +- 员工从“今日安排”进入训练,完成后画像和主管端同步。 +- 主管能复盘、听录音、看逐句标注、派发专项。 +- AI 与人工评分分档一致率用不少于 20 条样本评估,目标 ≥70%。 +- 住宅类 SOP 问答人工评审可用率目标 ≥80%。 +- 语音单轮响应目标 ≤5 秒;超过时有文本降级。 +- 试点数据可导出:训练次数、完训率、平均分、预警数、主管复盘率。 + +## 5. 二期 API 建议 + +| 能力 | 接口 | +|---|---| +| 场景列表 | `GET /api/train/practice/scenarios?position=&scenarioType=` | +| 场景详情 | `GET /api/train/practice/scenarios/{id}` | +| 保存场景 | `POST /api/train/practice/scenarios` | +| Rubric 版本 | `GET /api/train/practice/rubrics?scenarioId=` | +| 训练预习卡 | `GET /api/train/practice/scenarios/{id}/prep-card` | +| 逐句标注 | `POST /api/train/practice/sessions/{sessionId}/annotations` | +| 评分校准 | `POST /api/train/practice/sessions/{sessionId}/calibration` | +| 主管预警 | `GET /api/aihr/mobile/practice/alerts` | +| 派发训练 | `POST /api/aihr/mobile/practice/assignments` | +| 员工待训 | `GET /api/aihr/mobile/practice/assignments` | + +这些接口都应保留 seed fallback 或空数据兜底,但真实验收必须以数据库链路为准。 + +## 6. 内容准备清单 + +二期能不能推进,最大风险不是代码,是场景内容。每个场景至少准备: + +| 字段 | 示例 | +|---|---| +| 岗位 | 生活顾问 | +| 场景类型 | 投诉 / 催费 / 报修 / 突发求助 | +| 业主人设 | 年龄、身份、说话风格、情绪、偏见 | +| 开场白 | “你们物业到底管不管楼上噪音?” | +| 显性诉求 | 投诉噪音 | +| 隐性诉求 | 想确认物业是否愿意持续跟进 | +| 雷点 | 被敷衍、先讲规定、推给业主自己协调 | +| 爽点 | 先共情、给首次反馈时间、明确责任人 | +| SOP 引用 | 对应知识库片段 ID | +| Rubric | 合规、沟通、情绪、营销四维权重 | +| 标杆话术 | 1 条优秀版本、1 条反例 | + +## 7. 决策待确认 + +| 决策 | 推荐口径 | +|---|---| +| 二期时长 | 8 周,每两周一个可验收增量 | +| 首个岗位 | 生活顾问,四保一服后置 | +| 录音合规 | 二期只录音不录像;进入训练前给明确提示 | +| 方言/TTS | 先扩 `voice_profile`,不做克隆;供应商稳定后再评估克隆 | +| AI 排序 | 分发引擎 v1 用规则表,不上 AI 排序 | +| 排名 | 先做自我对比和主管预警,不做同侪排名 | +| 场景管理权限 | 场景/Rubric CRUD 归 `hr_operator` 与管理员;主管只派发不编场景 | +| G6 成本上限 | 试点期设 LLM/ASR/TTS 月度调用金额上限与告警阈值(具体数额由 HR 负责人与供应商账单确认);超限降级为文本对练 + 关闭逐句标注 | + +## 8. 主要风险 + +| 风险 | 控制 | +|---|---| +| 内容不足 | M0 先锁 12 条生活顾问场景,内容没到位不进 M2 | +| 移动端过大 | M1 同步拆 `mobile/src/App.vue` 的训练/画像/主管面板,不继续堆单文件 | +| 成本失控 | 逐句标注只在 finish 后一次性做;总结卡/视频按需触发 | +| 评分争议 | 原 AI 分和人工修正分并存;AI 分不挂绩效 | +| 隐私问题 | 只做录音,不做录像;文本脱敏;音频存储权限明确 | +| 范围膨胀 | 实时旁听、原生 APP、知识图谱、纯视觉检索全部不进二期主线 | + +## 9. 交付物 + +| 类型 | 交付 | +|---|---| +| 产品 | 员工端训练前卡、语音对手戏、求助、回放、画像;主管端复盘、预警、派发 | +| 后端 | 场景/Rubric/Assignment/Annotation/Calibration 数据与 API | +| 管理端 | 场景选择/轻管理、Rubric 预览、评分校准 | +| 内容 | 12 条生活顾问场景、SOP 引用、Rubric、标杆话术 | +| 验收 | 20 条评分校准样本、试点数据导出、演示脚本更新 | + +## 10. 第一批实施任务 + +### Task 1: 二期 DDL 与 seed + +**Files** + +- Modify: `backend/script/sql/aihr_practice_mysql8.sql` +- Modify: `scripts/reset-dev-db.sh` +- Verify: `./scripts/dev.sh --reset` + +**Steps** + +- [ ] 增加 `aihr_practice_scenario`、`aihr_practice_rubric`、`aihr_practice_rubric_dimension`。 +- [ ] 写入 12 条生活顾问场景 seed。 +- [ ] reset 后确认场景表和 rubric 表有数据。 + +### Task 2: 场景读取替换 seed + +**Files** + +- Modify: `backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrPracticeDto.java` +- Modify: `backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrPracticeSeedService.java` +- Modify: `backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrPracticeController.java` + +**Steps** + +- [ ] `start` 优先按 `scenarioId` 读数据库场景。 +- [ ] 数据库无场景时回退现有 seed。 +- [ ] `turn/finish` 保持当前契约不破坏前端。 + +### Task 3: 训练前卡和求助 + +**Files** + +- Modify: `frontend/src/api/aihr/practice.ts` +- Modify: `frontend/src/views/train/practice.vue` +- Modify: `mobile/src/App.vue` +- Reuse: `POST /api/knowledge/search` + +**Steps** + +- [ ] 开始训练前展示场景预习卡。 +- [ ] 训练中加“求助”入口,用场景 category/SOP 引用查知识库。 +- [ ] 求助失败显示明确错误,不兜假答案。 + +### Task 4: 动态情绪和红线纠偏 + +**Files** + +- Modify: `backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrPracticeLlmService.java` +- Modify: `backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrPracticeDto.java` +- Modify: `frontend/src/views/train/practice.vue` +- Modify: `mobile/src/App.vue` + +**Steps** + +- [ ] LLM turn 输出增加 `emotion/trust/redFlag/coachHint`。 +- [ ] 前端展示情绪条和红线纠偏。 +- [ ] 解析失败时回退现有 coachHint,不阻断训练。 + +### Task 5: 回放与逐句标注 + +**Files** + +- Modify: `backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSpeechService.java` +- Modify: `backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrPracticeSeedService.java` +- Modify: `backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrMobileController.java` +- Modify: `mobile/src/App.vue` + +**Steps** + +- [ ] 对练音频写 `sys_oss`/MinIO 并关联 session。 +- [ ] 主管复盘详情显示音频回放。 +- [ ] finish 后生成逐句标注,刷新不重复生成。 + +### Task 6: 画像与主管派发 + +**Files** + +- Modify: `backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrMobileSeedService.java` +- Modify: `backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/vo/AihrMobileDto.java` +- Modify: `backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrMobileController.java` +- Modify: `mobile/src/App.vue` + +**Steps** + +- [ ] 画像补训练时长、贡献度、测评分、AI 等级。 +- [ ] 主管端补预警列表。 +- [ ] 主管可派发专项训练,员工端今日安排可见。 + +## 11. 二期完成定义 + +二期完成不是“所有缺口清零”,而是满足以下条件: + +- 生活顾问岗位训练从 seed 演示变成数据库驱动。 +- 员工能完成“预习 → 语音/文本训练 → 求助 → 评分 → 复盘”的闭环。 +- 主管能完成“看风险 → 听回放 → 看标注 → 派专项”的闭环。 +- 画像能支撑“下一步练什么”的规则分发。 +- 试点所需的合规、成本、人工校准底线已经留好。