feat: complete aihr mvp mobile workflow
This commit is contained in:
@@ -1,31 +1,31 @@
|
||||
# AI 人力资源系统 · 一期 Demo 作战清单
|
||||
# AI 人力资源系统 · 一期 MVP 版作战清单
|
||||
|
||||
> 版本:v1.8 | 日期:2026-07-03
|
||||
> 用途:一份纸面作战图,支撑「2026-07-05 周日出可跑 Demo、2026-07-06 周一给大老板演示」,同时说清「做了什么、没做什么、为什么」。
|
||||
> 用途:一份纸面作战图,支撑「2026-07-05 周日出可跑 MVP 演示、2026-07-06 周一给大老板演示」,同时说清「做了什么、没做什么、为什么」。
|
||||
> 收敛来源:原《物业管家与生活顾问 AI 陪练系统建设方案》+ 一期实施方案(含 ch.14/15 选型评估)+ 2026-07-01 需求讨论纪要 + 数据资源模型主题域草案。
|
||||
> v1.1 变更:D1–D8 决策已定(见第 8 节),相关章节同步锁定;D9(验收标准)待定。
|
||||
> v1.2 变更:新增第 9 节「周末施工排期(2026-07-03 周五 / 2026-07-04 周六 / 2026-07-05 周日 · 2 人时间盒)」。
|
||||
> v1.3 变更:D9 已定,新增第 10 节「一期最小可验收承诺」。至此 D1–D9 全部闭环。
|
||||
> v1.4 变更:因 Demo 进度提前,新增 D10「资料中台提前加码」和第 11 节;MinIO、OSS-first 文档上传、Excel/PPT 解析进入当前施工线,图片智能分析列入下一阶段。
|
||||
> v1.4 变更:因 MVP 进度提前,新增 D10「资料中台提前加码」和第 11 节;MinIO、OSS-first 文档上传、Excel/PPT 解析进入当前施工线,图片智能分析列入下一阶段。
|
||||
> v1.5 变更:新增 D11「向量库与语义检索路线」和第 12 节;一期选 Qdrant,保留 MySQL Fulltext,制度/SOP 回答采用混合召回 + 重排序 + 引用约束。
|
||||
> v1.6 变更:Qdrant 本地编排和后端最小闭环已落地;上传后尽力 upsert 向量,检索时与 MySQL Fulltext 做 RRF 融合。
|
||||
> v1.7 变更:资料处理服务端目录导入已从同步 Demo 升级为后台任务,页面可轮询进度和按同目录重试。
|
||||
> v1.8 变更:补齐 D12「用户端最小闭环」和第 5.1 节;Demo 必须能从候选人/员工视角发起至少 1 条路径,但仍用 Web/H5,不做独立 APP。
|
||||
> v1.7 变更:资料处理服务端目录导入已从同步导入升级为后台任务,页面可轮询进度和按同目录重试。
|
||||
> v1.8 变更:补齐 D12「用户端最小闭环」和第 5.1 节;MVP 必须能从候选人/员工视角发起至少 1 条路径,用户端拆为独立 `mobile/` Web/H5 工程,但不做原生 APP。
|
||||
|
||||
---
|
||||
|
||||
## 0. 一页速览(TL;DR)
|
||||
|
||||
- **系统定位**:面向物业一线的「**选 · 用 · 育 · 留**」全生命周期 **AI 人力资源系统**(HR 老大提出、给大老板汇报)。原「AI 陪练」只是其中「育/用」一个模块。
|
||||
- **死线**:2026-07-05 周日出可演示 Demo,2026-07-06 周一演示。团队约 2 人,时间极紧。
|
||||
- **死线**:2026-07-05 周日出可演示 MVP,2026-07-06 周一演示。团队约 2 人,时间极紧。
|
||||
- **六条核心决议**:
|
||||
1. **基座 = 若依(RuoYi)**,非 aifei / PandaWiki / JeecgBoot / Yuxi;集中式前后端分离,非微服务。
|
||||
2. **数据模型 = 复用 Silverston《数据模型资源手册》卷1 HR 主干**(Party-Role 分离 + Product 目录承载 SOP 分层)。
|
||||
3. **组织/人员/登录复用外部系统**,本系统只做「消费 + 扩展」,不当主数据源头。
|
||||
4. **资料中台提前加码**:已知业务资料约 3GB,包含 PPT/图片/Excel/Word/PDF;一期不再只演示 seed SOP,要先把 MinIO + 文档入库 + 解析状态打底。
|
||||
5. **语义检索路线 = MySQL Fulltext + Qdrant + rerank**:MySQL/MinIO 仍是事实源,Qdrant 只做向量索引;制度/SOP 必须混合召回、重排序、带引用回答。
|
||||
6. **用户端必须显式进入 Demo**:管理端负责配置/审核/看结果;用户端负责候选人作答、员工对练、SOP 问答、案例上传。Demo 用 Web/H5 轻入口,不做独立 APP。
|
||||
- **头号风险**:从单纯「范围失控」升级为**用户端缺口、资料规模、解析质量、异步任务稳定性、语义检索准确率和引用一致性**。Demo 仍守住第 5 节切割线,资料中台按第 11/12 节分片推进。
|
||||
6. **用户端必须显式进入 MVP**:管理端负责配置/审核/看结果;用户端负责候选人作答、员工对练、SOP 问答、案例上传。MVP 用独立 `mobile/` Web/H5 轻入口,不做原生 APP。
|
||||
- **头号风险**:从单纯「范围失控」升级为**用户端缺口、资料规模、解析质量、异步任务稳定性、语义检索准确率和引用一致性**。MVP 仍守住第 5 节切割线,资料中台按第 11/12 节分片推进。
|
||||
|
||||
---
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
**明确移出一期范围(已定)**:
|
||||
- 内容营销中心(原第七章):属营销/获客,与 HR 无关 → ✅ **一期砍除**(D5)。
|
||||
- 独立语音 APP(豆包式):愿景,非交付物 → ✅ **Demo 用 Web**,APP 进二期(D6)。
|
||||
- 独立语音 APP(豆包式):愿景,非交付物 → ✅ **MVP 用 Web**,APP 进二期(D6)。
|
||||
- 双图谱知识图谱(Neo4j):冷启动成本高 → ✅ **一期先 RAG**,图谱降级二期(D4)。
|
||||
|
||||
---
|
||||
@@ -85,7 +85,7 @@
|
||||
|
||||
**两条关键建模决定**:
|
||||
- **Party-Role 分离**:一个人在全生命周期里依次/同时是候选人→新员工→学员→师父→考官,用 Party + Role,不为每种身份建表。
|
||||
- **SOP 用 Product-Category 层级 + Applicability 承载**:大类/中类/小类/行业 × 住宅/公建/景区。Demo 只填住宅类,其余预留结构。
|
||||
- **SOP 用 Product-Category 层级 + Applicability 承载**:大类/中类/小类/行业 × 住宅/公建/景区。MVP 只填住宅类,其余预留结构。
|
||||
- **关系库 vs 向量库切分**:元数据/权限/版本/正文片段事实源落 MySQL,原始文件落 MinIO,Qdrant 只存向量索引与最小 payload;MySQL Fulltext 保留做精确关键词召回。
|
||||
|
||||
---
|
||||
@@ -94,7 +94,7 @@
|
||||
|
||||
**「复用采购系统用户体系」= 三件独立的事,别混为一谈**:
|
||||
|
||||
| 事项 | 含义 | Demo 处置 |
|
||||
| 事项 | 含义 | MVP 处置 |
|
||||
|---|---|---|
|
||||
| ① 认证 / SSO | 用户怎么登录本系统 | ✅ 已定(D2):**本地账号**登录;SSO 留二期对接项 |
|
||||
| ② 权限映射 | 外部岗位/组织 → 本地角色 | 本地建映射表 |
|
||||
@@ -121,9 +121,9 @@
|
||||
|
||||
## 5. MVP 三分切割线(核心作战图)⭐
|
||||
|
||||
> 规则:**2026-07-05 Demo 只做「英雄路径 + 壳」,其余明确归入一期或推迟。任何超出「2026-07-05 Demo」列的东西,在 Demo 冲刺期即刻砍掉。**
|
||||
> 规则:**2026-07-05 MVP 演示只做「英雄路径 + 壳」,其余明确归入一期或推迟。任何超出「2026-07-05 MVP 演示」列的东西,在冲刺期即刻砍掉。**
|
||||
|
||||
### 🔴 2026-07-05 Demo 必做(阻塞项)
|
||||
### 🔴 2026-07-05 MVP 演示必做(阻塞项)
|
||||
|
||||
| # | 事项 | 交付标准 |
|
||||
|---|---|---|
|
||||
@@ -136,31 +136,32 @@
|
||||
| 7 | 方言语音 | 选 1 家 ASR/TTS 厂商,跑通 1 条语音路径 |
|
||||
| 8 | 演示脚本 | 一页故事线:点开顺序 + 每屏一句价值(服务于 HR 老大邀功叙事) |
|
||||
| 9 | 前端壳 | 全功能点可点开(AI 出图 + 若依脚手架批量生成),英雄路径精做 |
|
||||
| 10 | 用户端轻入口 | Web/H5 同前端提供候选人/员工入口;演示时至少从用户端完成 1 条路径,管理端只负责配置和看结果 |
|
||||
| 10 | 用户端轻入口 | 独立 `mobile/` Web/H5 工程提供候选人/员工/主管入口;演示时至少从用户端完成 1 条路径,管理端只负责配置和看结果 |
|
||||
|
||||
### 5.1 用户端最小切割线(新增 D12)
|
||||
|
||||
> 结论:没有用户端,Demo 会变成 HR 后台管理系统,无法证明一线员工/候选人真的能用。用户端要补,但只补 Web/H5 轻入口,不新建独立 APP。
|
||||
> 结论:没有用户端,MVP 会变成 HR 后台管理系统,无法证明一线员工/候选人真的能用。用户端要补,并拆成独立 `mobile/` Web/H5 工程,但不新建原生 APP。
|
||||
|
||||
| 端/角色 | 2026-07-05 Demo 必做 | 一期内补 | 明确推迟 |
|
||||
| 端/角色 | 2026-07-05 MVP 演示必做 | 一期内补 | 明确推迟 |
|
||||
|---|---|---|---|
|
||||
| 管理端(HR/管理员/教练) | 配置内容、查看记录、查看评分/处理状态 | Rubric 配置、任务分派、审核流 | 多组织复杂工作流 |
|
||||
| 候选人端 | 打开面试入口 → 听/看题 → 作答 → 提交 → 生成面试记录 | 面试邀请、历史记录、人工复核状态 | 外部招聘系统深度集成 |
|
||||
| 员工/学员端 | 打开今日任务 → 三角色对练 / SOP 问答 / 案例上传 至少跑通 1 条 | 学习路径、错题本、能力雷达、认证进度 | 独立 APP、企微/钉钉深度集成、消息推送 |
|
||||
| 员工/学员端 | 打开今日任务 → 三角色对练 / SOP 问答 / 案例上传 至少跑通 1 条 | 学习路径、错题本、能力雷达、认证进度 | 原生 APP、企微/钉钉深度集成、消息推送 |
|
||||
|
||||
**实现边界**:
|
||||
- 复用现有 Vue 前端,用独立路由/菜单/演示入口区分用户端;不新建第二套前端工程。
|
||||
- Demo 可用本地账号或 mock token,但演示脚本必须从「用户端发起 → 管理端看结果」走一遍。
|
||||
- 用户端使用独立 `mobile/` Vue/Vite Web/H5 工程,与管理端 `frontend/` 分离;MVP 不做原生 APP。
|
||||
- MVP 用户端走手机号短信登录;新手机号验证码通过后自动注册为 `app_user`。演示脚本必须从「用户端发起 → 管理端看结果」走一遍。
|
||||
- 当前员工端已用“投诉接待三角色对练”跑通移动端训练闭环:两轮提交后自动评分,记录落 `aihr_practice_session`,并同步更新主管端完训人数、待复盘列表、复盘详情、标记已复盘状态和员工能力画像。
|
||||
- 用户端只做「能完成任务」,不做复杂个人中心、社交、积分商城。
|
||||
|
||||
### 🟡 一期内做(Demo 后)
|
||||
### 🟡 一期内做(MVP 演示后)
|
||||
|
||||
数据地基:补全 HR 主干实体(#10)、关系/向量切分(#11)、招聘域(#12)、SOP 多层分类(#13)、Rubric 可配置(#14)、版本管理(#15)、ID 规约(#16)、数据范围字段(#17)、训练事务+学习路径(#18)。
|
||||
能力与运营:LLM/ASR/视频运营成本测算(#23)、内容贡献激励+署名(#25)、Agent 落点标注(#33)、认证/晋升/绩效规则引擎(#34)。
|
||||
|
||||
### ⚪ 明确推迟(现在不做)
|
||||
|
||||
内容营销中心、独立 APP、知识图谱、实时同步、企业微信/钉钉深度集成、脱敏审计、AI 分数挂钩绩效/晋升 —— 均见第 7 节闸门或第 8 节决策。
|
||||
内容营销中心、原生 APP、知识图谱、实时同步、企业微信/钉钉深度集成、脱敏审计、AI 分数挂钩绩效/晋升 —— 均见第 7 节闸门或第 8 节决策。
|
||||
|
||||
---
|
||||
|
||||
@@ -199,13 +200,13 @@
|
||||
| D3 | 大模型选型 | **公有大模型 API**(出境合规入闸门 G3/G6) | ✅ 已定 |
|
||||
| D4 | 知识图谱一期是否上 | **一期先 RAG**,图谱降二期 | ✅ 已定 |
|
||||
| D5 | 内容营销中心去留 | **一期砍除** | ✅ 已定 |
|
||||
| D6 | 独立 APP | **用 Web**,APP 进二期 | ✅ 已定 |
|
||||
| D6 | 原生 APP | **用独立 mobile/ Web/H5**,原生 APP 进二期 | ✅ 已定 |
|
||||
| D7 | 老文档 vs 新 HR 框架口径 | **综合统一成新的一版**(见下方跟进项 F1) | ✅ 已定 |
|
||||
| D8 | 企微/钉钉/工单集成深度 | **只列接口、不实现** | ✅ 已定 |
|
||||
| D9 | 一期验收标准 / 量化承诺 | **最小可验收承诺已定**(见第 10 节;C3 一致率 70%、试点 1–2 项目) | ✅ 已定 |
|
||||
| D10 | 资料中台是否提前建设 | **提前建设 MinIO + OSS-first 文档入库**;PDF/Word/Excel/PPT 先抽文本,图片智能分析进下一阶段 | ✅ 已定 |
|
||||
| D11 | 向量数据库与语义检索路线 | **一期选 Qdrant**;MySQL Fulltext 保留,制度/SOP 采用关键词 + 向量混合召回、rerank、引用约束;Milvus/Weaviate/pgvector 暂缓 | ✅ 已定 |
|
||||
| D12 | 用户端是否进入一期 | **必须进入**;Demo 用 Web/H5 轻入口,候选人/员工至少能发起 1 条英雄路径;独立 APP 和企微/钉钉深度集成推迟 | ✅ 已定 |
|
||||
| D12 | 用户端是否进入一期 | **必须进入**;MVP 用独立 `mobile/` Web/H5 轻入口,候选人/员工至少能发起 1 条英雄路径;原生 APP 和企微/钉钉深度集成推迟 | ✅ 已定 |
|
||||
|
||||
**由决策派生的跟进项**:
|
||||
- **F1(源自 D7)**:综合原《建设方案》+ 一期实施方案 + 本清单,产出**统一新版对外方案**(口径:选用育留 AI 人力资源系统)。
|
||||
@@ -217,7 +218,7 @@
|
||||
|
||||
## 9. 周末施工排期(2026-07-03 / 2026-07-04 / 2026-07-05 · 2 人时间盒)
|
||||
|
||||
> 把第 5 节 🔴 2026-07-05 Demo 10 项拆成两人施工单。**铁律:2026-07-05 不加新功能,只联调 + 精修 + 彩排。**
|
||||
> 把第 5 节 🔴 2026-07-05 MVP 演示 10 项拆成两人施工单。**铁律:2026-07-05 不加新功能,只联调 + 精修 + 彩排。**
|
||||
|
||||
**分工**:
|
||||
- **A = 技术**(若依骨架 / 后端 / 大模型 & 语音集成 / 评分逻辑)
|
||||
@@ -268,7 +269,7 @@
|
||||
|
||||
> 原则:验收只写**可判定**的东西——「是/否」或「可测量」。原方案的大 ROI 数字归入**愿景层,不作验收依据**。
|
||||
|
||||
### L0 · Demo 验收(2026-07-06 周一 · 过大老板)—— 全部「是/否」
|
||||
### L0 · MVP 演示验收(2026-07-06 周一 · 过大老板)—— 全部「是/否」
|
||||
|
||||
| # | 验收项 | 通过标准 |
|
||||
|---|---|---|
|
||||
@@ -324,7 +325,7 @@
|
||||
|
||||
- **合规上线**(脱敏/审计/业主 PII 出境评估)= 生产前闸门 **G3/G6**
|
||||
- **AI 分数挂钩绩效/晋升/招聘决策** = 推迟(**G1/G2**),一期只做「辅助参考」
|
||||
- 知识图谱、独立 APP、内容营销中心、多项目类型(公建/景区)、企微/钉钉深度集成、实时同步
|
||||
- 知识图谱、原生 APP、内容营销中心、多项目类型(公建/景区)、企微/钉钉深度集成、实时同步
|
||||
|
||||
### 愿景层(方向性目标,**不作为一期验收依据**)
|
||||
|
||||
@@ -334,7 +335,7 @@
|
||||
|
||||
## 11. 提前加码:资料中台施工线(v1.5)
|
||||
|
||||
> 背景:Demo 进度快于原计划,且已知业务资料约 3GB,包含 PPT、图片、Excel、Word、PDF。知识库不再只服务 SOP seed,而是要成为后续 RAG、文档解析、案例沉淀和 Chat 的公共入口。
|
||||
> 背景:MVP 进度快于原计划,且已知业务资料约 3GB,包含 PPT、图片、Excel、Word、PDF。知识库不再只服务 SOP seed,而是要成为后续 RAG、文档解析、案例沉淀和 Chat 的公共入口。
|
||||
|
||||
### 11.1 当前立刻做(L0+)
|
||||
|
||||
@@ -343,14 +344,14 @@
|
||||
| M1 | MinIO 本地对象存储 | `./scripts/dev.sh` 和 `--reset` 自动启动 MinIO,默认 bucket `ruoyi` 可用 |
|
||||
| M2 | OSS-first 文档上传 | 知识库上传先落 `sys_oss`,再绑定 `aihr_knowledge_attach.oss_id`,同名文档替换旧片段 |
|
||||
| M3 | 文档解析扩展 | 在现有 Tika 解析基础上支持 txt/md/PDF/Word/Excel/PPT 文本抽取 |
|
||||
| M4 | Demo 页面反馈 | 上传后在 SOP 知识库展示 OSS ID、片段数、状态,可立即检索命中 |
|
||||
| M4 | MVP 页面反馈 | 上传后在 SOP 知识库展示 OSS ID、片段数、状态,可立即检索命中 |
|
||||
|
||||
### 11.2 下一阶段(P1)
|
||||
|
||||
| # | 事项 | 处理 |
|
||||
|---|---|---|
|
||||
| M5 | 解析任务状态页 | 已接 `/knowledge/processing` 和 `GET /api/knowledge/processing/overview`;展示等待解析/解析中/已完成/失败、片段数、向量化状态、处理链路和最近事件 |
|
||||
| M6 | 3GB 资料批量导入 | 页面已支持多文件/浏览器目录选择批量导入 Demo 文件;已接 `POST /api/knowledge/doc/import-local-task` 从服务端导入根目录启动后台任务,并用 `GET /api/knowledge/doc/import-tasks` 轮询进度;当前重试粒度是同目录重跑,单失败文件重试/取消暂停仍待做 |
|
||||
| M5 | 解析任务状态页 | 已接 `/knowledge/processing` 和 `GET /api/knowledge/processing/overview`;展示等待解析/解析中/已完成/失败、片段数、向量化状态、处理链路和事件列表 |
|
||||
| M6 | 3GB 资料批量导入 | 页面已支持多文件/浏览器目录选择批量导入 MVP 样例文件;已接 `POST /api/knowledge/doc/import-local-task` 从服务端导入根目录启动后台任务,并用 `GET /api/knowledge/doc/import-tasks` 轮询进度;当前重试粒度是同目录重跑,单失败文件重试/取消暂停仍待做 |
|
||||
| M7 | 图片智能分析 | 图片先落 OSS,再用视觉模型/OCR 生成结构化描述入库;不伪装成普通文本解析 |
|
||||
| M8 | Qdrant 向量召回 | 已接 `qdrant` 本地服务;以 `aihr_knowledge_fragment` 为事实源 upsert 向量,与 MySQL Fulltext 双路召回后做 RRF 融合 |
|
||||
| M9 | 制度/SOP 精确回答 | 检索必须带租户/项目/分类/版本/生效日期过滤,回答必须引用片段;低置信不编造 |
|
||||
@@ -358,7 +359,7 @@
|
||||
### 11.3 明确不做
|
||||
|
||||
- 不整包迁移 `ruoyi-chat`;只迁 `ruoyi-aihr` 当前需要的 loader、任务和检索能力。
|
||||
- 不把 3GB 资料通过浏览器单次上传解决;浏览器上传只服务 Demo 和少量验证文件。
|
||||
- 不把 3GB 资料通过浏览器单次上传解决;浏览器上传只服务 MVP 和少量验证文件。
|
||||
- 不把图片智能分析做成假 OCR;没有视觉模型/OCR 结果就先标为待处理。
|
||||
|
||||
---
|
||||
@@ -433,7 +434,7 @@ flowchart LR
|
||||
|
||||
## 附录 A:35 条完整查漏登记(可追溯)
|
||||
|
||||
**第一层(Demo 阻塞)**:1 陪练英雄路径 · 2 内容冷启动 · 3 组织API未就绪 · 4 案例视频过重 · 5 登录/认证未定 · 6 大模型+出境合规 · 7 方言厂商未定 · 8 演示脚本 · 9 UI壳工作量 · 35 用户端入口缺口
|
||||
**第一层(MVP 演示阻塞)**:1 陪练英雄路径 · 2 内容冷启动 · 3 组织API未就绪 · 4 案例视频过重 · 5 登录/认证未定 · 6 大模型+出境合规 · 7 方言厂商未定 · 8 演示脚本 · 9 UI壳工作量 · 35 用户端入口缺口
|
||||
|
||||
**第二层(数据模型地基)**:10 HR主干抽全 · 11 关系/向量切分 · 12 招聘域空白 · 13 SOP多层分类 · 14 Rubric数据结构 · 15 版本管理 · 16 ID/主键策略 · 17 数据权限字段 · 18 训练事务+学习路径 · 19 知识图谱去留
|
||||
|
||||
@@ -445,4 +446,4 @@ flowchart LR
|
||||
|
||||
## 附录 B:一句话结论
|
||||
|
||||
> 现在真正的头号风险不是选型(若依已够),也不是要不要 aifei(不用),而是「用户端缺口」「Demo 范围」和「3GB 业务资料接入」三条线互相拖累。守住第 5 节的三分切割线,按第 5.1 节让用户端只做轻入口,同时按第 11 节把 MinIO、文档解析和批量导入拆开推进,按第 12 节把 Qdrant 作为向量索引而非事实源,才能既演得通、又不把资料中台做成临时脚本。
|
||||
> 现在真正的头号风险不是选型(若依已够),也不是要不要 aifei(不用),而是「用户端缺口」「MVP 范围」和「3GB 业务资料接入」三条线互相拖累。守住第 5 节的三分切割线,按第 5.1 节让用户端只做轻入口,同时按第 11 节把 MinIO、文档解析和批量导入拆开推进,按第 12 节把 Qdrant 作为向量索引而非事实源,才能既演得通、又不把资料中台做成临时脚本。
|
||||
+32
-9
@@ -11,6 +11,9 @@
|
||||
| 案例沉淀 `/knowledge/cases` | `POST /api/knowledge/case/upload`、`/organize`、`/curate` | 已接入 seed API |
|
||||
| SOP知识库 `/knowledge/sop` | `POST /api/knowledge/search`、`POST /api/knowledge/doc/upload` | 已接入 MySQL Fulltext + Qdrant 混合召回、OSS-first 文档上传、txt/md/PDF/Word/Excel/PPT 解析和 embedding 写入,失败回退 seed |
|
||||
| 资料处理 `/knowledge/processing` | `GET /api/knowledge/processing/overview`、`POST /api/knowledge/doc/import-local-task`、`GET /api/knowledge/doc/import-tasks`、复用 `POST /api/knowledge/doc/upload` | 已接入解析任务状态聚合;页面支持多文件/目录选择、服务端后台目录导入和进度轮询,失败回退 seed |
|
||||
| 移动端手机号登录 | `GET /resource/sms/code`、`POST /auth/mobile/sms-login` | 已复用 sms4j 阿里云配置 `config1` 和 RuoYi `sms` 授权策略;短信发送成功后才写 Redis 验证码;手机号不存在时自动注册 `app_user` |
|
||||
| 移动端三端首页 `/h5/user`、`/h5/candidate`、`/h5/supervisor` | `GET /api/aihr/mobile/home/{role}` | 已接入员工、候选人、主管首页 seed API;移动端本地 fallback 保演示 |
|
||||
| 移动端员工训练闭环 | 复用 `POST /api/train/practice/start`、`/turn`、`/finish`;查询 `GET /api/aihr/mobile/practice/history`、`/practice/reviews`、`/practice/reviews/{id}`、`/profile`;标记 `POST /api/aihr/mobile/practice/reviews/{id}/reviewed` | 员工端登录后带 `Authorization` 与 `clientid` 调用;`mode=mobile` 完成后写入 `aihr_practice_session`,主管端首页完训率、待复盘列表、复盘详情、员工训练历史和能力画像同步变化 |
|
||||
|
||||
## 后端落点
|
||||
|
||||
@@ -20,23 +23,35 @@
|
||||
- 包名建议:`org.dromara.aihr`
|
||||
- Controller 返回统一用 `org.dromara.common.core.domain.R`
|
||||
|
||||
当前四条页面流仍保留 seed fallback。知识库、模型能力、文档解析、RAG、chat 按 [ruoyi-ai 能力分片迁移计划](RUOYI_AI_INCREMENTAL_MIGRATION.md) 逐片引入;知识库 DDL 与住宅类 SOP seed 在 `backend/script/sql/aihr_knowledge_mysql8.sql`,模型 DDL 在 `backend/script/sql/aihr_model_mysql8.sql`。
|
||||
当前管理端页面流和移动端首页仍保留 seed fallback。知识库、模型能力、文档解析、RAG、chat 按 [ruoyi-ai 能力分片迁移计划](RUOYI_AI_INCREMENTAL_MIGRATION.md) 逐片引入;知识库 DDL 与住宅类 SOP seed 在 `backend/script/sql/aihr_knowledge_mysql8.sql`,模型 DDL 在 `backend/script/sql/aihr_model_mysql8.sql`,训练记录 DDL 在 `backend/script/sql/aihr_practice_mysql8.sql`。
|
||||
|
||||
直接打后端 `/api/**` 需要登录后的 `Authorization: Bearer <access_token>`;浏览器内通过已登录前端和 `/dev-api` 代理访问。
|
||||
直接打后端 `/api/**` 通常需要登录后的 `Authorization: Bearer <access_token>`;浏览器内通过已登录前端和 `/dev-api` 代理访问。移动端登录接口为 `POST /auth/mobile/sms-login`,请求 `{ phonenumber, smsCode, tenantId }`,内部固定使用 app 客户端 `428a8310cd442757ae699df5d894f051` 和 `sms` grant;验证码通过后若手机号不存在,会创建 `app_user`,用户名为手机号,备注为“移动端短信自动注册”。移动端 MVP 首页接口 `GET /api/aihr/mobile/home/{role}` 目前仍是 `@SaIgnore` 的公开只读 seed 接口,避免 H5 首屏被后台管理登录态阻断;后续接小程序登录后再收紧为移动端 token。
|
||||
|
||||
阿里云短信复用 RuoYi 的 `sms.blends.config1`。本地开发把真实短信参数放根目录 `.env.local` 或外部环境变量,`scripts/dev-backend.sh` 会自动加载;`application-dev.yml` / `application-prod.yml` 只保留占位,不写真实密钥。
|
||||
|
||||
```bash
|
||||
AIHR_SMS_LOGIN_TEMPLATE_ID=SMS_xxxxxx
|
||||
ALIYUN_SMS_ACCESS_KEY_ID=xxx
|
||||
ALIYUN_SMS_ACCESS_KEY_SECRET=xxx
|
||||
ALIYUN_SMS_SIGN_NAME=物业AI助手
|
||||
```
|
||||
|
||||
SOP 文档上传第三片已经落最小后端边界:
|
||||
|
||||
| 能力 | 后端接口 | 处理 |
|
||||
|---|---|---|
|
||||
| 文档上传解析 | `POST /api/knowledge/doc/upload` | `multipart/form-data`,字段 `file` 和 `category`;支持 `.txt/.md/.markdown/.pdf/.doc/.docx/.xls/.xlsx/.ppt/.pptx`、100MB 内;先写 `sys_oss`,再绑定 `aihr_knowledge_attach.oss_id` 并切分写入 `aihr_knowledge_fragment` |
|
||||
| 文档上传解析 | `POST /api/knowledge/doc/upload` | `multipart/form-data`,字段 `file` 和 `category`;支持 `.txt/.md/.markdown/.pdf/.doc/.docx/.xls/.xlsx/.ppt/.pptx` 及图片 `.jpg/.jpeg/.png/.gif/.webp/.bmp`、100MB 内;先写 `sys_oss`,再绑定 `aihr_knowledge_attach.oss_id` 并切分写入 `aihr_knowledge_fragment` |
|
||||
| 图片视觉 OCR | 同一上传/导入链路 | 上传图片时,若启用了 `aihr_model_config.category='vision'`(无则回退 `category='chat'`)的模型,会把图片编码为 base64 data URL 调用该供应商 OpenAI-compatible `/chat/completions` 提取文字,识别结果按普通正文切分写入 fragment;无视觉模型时不报错,返回空正文、fragment 为 0。不依赖 Tesseract,识别质量由所配置视觉模型决定 |
|
||||
| 智能归类与标签 | 同一上传/导入链路 | `category=__auto__` 时,解析正文后优先调用已启用的 `aihr_model_config.category='chat'` 模型生成分类、摘要、标签和归类理由,温度固定为 `0`;无模型或调用失败时按文件名/正文关键词兜底。最终分类写入 `aihr_knowledge_info/attach`,摘要和标签写入 `sys_oss.ext1` |
|
||||
| 重复资料处理 | 同一上传/导入链路 | 上传时计算原始文件 `aihrFileSha256`、解析文本 `aihrTextSha256` 和 `md5` 写入 `sys_oss.ext1`;重复判断优先按文件 SHA-256,其次按文本 SHA-256,最后用同名同大小兼容旧数据。命中重复时复用原附件并迁移到最新分类,删除其他重复附件和旧 fragment |
|
||||
| 归类稳定性 | 同一上传/导入链路 | 命中重复资料时优先复用已有 `sys_oss.ext1` 里的分类、摘要和标签;只有旧资料没有存过模型结果时才重新分析,避免同文件因重复上传或更换模型导致标签漂移 |
|
||||
| 文档替换 | 同一 `category + fileName` 再上传 | 复用原 `doc_id`,删除旧 fragment 后重写新 fragment,避免重复文档堆积 |
|
||||
| 片段向量化 | 同一上传接口内机会性执行 | 若 `aihr_model_config.category='vector'` 且启用,会调用配置供应商的 OpenAI-compatible `/embeddings`,把返回向量写入 `aihr_knowledge_fragment.embedding_json` |
|
||||
| Qdrant 向量索引 | 同一上传接口内机会性执行 | embedding 写入 MySQL 后尽力 upsert 到 Qdrant;同名文档替换会尽力删除旧 points;Qdrant 不可用不影响上传和 MySQL 检索 |
|
||||
| 混合检索 | `POST /api/knowledge/search` | 先跑 MySQL Fulltext,同时在 vector 模型和 Qdrant 可用时生成 query embedding 走 Qdrant,再按 RRF 融合并回 MySQL hydrate 片段 |
|
||||
| 解析状态聚合 | `GET /api/knowledge/processing/overview` | 聚合 `aihr_knowledge_attach.status`、fragment 数、embedding 数、`sys_oss.ext1.fileSize`,生成资料处理页指标、分类、任务、链路和最近事件 |
|
||||
| 片段向量化 | 同一上传接口内机会性执行 | 若 `aihr_model_config.category='vector'` 且启用,会优先调用配置供应商的 OpenAI-compatible `/embeddings`,把返回向量写入 `aihr_knowledge_fragment.embedding_json`;配置缺失或外部接口失败时使用本地确定性 `local-hash-v1` 兜底,保证 MVP 链路仍有真实向量数据 |
|
||||
| 缺失向量补跑 | `POST /api/knowledge/doc/vectorize-missing` | 扫描缺少 `embedding_json` 的片段,复用同一向量化与 Qdrant 入库链路,适合模型配置变更后或历史资料补齐向量 |
|
||||
| 向量库状态与重建 | `GET /api/knowledge/doc/vector-index-status`、`POST /api/knowledge/doc/rebuild-vector-index` | 模型配置页展示当前 vector 模型维度、Qdrant collection 维度、点数和片段向量数;维度不一致时可一键清空旧 embedding、删除 collection 并按当前模型重建 |
|
||||
| Qdrant 向量索引 | 同一上传接口内机会性执行 | embedding 写入 MySQL 后尽力 upsert 到 Qdrant;同名文档替换会尽力删除旧 points;Qdrant 不可用不影响上传和 MySQL 检索;外部 embedding 成功但 collection 维度不一致时不静默降级为 `local-hash-v1`,通过状态接口和重建入口处理 |
|
||||
| 混合检索 | `POST /api/knowledge/search` | 先跑中文关键词 `LIKE` 打分和 MySQL Fulltext,再生成 query embedding 走 Qdrant,最后按 RRF 融合并回 MySQL hydrate 片段;Qdrant 或外部向量接口不可用时保留关键词/全文检索 |
|
||||
| 解析状态聚合 | `GET /api/knowledge/processing/overview` | 聚合 `aihr_knowledge_attach.status`、fragment 数、embedding 数、`sys_oss.ext1.fileSize`,生成资料处理页指标、分类、任务、链路和事件列表 |
|
||||
| 服务端目录导入 | `POST /api/knowledge/doc/import-local` | JSON `{ directory, category, limit }`;`directory` 只能是 `AIHR_IMPORT_ROOT` / `aihr.import.root` 下的相对目录,默认根目录为 `./.data/import`;逐文件复用上传解析链路,同步执行,保留给小批量/调试 |
|
||||
| 服务端导入任务 | `POST /api/knowledge/doc/import-local-task`、`GET /api/knowledge/doc/import-tasks` | 启动后台目录导入并返回任务;任务写入 `aihr_knowledge_import_task`,页面轮询查看总数、成功数、失败数、当前文件和进度;重试当前按同目录重新启动一轮 |
|
||||
|
||||
@@ -61,6 +76,7 @@ Qdrant 本地默认值可不配;需要覆盖时用 JVM property 或环境变
|
||||
|
||||
## 前端落点
|
||||
|
||||
- 管理端前端:`frontend/`,只承载后台管理、配置、审核、查看结果等页面。
|
||||
- AI 面试 API 文件:`frontend/src/api/aihr/interview.ts`
|
||||
- AI 面试页面:`frontend/src/views/recruit/interview.vue`
|
||||
- 三角色对练 API 文件:`frontend/src/api/aihr/practice.ts`
|
||||
@@ -73,12 +89,16 @@ Qdrant 本地默认值可不配;需要覆盖时用 JVM property 或环境变
|
||||
- 资料处理页面:`frontend/src/views/knowledge/processing.vue`
|
||||
- 模型配置 API 文件:`frontend/src/api/aihr/model.ts`
|
||||
- 模型配置页面:`frontend/src/views/system/model/index.vue`
|
||||
- 保留本地 seed fallback:接口失败时仍能演示,不让现场 Demo 被后端状态拖死。
|
||||
- 移动端独立工程:`mobile/src/App.vue`,路由 `/h5/user`、`/h5/candidate`、`/h5/supervisor`;当前三端首页已按高保真原型实现,未登录先走手机号短信登录,登录后 API 优先请求 `/api/aihr/mobile/home/{role}`,不复用后台页面路由。
|
||||
- 员工端训练:任务卡“开始训练”复用管理端三角色对练 seed API,完成两轮后展示评分和导师改写;记录写入 `aihr_practice_session`,员工端展示训练历史和能力画像,主管端展示待复盘列表,点进单条可看评分、话术、导师改写,并可标记“已复盘”。
|
||||
- 保留本地 seed fallback:接口失败时仍能演示,不让现场演示被后端状态拖死。
|
||||
|
||||
## 验收
|
||||
|
||||
```bash
|
||||
./scripts/demo-check.sh
|
||||
npm --prefix mobile run build
|
||||
curl -fsS http://127.0.0.1:8080/api/aihr/mobile/home/user
|
||||
npm --prefix frontend run lint:eslint -- src/api/aihr/interview.ts src/views/recruit/interview.vue src/api/aihr/practice.ts src/views/train/practice.vue src/api/aihr/case.ts src/views/knowledge/cases.vue src/api/aihr/sop.ts src/views/knowledge/sop.vue
|
||||
mvn -f backend/pom.xml -pl ruoyi-admin -am -DskipTests package
|
||||
```
|
||||
@@ -95,10 +115,13 @@ curl -fsS -X POST http://127.0.0.1:8080/api/aihr/model/chat \
|
||||
-d '{"prompt":"物业管家处理漏水投诉第一步是什么?"}'
|
||||
```
|
||||
|
||||
Qdrant 可单独 smoke:
|
||||
Qdrant 和向量索引可单独 smoke;重建接口会清空旧 embedding 并重建 collection,只用于本地验证或确认维度不一致后的修复:
|
||||
|
||||
```bash
|
||||
TOKEN=<登录后 access_token>
|
||||
curl -fsS http://127.0.0.1:6333/
|
||||
curl -fsS http://127.0.0.1:8080/api/knowledge/doc/vector-index-status -H "Authorization: Bearer $TOKEN"
|
||||
curl -fsS -X POST http://127.0.0.1:8080/api/knowledge/doc/rebuild-vector-index -H "Authorization: Bearer $TOKEN"
|
||||
```
|
||||
|
||||
浏览器验收仍按 [DEMO_ACCEPTANCE.md](DEMO_ACCEPTANCE.md) 的四条关键路径执行。
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 一期 Demo 演示与验收清单
|
||||
# 一期 MVP 演示与验收清单
|
||||
|
||||
本文件是现场演示入口:先跑预检,再按四条演示流逐条点击。当前只证明一期 Demo 路径可讲、可点、可截图;SOP 检索已可查本地 MySQL seed 片段,并支持 txt/md/PDF/Word/Excel/PPT 上传解析为本地 fragment,配置 vector 模型后会写入 embedding 并尽力同步 Qdrant,其余记录仍按演示态验收。
|
||||
本文件是 MVP 现场演示入口:先跑预检,再按演示流逐条点击。当前证明一期 MVP 路径可讲、可点、可截图;移动端员工端、候选人端、主管端首页已拆到独立 `mobile/` 工程并按高保真原型实现,已接手机号短信登录,数据 API 优先请求 `GET /api/aihr/mobile/home/{role}` 并保留本地 fallback;员工端训练完成后写入 `aihr_practice_session`,用于训练历史、主管待复盘列表和能力画像;SOP 检索已可查本地 MySQL seed 片段,并支持 txt/md/PDF/Word/Excel/PPT 上传解析为本地 fragment,配置 vector 模型后会写入 embedding 并尽力同步 Qdrant,管理端 seed 记录仍按演示态验收。
|
||||
|
||||
## 演示前预检
|
||||
|
||||
@@ -15,11 +15,12 @@
|
||||
| 顺序 | 页面 | 点击路径 | 必须看到 |
|
||||
|---|---|---|---|
|
||||
| 1 | 首页 `/index` | 打开首页 | 只展示“首页 / AI面试 / 三角色对练 / 案例沉淀 / SOP知识库 / 资料处理 / 系统设置-模型配置” |
|
||||
| 2 | AI面试 `/recruit/interview` | 生成题目 → 填满 seed 回答 → 完成评分 | 已完成闭环、建议复试、新增面试记录 |
|
||||
| 3 | 三角色对练 `/train/practice` | 开始对练 → 填入 seed 回复 → 继续一轮 → 填入 seed 回复 → 结束并评分 | 已完成闭环、导师改写、新增对练记录 |
|
||||
| 4 | 案例沉淀 `/knowledge/cases` | 选择样例录音 → AI 整理 → 送审 → 入库 → 查看样片 | 已完成闭环、`seed入库`、样片兜底文案 |
|
||||
| 5 | SOP知识库 `/knowledge/sop` | 上传 txt/md/PDF/Word/Excel/PPT 文档或使用 seed 文档 → 检索 → 生成训练题 | 已完成闭环、引用 SOP 原文片段、训练题已生成 |
|
||||
| 6 | 资料处理 `/knowledge/processing` | 打开页面 → 查看解析任务 → 查看处理链路 → 可选点“服务端导入”导入 `.data/import` 下少量样例 | 可看到资料总量、等待/解析中/完成/失败、片段数、向量化状态和最近事件 |
|
||||
| 2 | 移动端三端 `http://127.0.0.1:5174/h5/user`、`/h5/candidate`、`/h5/supervisor` | 打开后先手机号登录;已配置 `AIHR_SMS_LOGIN_TEMPLATE_ID` 时可真实收短信,新手机号会自动注册;员工端点“开始训练”完成两轮提交,再打开主管端 | 员工端显示评分、“训练完成,主管端待复盘已更新”、训练历史和能力画像;主管端完训人数、“待复盘对练”计数和待复盘列表增加;点进待复盘记录可看评分、话术、导师改写,并可标记已复盘;候选人面试、主管团队概况分别可见;接口不可用时走本地 fallback;视觉参考 `docs/prototypes/*端-首页.png`,底部导航停留在移动端工程内 |
|
||||
| 3 | AI面试 `/recruit/interview` | 生成题目 → 填满 seed 回答 → 完成评分 | 已完成闭环、建议复试、新增面试记录 |
|
||||
| 4 | 三角色对练 `/train/practice` | 开始对练 → 填入 seed 回复 → 继续一轮 → 填入 seed 回复 → 结束并评分 | 已完成闭环、导师改写、新增对练记录 |
|
||||
| 5 | 案例沉淀 `/knowledge/cases` | 选择样例录音 → AI 整理 → 送审 → 入库 → 查看样片 | 已完成闭环、`seed入库`、样片兜底文案 |
|
||||
| 6 | SOP知识库 `/knowledge/sop` | 上传 txt/md/PDF/Word/Excel/PPT 文档或使用 seed 文档 → 检索 → 生成训练题 | 已完成闭环、引用 SOP 原文片段、训练题已生成 |
|
||||
| 7 | 资料处理 `/knowledge/processing` | 打开页面 → 查看解析任务 → 查看处理链路 → 可选点“服务端导入”导入 `.data/import` 下少量样例 | 可看到资料总量、等待/解析中/完成/失败、片段数、向量化状态和事件列表 |
|
||||
|
||||
## 录屏兜底
|
||||
|
||||
@@ -32,5 +33,5 @@
|
||||
## 不演示
|
||||
|
||||
- 不演示 SSO、权限配置、知识图谱、数字人视频生成、绩效挂钩。
|
||||
- 不承诺面试、对练、案例的 seed 记录已写入后端数据库;SOP 检索与文档上传使用 `aihr_knowledge_*` 本地表,失败时回退 seed。
|
||||
- 不承诺管理端 AI 面试、三角色对练、案例沉淀的 seed 记录已写入业务数据库;移动端员工训练记录写入 `aihr_practice_session`;SOP 检索与文档上传使用 `aihr_knowledge_*` 本地表,失败时回退 seed。
|
||||
- 不现场接大模型,AI 效果以本地 seed 数据兜底。
|
||||
|
||||
+36
-11
@@ -1,13 +1,15 @@
|
||||
# 物业AI人力资源系统 Demo 本地启动
|
||||
# 物业AI人力资源系统 MVP 本地启动
|
||||
|
||||
## 当前仓库
|
||||
|
||||
- 后端:`backend`,来自 `dromara/RuoYi-Vue-Plus` 的 `5.X` 分支
|
||||
- 前端:`frontend`,来自 `CrazyLionCat/plus-ui` 的 `5.X` 分支
|
||||
- 管理端前端:`frontend`,来自 `CrazyLionCat/plus-ui` 的 `5.X` 分支
|
||||
- 移动端前端:`mobile`,独立 Vue/Vite 工程
|
||||
|
||||
## 本地端口
|
||||
|
||||
- 前端:`http://127.0.0.1:5173/`
|
||||
- 管理端前端:`http://127.0.0.1:5173/`
|
||||
- 移动端前端:`http://127.0.0.1:5174/h5/user`
|
||||
- 后端:`http://127.0.0.1:8080/`
|
||||
- MySQL:`127.0.0.1:13306`,数据库 `ry-vue`,账号 `root/root`
|
||||
- Redis:`127.0.0.1:16379`,密码 `ruoyi123`
|
||||
@@ -15,7 +17,18 @@
|
||||
- Qdrant REST:`http://127.0.0.1:6333`,默认 collection `aihr_knowledge`
|
||||
- 服务端资料导入根目录:`./.data/import`
|
||||
|
||||
Qdrant 默认本地无需配置;远端或自定义 collection 可用 `AIHR_QDRANT_URL`、`AIHR_QDRANT_COLLECTION`、`AIHR_QDRANT_API_KEY` 覆盖。服务端资料导入根目录可用 `AIHR_IMPORT_ROOT` 或 `-Daihr.import.root` 覆盖。
|
||||
Qdrant 默认本地无需配置;远端或自定义 collection 可用 `AIHR_QDRANT_URL`、`AIHR_QDRANT_COLLECTION`、`AIHR_QDRANT_API_KEY` 覆盖。服务端资料导入根目录可用 `AIHR_IMPORT_ROOT` 或 `-Daihr.import.root` 覆盖。移动端手机号登录的短信模板 ID、阿里云 AccessKey、Secret 和短信签名都通过环境变量注入;本地放根目录 `.env.local`,`scripts/dev-backend.sh` 会自动加载。
|
||||
|
||||
本地 `.env.local` 示例:
|
||||
|
||||
```bash
|
||||
AIHR_SMS_LOGIN_TEMPLATE_ID=SMS_xxxxxx
|
||||
ALIYUN_SMS_ACCESS_KEY_ID=xxx
|
||||
ALIYUN_SMS_ACCESS_KEY_SECRET=xxx
|
||||
ALIYUN_SMS_SIGN_NAME=物业AI助手
|
||||
```
|
||||
|
||||
`application-dev.yml` 只保留占位和默认值,不提交真实短信密钥。
|
||||
|
||||
## 启动步骤
|
||||
|
||||
@@ -25,13 +38,13 @@ Qdrant 默认本地无需配置;远端或自定义 collection 可用 `AIHR_QDR
|
||||
./scripts/dev.sh
|
||||
```
|
||||
|
||||
首次启动或需要重建本地 `ry-vue` Demo 数据库时执行:
|
||||
首次启动或需要重建本地 `ry-vue` MVP 数据库时执行:
|
||||
|
||||
```bash
|
||||
./scripts/dev.sh --reset
|
||||
```
|
||||
|
||||
`--reset` 会删除并重建本地 Demo 数据库,只用于本地开发环境。
|
||||
`--reset` 会删除并重建本地 MVP 数据库,只用于本地开发环境。
|
||||
|
||||
## 默认登录
|
||||
|
||||
@@ -50,11 +63,15 @@ Qdrant 默认本地无需配置;远端或自定义 collection 可用 `AIHR_QDR
|
||||
- Qdrant 容器随本地开发编排启动,供 SOP 知识库向量召回使用
|
||||
- `ry_vue_5.X.sql`、`ry_job.sql`、`ry_workflow.sql` 已导入
|
||||
- `aihr_knowledge_mysql8.sql`、`aihr_model_mysql8.sql` 已导入;本地库含住宅 SOP seed 片段与模型配置表
|
||||
- `aihr_practice_mysql8.sql` 已导入;移动端员工训练记录落 `aihr_practice_session`,用于训练历史、主管待复盘列表和能力画像聚合
|
||||
- SOP 知识库支持 `.txt/.md/.markdown/.pdf/.doc/.docx/.xls/.xlsx/.ppt/.pptx` 上传到 MinIO 后解析入库,接口为 `POST /api/knowledge/doc/upload`,单文件上限 100MB
|
||||
- 服务端目录导入接口为 `POST /api/knowledge/doc/import-local-task`,只读取导入根目录下的相对目录,后台逐文件复用同一上传解析链路;`POST /api/knowledge/doc/import-local` 保留为同步调试接口。
|
||||
- 启用 `aihr_model_config.category='vector'` 的模型配置后,上传会同步写入片段 embedding,并尽力 upsert 到 Qdrant;未配置或 Qdrant 不可用时只走 MySQL Fulltext/seed fallback,不影响检索。
|
||||
- 启用 `aihr_model_config.category='vector'` 的模型配置后,上传会同步写入片段 embedding,并尽力 upsert 到 Qdrant;模型配置页可查看 Qdrant 维度、点数和片段向量数,并在维度不一致时重建索引;未配置或 Qdrant 不可用时只走 MySQL Fulltext/seed fallback,不影响检索。
|
||||
- 后端 `ruoyi-admin` 已完成 Maven 打包并启动在 `8080`
|
||||
- 前端依赖已安装,Vite 已启动在 `5173`
|
||||
- 移动端依赖已安装,Vite 已启动在 `5174`
|
||||
- 移动端手机号登录页已接 `/resource/sms/code` 与 `/auth/mobile/sms-login`;未配置真实 `ALIYUN_SMS_ACCESS_KEY_ID`、`ALIYUN_SMS_ACCESS_KEY_SECRET`、`ALIYUN_SMS_SIGN_NAME`、`AIHR_SMS_LOGIN_TEMPLATE_ID` 时不会发送阿里云短信;手机号不存在时会自动注册为 `app_user`
|
||||
- 移动端员工端“开始训练”已复用 `/api/train/practice/start`、`/turn`、`/finish`;移动端请求需带登录返回的 `Authorization` 与 `clientid`;完成后主管端完训人数、“待复盘对练”计数、复盘列表、复盘详情、员工训练历史和能力画像会变化
|
||||
- `/dev-api/auth/tenant/list` 与 `/dev-api/auth/code` 已通过前端代理返回 `200`
|
||||
- `000000 / admin / admin123` 已通过真实加密登录接口返回 `access_token`
|
||||
|
||||
@@ -64,7 +81,14 @@ Qdrant 单独检查:
|
||||
curl -fsS http://127.0.0.1:6333/
|
||||
```
|
||||
|
||||
## Demo 页面验证
|
||||
登录后可检查向量索引状态:
|
||||
|
||||
```bash
|
||||
TOKEN=<登录后 access_token>
|
||||
curl -fsS http://127.0.0.1:8080/api/knowledge/doc/vector-index-status -H "Authorization: Bearer $TOKEN"
|
||||
```
|
||||
|
||||
## MVP 页面验证
|
||||
|
||||
登录后侧栏应只展示以下入口:
|
||||
|
||||
@@ -76,17 +100,18 @@ curl -fsS http://127.0.0.1:6333/
|
||||
- 资料处理:`/knowledge/processing`
|
||||
- 系统设置-模型配置:`/system/model`
|
||||
|
||||
若依默认菜单如“系统管理 / 租户管理 / 系统监控 / 系统工具 / 测试菜单”在当前 Demo 阶段应保持隐藏。
|
||||
若依默认菜单如“系统管理 / 租户管理 / 系统监控 / 系统工具 / 测试菜单”在当前 MVP 阶段应保持隐藏。
|
||||
|
||||
## Demo 演示流验证
|
||||
## MVP 演示流验证
|
||||
|
||||
当前已跑通四个本地演示流:
|
||||
当前已跑通管理端五个本地演示流和移动端员工训练闭环:
|
||||
|
||||
- AI面试:进入 `/recruit/interview`,点击“生成题目” → “填满 seed 回答” → “完成评分”,应看到“已完成闭环”“建议复试”和新增面试记录。
|
||||
- 三角色对练:进入 `/train/practice`,点击“开始对练” → 两次“填入 seed 回复 / 继续一轮” → “结束并评分”,应看到“已完成闭环”“导师改写”和新增对练记录。
|
||||
- 案例沉淀:进入 `/knowledge/cases`,点击“选择样例录音” → “AI 整理” → “送审” → “入库”,应看到“已完成闭环”和新增 `seed入库` 记录。
|
||||
- SOP知识库:进入 `/knowledge/sop`,可上传 txt/md/PDF/Word/Excel/PPT 文档入库;点击“检索” → “生成训练题”,应看到“已完成闭环”、命中数据库 SOP 原文片段和训练题;数据库不可用时页面回退 seed。
|
||||
- 资料处理:进入 `/knowledge/processing`,应看到资料总量、解析任务表、处理链路、规则与风险;可用少量文件验证“批量导入/选择目录/服务端导入”。服务端导入读取 `./.data/import` 下的相对目录,启动后台任务并在页面显示进度;当前重试粒度是同目录重新导入,不是单失败文件重试。
|
||||
- 移动端员工训练:进入 `http://127.0.0.1:5174/h5/user`,手机号登录 → “开始训练” → 两次“填入建议回复 / 提交本轮”,应看到评分、导师改写、训练历史和能力画像;切到主管端后完训人数与“待复盘对练”计数增加,并展示待复盘列表;点进单条可看评分、话术、导师改写,并可标记已复盘。
|
||||
|
||||
演示前可先跑最小预检:
|
||||
|
||||
|
||||
+7
-4
@@ -7,14 +7,17 @@
|
||||
| 文档 | 用途 |
|
||||
|---|---|
|
||||
| [DEV_SETUP.md](DEV_SETUP.md) | 本地端口、账号、启动步骤、基础链路验证 |
|
||||
| [DEMO_ACCEPTANCE.md](DEMO_ACCEPTANCE.md) | 一期 Demo 演示脚本、录屏兜底、四条 seed 流验收清单 |
|
||||
| [API_INTEGRATION.md](API_INTEGRATION.md) | 后端 API 对接顺序、业务模块落点、四条 seed API 切片与 SOP 上传解析接口 |
|
||||
| [DEMO_ACCEPTANCE.md](DEMO_ACCEPTANCE.md) | 一期 MVP 演示脚本、录屏兜底、MVP 演示流验收清单 |
|
||||
| [API_INTEGRATION.md](API_INTEGRATION.md) | 后端 API 对接顺序、业务模块落点、移动端训练记录/复盘详情、SOP 上传解析接口 |
|
||||
| [RUOYI_AI_INCREMENTAL_MIGRATION.md](RUOYI_AI_INCREMENTAL_MIGRATION.md) | 从 `ageerle/ruoyi-ai` 分片迁移知识库、模型能力、文档解析、Qdrant/RAG 和 chat 的执行边界 |
|
||||
| [AI人力资源系统一期Demo作战清单.md](AI人力资源系统一期Demo作战清单.md) | Demo 作战图、MVP 切割线、排期、验收承诺 |
|
||||
| [AI人力资源系统一期MVP版作战清单.md](AI人力资源系统一期MVP版作战清单.md) | MVP 作战图、切割线、排期、验收承诺 |
|
||||
| [物业AI人力资源系统业务需求文档BRD.md](物业AI人力资源系统业务需求文档BRD.md) | 业务需求、范围边界、角色、风险与验收 |
|
||||
| [物业AI人力资源系统开发规格TechSpec.md](物业AI人力资源系统开发规格TechSpec.md) | 工程结构、数据模型、页面路由、API 和核心实现规格 |
|
||||
| [prototypes/ai-hr-dashboard.png](prototypes/ai-hr-dashboard.png) | 后台首页高保真目标图 |
|
||||
| [prototypes/ai-hr-p0-pages-composite.png](prototypes/ai-hr-p0-pages-composite.png) | P0 四个页面组合高保真原型图 |
|
||||
| [prototypes/员工端-首页.png](prototypes/员工端-首页.png) | 移动端员工/用户端首页目标图 |
|
||||
| [prototypes/候选人端-首页.png](prototypes/候选人端-首页.png) | 移动端候选人端首页目标图 |
|
||||
| [prototypes/主管端-首页.png](prototypes/主管端-首页.png) | 移动端主管端首页目标图 |
|
||||
|
||||
## 参考材料
|
||||
|
||||
@@ -29,7 +32,7 @@
|
||||
|
||||
| 文档 | 对应 Markdown |
|
||||
|---|---|
|
||||
| [originals/AI人力资源系统一期Demo作战清单.docx](originals/AI人力资源系统一期Demo作战清单.docx) | [AI人力资源系统一期Demo作战清单.md](AI人力资源系统一期Demo作战清单.md) |
|
||||
| [originals/AI人力资源系统一期Demo作战清单.docx](originals/AI人力资源系统一期Demo作战清单.docx) | [AI人力资源系统一期MVP版作战清单.md](AI人力资源系统一期MVP版作战清单.md) |
|
||||
| [originals/物业AI人力资源系统业务需求文档BRD.docx](originals/物业AI人力资源系统业务需求文档BRD.docx) | [物业AI人力资源系统业务需求文档BRD.md](物业AI人力资源系统业务需求文档BRD.md) |
|
||||
| [originals/物业AI人力资源系统开发规格TechSpec.docx](originals/物业AI人力资源系统开发规格TechSpec.docx) | [物业AI人力资源系统开发规格TechSpec.md](物业AI人力资源系统开发规格TechSpec.md) |
|
||||
| [originals/物业AI陪练系统一期建设实施方案.docx](originals/物业AI陪练系统一期建设实施方案.docx) | [legacy/物业AI陪练系统一期建设实施方案.md](legacy/物业AI陪练系统一期建设实施方案.md) |
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
| 2. 模型能力 | `chat_provider / chat_model` 改造为 `aihr_model_*`,最小 OpenAI-compatible 调用边界 | 多模型市场、图像、SSE、成本看板 | 模型列表可查;数据库配置后可调用 `/chat/completions` |
|
||||
| 3. 文档解析 | 文本/Markdown/PDF/Word/Excel/PPT loader、OSS-first 上传与分片 | 异步重试队列、图片智能分析 | txt/md/PDF/Word/Excel/PPT 文件可落 OSS 并解析为 fragment |
|
||||
| 4. 检索与 embedding | MySQL Fulltext + OpenAI-compatible embedding + Qdrant 最小向量召回 | Milvus/Weaviate 全量适配、独立向量库后台 | 同一问题返回带分数片段,配置 vector 模型后片段有 embedding,Qdrant 可用时参与 RRF 融合 |
|
||||
| 5. 资料处理状态 | 解析任务状态页、资料分类、处理链路、多文件/目录选择上传、服务端后台目录导入任务 | 单失败文件重试、分布式队列 | 能查看等待解析/解析中/已完成/失败、片段数、向量化状态并导入 Demo 文件 |
|
||||
| 5. 资料处理状态 | 解析任务状态页、资料分类、处理链路、多文件/目录选择上传、服务端后台目录导入任务 | 单失败文件重试、分布式队列 | 能查看等待解析/解析中/已完成/失败、片段数、向量化状态并导入 MVP 样例文件 |
|
||||
| 6. RAG 回答 | 带引用回答、训练题生成 | 多模型市场、成本看板 | SOP 页面展示真实引用 |
|
||||
| 7. Chat | 最小会话、消息、引用来源 | 多智能体、工作流、MCP、Skills | 可围绕 SOP 连续追问 |
|
||||
|
||||
@@ -59,21 +59,31 @@
|
||||
|
||||
- `/api/knowledge/search` 已优先查询 `aihr_knowledge_fragment`。
|
||||
- 检索方式先迁移 `ruoyi-ai` 的 MySQL Fulltext 关键词召回:`MATCH(content) AGAINST(...)`。
|
||||
- MySQL 未命中或表未导入时仍回退当前 seed,保证 Demo 页面不断。
|
||||
- MySQL 未命中或表未导入时仍回退当前 seed,保证 MVP 页面不断。
|
||||
- `aihr_knowledge_fragment` 已增加 `embedding_json/embedding_model/embedding_time`。
|
||||
- 若数据库启用 `category=vector` 的模型配置,上传后会同步调用 OpenAI-compatible `/embeddings` 并写入片段向量。
|
||||
- Qdrant 已接入本地开发编排;embedding 写入 MySQL 后尽力 upsert 到默认 collection `aihr_knowledge`。
|
||||
- `/api/knowledge/search` 在 vector 模型和 Qdrant 可用时会生成 query embedding,走 Qdrant 召回后回 MySQL hydrate 片段,并与 MySQL Fulltext 用 RRF 融合。
|
||||
- Qdrant 不可用或 vector 模型未配置时,仍走 MySQL Fulltext / LIKE / seed fallback。
|
||||
- 新增 `GET /api/knowledge/doc/vector-index-status` 和 `POST /api/knowledge/doc/rebuild-vector-index`,模型配置页可检查当前 vector 模型维度、Qdrant collection 维度、点数和片段向量数,并按当前模型清空旧 embedding 后重建。
|
||||
- 外部 embedding 成功但 Qdrant 维度不匹配时不再静默降级为本地 hash 向量,避免同一资料在模型切换后出现“数据库有向量、索引不可用”的假成功。
|
||||
|
||||
## 当前第五片
|
||||
|
||||
- 新增后端 API:`GET /api/knowledge/processing/overview`。
|
||||
- 新增前端页面:`/knowledge/processing`,菜单名“资料处理”;`SOP知识库` 菜单保持独立不改名。
|
||||
- 页面聚合展示资料总量、已完成、处理中、失败、资料分类、解析任务表、处理链路、规则风险和最近事件。
|
||||
- 页面聚合展示资料总量、已完成、处理中、失败、资料分类、解析任务表、处理链路、规则风险和事件列表。
|
||||
- 批量导入先复用 `POST /api/knowledge/doc/upload`,支持多文件和浏览器目录选择。
|
||||
- 新增 `POST /api/knowledge/doc/import-local-task` 和 `GET /api/knowledge/doc/import-tasks`,只读取 `AIHR_IMPORT_ROOT` / `aihr.import.root` 下的相对目录,写入 `aihr_knowledge_import_task` 后后台逐文件复用上传解析链路,页面轮询进度;`POST /api/knowledge/doc/import-local` 保留同步调试。
|
||||
|
||||
## 当前第六片
|
||||
|
||||
- 新增图片文件支持(jpg/jpeg/png/gif/webp/bmp),纳入 `supportedFile()` 和上传入口。
|
||||
- 上传图片时,若数据库配置了 `category='vision'` 或 `category='chat'` 的启用模型,会将图片编码为 base64 data URL,调用同一供应商的 OpenAI-compatible `/chat/completions` 做视觉 OCR,提取图片文字写入 fragment;无视觉模型时返回空字符串,fragment 为 0,不影响其他格式上传。
|
||||
- `visionRuntime()` 优先查 `category='vision'`,无则回退 `category='chat'`,复用 `chatRuntime()` 同一查询模式。
|
||||
- `ProcessingRulesResponse.imageOcrEnabled` 改为动态值 `visionRuntime().isPresent()`,前端“图片 OCR”开关随模型配置实时反映;未配置时灰显并显示“即将支持”标签。
|
||||
- 不依赖 Tesseract,零服务器安装依赖;识别精度与中文复杂版面质量由所配置的视觉 LLM 决定。
|
||||
|
||||
## 暂缓项
|
||||
|
||||
- 完整 `ruoyi-chat` 模块
|
||||
@@ -82,5 +92,5 @@
|
||||
- 工作流、多智能体、MCP、Skills
|
||||
- 全量模型管理后台
|
||||
- 完整流式 chat 与消息持久化
|
||||
- 图片 OCR/视觉模型解析
|
||||
- 单失败文件重试、导入任务取消/暂停、分布式队列
|
||||
- 大规模资料的异步向量重建进度条
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.2 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
+11
-11
@@ -8,7 +8,7 @@
|
||||
> - 《物业管家与生活顾问 AI 陪练系统建设方案》(原始业务方案,陪练视角)
|
||||
> - 《物业 AI 陪练系统一期建设实施方案》(含 ch.14/15 技术选型评估)
|
||||
> - 《物业 AI 陪练系统建设方案研判报告》
|
||||
> - 《AI 人力资源系统一期 Demo 作战清单》v1.6(决策 / MVP / 验收 / 排期 / 闸门 / Qdrant 语义检索路线)
|
||||
> - 《AI 人力资源系统一期 MVP 版作战清单》v1.8(决策 / MVP / 验收 / 排期 / 闸门 / Qdrant 语义检索路线)
|
||||
> - 2026-07-01 需求讨论纪要(HR 负责人提出,确立"选用育留"定位)
|
||||
> - 《数据资源模型主题域草案》(Silverston 通用数据模型)
|
||||
>
|
||||
@@ -64,7 +64,7 @@
|
||||
### 3.2 明确移出一期范围(已决策)
|
||||
|
||||
- **内容营销中心**(原第七章朋友圈工坊):属营销/获客,与 HR 无关 → 一期砍除(D5)。
|
||||
- **独立语音 APP**(豆包式):愿景非交付物 → Demo 用 Web,APP 进二期(D6)。
|
||||
- **独立语音 APP**(豆包式):愿景非交付物 → MVP 用 Web,APP 进二期(D6)。
|
||||
- **双图谱知识图谱**(Neo4j):冷启动成本高 → 一期先 RAG,图谱降二期(D4)。
|
||||
- **多项目类型**:一期只跑**住宅类** SOP;公建类、景区类只预留结构。
|
||||
|
||||
@@ -225,7 +225,7 @@
|
||||
|
||||
| # | 外部依赖 | 一期做法 |
|
||||
|---|---|---|
|
||||
| 1 | 组织/人员数据同步(采购系统) | 接口疑似与待批预算系统绑定;Demo 用静态快照兜底 |
|
||||
| 1 | 组织/人员数据同步(采购系统) | 接口疑似与待批预算系统绑定;MVP 用静态快照兜底 |
|
||||
| 2 | 登录 / 身份认证(采购系统) | **一期本地账号(D2)**,SSO 留二期 |
|
||||
| 3 | 权限映射(外部岗位/组织→本地角色) | 本地建 |
|
||||
| 4 | 方言 ASR / TTS(第三方) | 选 1 家跑通 |
|
||||
@@ -244,7 +244,7 @@
|
||||
| D3 | 大模型 | 公有大模型 API(出境合规入闸门) |
|
||||
| D4 | 知识图谱 | 一期先 RAG,图谱降二期 |
|
||||
| D5 | 内容营销中心 | 一期砍除 |
|
||||
| D6 | 独立 APP | 用 Web,APP 进二期 |
|
||||
| D6 | 原生 APP | 用独立 `mobile/` Web/H5,原生 APP 进二期 |
|
||||
| D7 | 文档口径 | 综合统一成新的一版(即本 BRD) |
|
||||
| D8 | 企微/钉钉/工单集成 | 只列接口、不实现 |
|
||||
| D9 | 一期验收标准 | 最小可验收承诺(见第 10 章;一致率 70%、试点 1–2 项目) |
|
||||
@@ -253,7 +253,7 @@
|
||||
|
||||
## 9. 一期范围与 MVP 切割线
|
||||
|
||||
### 9.1 🔴 Demo 必做(阻塞项)
|
||||
### 9.1 🔴 MVP 演示必做(阻塞项)
|
||||
|
||||
英雄路径(1–2 条端到端跑通)、住宅类内容冷启动(SOP+案例+Rubric)、组织人员快照、案例视频样片、本地登录、大模型接入、方言语音 1 条路径、演示脚本、前端壳全可点开。
|
||||
|
||||
@@ -269,7 +269,7 @@
|
||||
|
||||
> 原则:验收只写"是/否"或"可测量";大 ROI 数字归入愿景层,不作验收依据。
|
||||
|
||||
### 10.1 L0 · Demo 验收(过大老板)
|
||||
### 10.1 L0 · MVP 演示验收(过大老板)
|
||||
|
||||
L0-1 全功能点 Web 可点开 · L0-2 至少 1 条英雄路径端到端跑通 · L0-3 住宅类 SOP 可检索且 AI 问答能引用 · L0-4 案例语音上传→AI 整理可演示 · L0-5 脚本无致命卡点且有录屏兜底。
|
||||
|
||||
@@ -322,21 +322,21 @@ AI 分挂钩个人利益的公平性/申诉、员工对被 AI 监考的抵触(
|
||||
- **集成负责人指派**:第 7 章 6 个外部依赖需落实到人。
|
||||
- **F2 派生**:数据权限以项目为范围主体落地(源自 D1)。
|
||||
- **F3 派生**:公有大模型已定,业主 PII 出境评估升为一期必须评估项(源自 D3)。
|
||||
- 二期:知识图谱、独立 APP、玉溪 Agent 化(即时锦囊/语音咨询)、多项目类型、企微/钉钉深度集成、实时同步。
|
||||
- 二期:知识图谱、原生 APP、玉溪 Agent 化(即时锦囊/语音咨询)、多项目类型、企微/钉钉深度集成、实时同步。
|
||||
|
||||
---
|
||||
|
||||
## 附录 A:34 条完整查漏登记(可追溯)
|
||||
|
||||
- **第一层(Demo 阻塞)**:陪练英雄路径 · 内容冷启动 · 组织 API 未就绪 · 案例视频过重 · 登录/认证 · 大模型+出境合规 · 方言厂商 · 演示脚本 · UI 壳工作量
|
||||
- **第一层(MVP 演示阻塞)**:陪练英雄路径 · 内容冷启动 · 组织 API 未就绪 · 案例视频过重 · 登录/认证 · 大模型+出境合规 · 方言厂商 · 演示脚本 · UI 壳工作量
|
||||
- **第二层(数据模型地基)**:HR 主干抽全 · 关系/向量切分 · 招聘域空白 · SOP 多层分类 · Rubric 数据结构 · 版本管理 · ID/主键策略 · 数据权限字段 · 训练事务+学习路径 · 知识图谱去留
|
||||
- **第三层(生产前闸门+组织风险)**:AI 分挂钩绩效 · AI 招聘合规 · 业主/员工数据合规 · 运营成本模型 · 员工接受度 · 内容贡献激励+署名 · 情绪树洞隐私 · 系统/数据归属
|
||||
- **第四层(范围边界+交付一致性)**:营销中心去留 · 独立 APP · 老文档一致性 · 企微/钉钉/工单集成 · 一期验收标准 · 玉溪 Agent 落点 · 认证/晋升/绩效规则引擎
|
||||
- **第四层(范围边界+交付一致性)**:营销中心去留 · 原生 APP · 老文档一致性 · 企微/钉钉/工单集成 · 一期验收标准 · 玉溪 Agent 落点 · 认证/晋升/绩效规则引擎
|
||||
|
||||
## 附录 B:配套文档
|
||||
|
||||
- 《AI 人力资源系统一期 Demo 作战清单》:执行层作战图(决策/MVP/排期/闸门/验收),与本 BRD 配套,本 BRD 为需求基准、作战清单为执行细则。
|
||||
- 《AI 人力资源系统一期 MVP 版作战清单》:执行层作战图(决策/MVP/排期/闸门/验收),与本 BRD 配套,本 BRD 为需求基准、作战清单为执行细则。
|
||||
|
||||
## 附录 C:一句话结论
|
||||
|
||||
> 本项目是以"选用育留"为主线的物业行业 AI 人力资源系统;若依做基座、核心三角色对练与评分自建、数据模型抬 Silverston HR 主干、组织人员从外部同步;一期以住宅类 + 单条英雄路径 Demo 起步,合规与挂钩留生产前闸门。当前头号风险是"2 人 + 死线"下的范围失控,守住 MVP 切割线即可闭环。
|
||||
> 本项目是以"选用育留"为主线的物业行业 AI 人力资源系统;若依做基座、核心三角色对练与评分自建、数据模型抬 Silverston HR 主干、组织人员从外部同步;一期以住宅类 + 单条 MVP 英雄路径起步,合规与挂钩留生产前闸门。当前头号风险是"2 人 + 死线"下的范围失控,守住 MVP 切割线即可闭环。
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
# 物业行业 AI 人力资源系统 · 开发规格(Tech Spec)
|
||||
|
||||
> 版本:v1.3 | 日期:2026-07-02
|
||||
> 版本:v1.4 | 日期:2026-07-03
|
||||
> 定位:**开发层唯一依据**。回答"怎么建"——工程结构、数据表、API 契约、Prompt 规格、集成适配。
|
||||
> v1.1 变更:数据模型对齐《手册》卷1 第9章 HR 主干,补 3 张 backbone 表(职位职责/雇员绩效/雇用终止),新增附录 D 对照表。
|
||||
> v1.2 变更:第 6 章按 Codex 设计评审重写——状态机补异常/终止态、COACH_CHECK 工程化、评分引擎分层(P0 单 LLM / P1 融合)、澄清"单场对练评分 vs 跨期能力画像"两套评分、Prompt 加固 + RAG 硬约束、新增 6.5 P0/P1 切分。
|
||||
> v1.3 变更:Qdrant 作为一期向量索引层落地;SOP 知识库检索升级为 MySQL Fulltext + Qdrant RRF 融合,MySQL/MinIO 仍是事实源。
|
||||
> 配套:需求见[《物业AI人力资源系统业务需求文档BRD》](物业AI人力资源系统业务需求文档BRD.md);执行计划见[《AI人力资源系统一期Demo作战清单》](AI人力资源系统一期Demo作战清单.md)。
|
||||
> **优先级图例**:`P0`=2026-07-05 Demo 必需 · `P1`=一期必需 · `P2`=二期/推迟。
|
||||
> 决策基线:若依基座 / 集中式前后端分离 / 本地登录 / 公有大模型API / 一期RAG / 组织人员外部同步(Demo用快照) / 数据范围以项目为主体。
|
||||
> v1.4 变更:移动端拆为独立 `mobile/` Vue/Vite Web/H5 工程,承载员工端、候选人端、主管端;后台管理端继续在 `frontend/`。
|
||||
> 配套:需求见[《物业AI人力资源系统业务需求文档BRD》](物业AI人力资源系统业务需求文档BRD.md);执行计划见[《AI人力资源系统一期MVP版作战清单》](AI人力资源系统一期MVP版作战清单.md)。
|
||||
> **优先级图例**:`P0`=2026-07-05 MVP 演示必需 · `P1`=一期必需 · `P2`=二期/推迟。
|
||||
> 决策基线:若依基座 / 集中式前后端分离 / 本地登录 / 公有大模型API / 一期RAG / 组织人员外部同步(MVP 用快照) / 数据范围以项目为主体。
|
||||
|
||||
---
|
||||
|
||||
@@ -18,7 +19,8 @@
|
||||
| 层 | 选型 |
|
||||
|---|---|
|
||||
| 后端 | Java + Spring Boot 4(若依 RuoYi 后端) |
|
||||
| 前端 | Vue(若依前端,前后端分离) |
|
||||
| 管理端前端 | Vue + plus-ui(若依前端,前后端分离) |
|
||||
| 移动端前端 | 独立 `mobile/` Vue/Vite Web/H5;小程序技术栈后续再定 |
|
||||
| 数据库 | MySQL(主数据/事务)+ MinIO(原始文件)+ Qdrant(向量索引) |
|
||||
| 检索 | MySQL Fulltext + Qdrant 混合 RAG(一期);知识图谱 Neo4j(P2) |
|
||||
| 大模型 | 公有大模型 API(对话/出题/评分/案例整理) |
|
||||
@@ -31,19 +33,18 @@
|
||||
backend/
|
||||
ruoyi-admin/ # 启动入口
|
||||
ruoyi-system/ # 复用:用户/角色/菜单/数据权限
|
||||
hr-recruit/ # 选:招聘面试
|
||||
hr-onboard/ # 用:上岗/SOP/培训
|
||||
hr-train/ # 育:对练/每日一练/训练营/错题/师徒
|
||||
hr-competency/ # 留:能力评估/认证/Rubric/激励
|
||||
hr-knowledge/ # 知识库/案例库/RAG
|
||||
hr-ai/ # AI 适配层:大模型/ASR/TTS/Prompt 模板/评分引擎
|
||||
hr-sync/ # 组织人员同步适配层
|
||||
ruoyi-modules/ruoyi-aihr/ # AI HR 自有业务 API、seed fallback、知识库/RAG/模型配置
|
||||
script/sql/aihr_knowledge_mysql8.sql
|
||||
script/sql/aihr_model_mysql8.sql
|
||||
frontend/
|
||||
src/views/{recruit,onboard,train,competency,knowledge,ai-practice,dashboard,admin}
|
||||
src/views/{index,recruit,train,knowledge,system/model} # 管理端 MVP 页面
|
||||
mobile/
|
||||
src/App.vue # 员工端/候选人端/主管端 H5 首页
|
||||
```
|
||||
|
||||
- 复用若依 `ruoyi-system` 的用户/角色/菜单/数据权限;业务模块按选用育留 + 支撑拆分。
|
||||
- AI 能力集中在 `hr-ai`,对上层暴露统一接口(对话/评分/转写/生成),便于切换厂商与兜底。
|
||||
- 复用若依 `ruoyi-system` 的用户/角色/菜单/数据权限;自有后端 API 集中在 `ruoyi-aihr`,不要塞回上游 `ruoyi-demo`。
|
||||
- 管理端 `frontend/` 不承载 `/h5/*`;移动端通过 `5174` 独立启动,路由为 `/h5/user`、`/h5/candidate`、`/h5/supervisor`。
|
||||
- AI 能力先在 `ruoyi-aihr` 内提供统一接口(对话/评分/转写/生成),便于切换厂商与兜底;后续可按模块拆分。
|
||||
- 可借助已有的 "codex 若依组件生成 skill" 批量生成 CRUD 骨架。
|
||||
|
||||
---
|
||||
@@ -147,7 +148,7 @@ frontend/
|
||||
| `aihr_knowledge_fragment`(知识片段) | id, knowledge_id, doc_id, idx, content, embedding_json, embedding_model, embedding_time, FULLTEXT(content) | P0 已落,txt/md/PDF/Word/Excel/PPT 可解析入库,可写 embedding;Qdrant 只存向量索引和最小 payload |
|
||||
| `case`(案例主表,脱敏) | id, title, raw_audio_url, transcript, ai_summary, curated(是否入选), project_ext_org_id, status | P0 |
|
||||
| `case_tag`(多维标签) | id, case_id, dim(业务类型/紧急/业主画像/情绪/渠道), value | P1 |
|
||||
| `case_video`(案例视频/样片) | id, case_id, video_url, is_sample | P1(Demo样片) |
|
||||
| `case_video`(案例视频/样片) | id, case_id, video_url, is_sample | P1(MVP样片) |
|
||||
|
||||
### 3.8 M8/M9 治理 · 版本 · 集成日志
|
||||
|
||||
@@ -171,13 +172,14 @@ frontend/
|
||||
| `/recruit/interview` | **AI 面试(英雄路径A:出题→作答→打分)** | P0跑通 |
|
||||
| `/recruit/candidates` | 候选人列表 | P1 |
|
||||
| `/train/practice` | **三角色对练(英雄路径核心)** | P0跑通 |
|
||||
| `/h5/user` | 员工端首页,手机号登录后可“开始训练”并同步主管待复盘计数 | P0跑通 |
|
||||
| `/train/daily` | 每日一练 | P1 |
|
||||
| `/train/camp` | 专项训练营 | P1 |
|
||||
| `/train/mistakes` | 错题本 | P1 |
|
||||
| `/knowledge/sop` | SOP 库(住宅类检索→引用→训练题) | P0跑通 |
|
||||
| `/knowledge/cases` | **案例库(英雄路径B:语音上传→整理)** | P0跑通 |
|
||||
| `/knowledge/processing` | 资料处理(解析状态、处理链路、浏览器/服务端导入) | P1已提前落地 |
|
||||
| `/system/model` | 模型配置(供应商 Key/Base URL/模型启停/测试) | P1已提前落地 |
|
||||
| `/system/model` | 模型配置(供应商 Key/Base URL/模型启停/测试、向量库状态与重建) | P1已提前落地 |
|
||||
| `/competency/radar` | 能力雷达图 | P1 |
|
||||
| `/competency/cert` | 认证/激励 | P1 |
|
||||
| `/onboard/tasks` | 上岗培训任务 | P1 |
|
||||
@@ -188,7 +190,7 @@ frontend/
|
||||
## 5. API 契约
|
||||
|
||||
> 统一响应信封:`{ code, msg, data }`(若依风格)。以下英雄路径详写,其余按 CRUD 惯例。
|
||||
> 当前本地 Demo 先用 API + fallback 跑通 `/recruit/interview`、`/train/practice`、`/knowledge/cases`、`/knowledge/sop` 页面流;SOP 知识库已接 `aihr_knowledge_fragment` MySQL Fulltext 检索、Qdrant 向量召回、txt/md/PDF/Word/Excel/PPT 上传解析和 embedding 写入。
|
||||
> 当前本地 MVP 先用 API + fallback 跑通 `/recruit/interview`、`/train/practice`、`/knowledge/cases`、`/knowledge/sop` 页面流;SOP 知识库已接 `aihr_knowledge_fragment` MySQL Fulltext 检索、Qdrant 向量召回、txt/md/PDF/Word/Excel/PPT 上传解析和 embedding 写入。
|
||||
> API 对接顺序见 `docs/API_INTEGRATION.md`;面试、对练、案例仍以 seed service 为主,SOP/模型配置已建最小表。
|
||||
|
||||
### 5.1 英雄路径 A:AI 面试(P0)
|
||||
@@ -223,6 +225,8 @@ POST /api/train/practice/finish
|
||||
resp: { score:{ compliance, emotion, communication, marketing }, mentorRewrite, aiComment, trustCurve } // 考官评分
|
||||
```
|
||||
|
||||
移动端员工训练闭环复用同一组三角色对练接口。员工端请求必须带手机号登录返回的 `Authorization` 与 `clientid`,`start` 传 `mode=mobile`;`finish` 后写入 `aihr_practice_session`,并刷新 `/api/aihr/mobile/home/supervisor` 的完训人数与“待复盘对练”计数。员工端训练历史查 `GET /api/aihr/mobile/practice/history`,主管端复盘列表查 `GET /api/aihr/mobile/practice/reviews`,复盘详情查 `GET /api/aihr/mobile/practice/reviews/{id}`,标记已复盘用 `POST /api/aihr/mobile/practice/reviews/{id}/reviewed`,能力画像查 `GET /api/aihr/mobile/profile`。当前只落 session 汇总表,并用 `dialogue_json` 保存本场话术;不拆 `practice_turn/practice_score`,需要逐轮复盘明细、人工点评留痕或多次复盘记录时再拆表。
|
||||
|
||||
### 5.3 英雄路径 B:案例语音上传→整理(P0)
|
||||
|
||||
```
|
||||
@@ -242,12 +246,13 @@ POST /api/ai/score req:{ rubricId, dialogue } resp:{ dimensions, co
|
||||
|
||||
### 5.5 支撑接口
|
||||
|
||||
- 同步:`POST /api/sync/pull`(拉取组织人员,Demo 可读快照文件)
|
||||
- 同步:`POST /api/sync/pull`(拉取组织人员,MVP 可读快照文件)
|
||||
- 知识检索(RAG):`POST /api/knowledge/search` → `{ queryText, category, answer, reference, docs[], snippets[], training[], records[] }`
|
||||
- 知识上传解析:`POST /api/knowledge/doc/upload` → `multipart/form-data { file, category }`,支持 `.txt/.md/.markdown/.pdf/.doc/.docx/.xls/.xlsx/.ppt/.pptx`、100MB 内;先落 `sys_oss` 并绑定 `aihr_knowledge_attach.oss_id`,返回 `{ docId, ossId, fileName, category, fragments, snippets[] }`
|
||||
- 服务端目录导入:`POST /api/knowledge/doc/import-local-task` → `{ directory, category, limit }`,只允许读取 `AIHR_IMPORT_ROOT` / `aihr.import.root` 下的相对目录,写入后台导入任务并逐文件复用上传解析链路;`GET /api/knowledge/doc/import-tasks` 返回最近任务进度;`POST /api/knowledge/doc/import-local` 保留同步调试。
|
||||
- 资料处理状态:`GET /api/knowledge/processing/overview` → 聚合附件状态、片段数、向量化状态、分类、处理链路和最近事件。
|
||||
- 服务端目录导入:`POST /api/knowledge/doc/import-local-task` → `{ directory, category, limit }`,只允许读取 `AIHR_IMPORT_ROOT` / `aihr.import.root` 下的相对目录,写入后台导入任务并逐文件复用上传解析链路;`GET /api/knowledge/doc/import-tasks` 返回任务进度列表;`POST /api/knowledge/doc/import-local` 保留同步调试。
|
||||
- 资料处理状态:`GET /api/knowledge/processing/overview` → 聚合附件状态、片段数、向量化状态、分类、处理链路和事件列表。
|
||||
- 片段向量化:同一上传接口在 `category=vector` 模型配置可用时调用 OpenAI-compatible `/embeddings`,写入 `embedding_json/embedding_model/embedding_time`,并尽力 upsert 到 Qdrant;未配置或 Qdrant 不可用不阻塞上传。
|
||||
- 向量库状态与重建:`GET /api/knowledge/doc/vector-index-status` 返回当前 vector 模型维度、Qdrant collection 维度、点数和片段向量数;`POST /api/knowledge/doc/rebuild-vector-index` 清空旧 embedding、删除 collection,并按当前 vector 模型重建。外部 embedding 成功但 Qdrant 维度不一致时不降级为本地 hash。
|
||||
- 混合检索:`POST /api/knowledge/search` 先查 MySQL Fulltext,同时在 vector 模型和 Qdrant 可用时生成 query embedding 走 Qdrant,最后按 RRF 融合并回 MySQL hydrate 片段;Qdrant 不存正文事实源。
|
||||
- Rubric 配置:`/api/competency/rubric/**` CRUD
|
||||
|
||||
@@ -306,7 +311,7 @@ INIT → WAITING_INPUT → PROCESSING → WAITING_INPUT(loop) → FINISHED
|
||||
- **单场对练评分(每场一次)**:4 维 —— 合规与完整度、情感应变力、沟通有效性、营销敏感性;外加**导师润色版**(不是评分维度,是话术重写对比)。
|
||||
- **能力画像(跨期加权,BRD 4.5)**:5 维加权 —— 任务完成度40% / 话术规范性25% / 情绪管理20% / 响应时效10% / 增值转化5%。**由多场对练评分聚合而来,不是同一层。**
|
||||
|
||||
**P0(2026-07-05 Demo):单 LLM 考官一次性出结构化分**
|
||||
**P0(2026-07-05 MVP 演示):单 LLM 考官一次性出结构化分**
|
||||
- 输入 `dialogue + rubric + sop_points + persona`,输出固定 JSON;**不做多模型融合**。
|
||||
- **防漂移**:固定模型 + `temperature=0` + 固定 `prompt_version`;首次评分后**缓存 `practice_score`,刷新不重算**;分数用**档位锚点 60/75/90** 减少小数漂移。
|
||||
- **可验收的可解释**:JSON 必带证据 —— `evidence_turn_ids`、`hit_sop_point_ids`、`missed_sop_point_ids`、`rewrite_before/after`;无证据的理由不展示。
|
||||
@@ -315,7 +320,7 @@ INIT → WAITING_INPUT → PROCESSING → WAITING_INPUT(loop) → FINISHED
|
||||
**P1(一期):再拆多模型融合**
|
||||
- SOP 关键点覆盖检测 + 语义相似 + 情感/语音特征融合;Rubric 后台可配置 + 版本 + 启停;一致率校准集 + 人工评审流程。
|
||||
|
||||
**一致率验收口径**:`≥70%` 指**分档一致**(非原始分一致),档位建议 `<60 / 60–74 / 75–89 / ≥90`,用 ≥20 段样本对人工基准评估——**是一期目标,不是 2026-07-05 Demo 目标**;2026-07-05 只验端到端 + 结构化输出。
|
||||
**一致率验收口径**:`≥70%` 指**分档一致**(非原始分一致),档位建议 `<60 / 60–74 / 75–89 / ≥90`,用 ≥20 段样本对人工基准评估——**是一期目标,不是 2026-07-05 MVP 演示目标**;2026-07-05 只验端到端 + 结构化输出。
|
||||
|
||||
### 6.4 Prompt 规格(实际入 `hr-ai` 模板库,均需后端兜底)
|
||||
|
||||
@@ -328,17 +333,17 @@ INIT → WAITING_INPUT → PROCESSING → WAITING_INPUT(loop) → FINISHED
|
||||
|
||||
### 6.5 三角色 P0 / P1 最小切分
|
||||
|
||||
- **P0(2026-07-05 Demo 必须)**:1 场景 × 1 人设 × 1 套 SOP × 1 套 rubric;**文本端到端先跑通**,语音作为外层 ASR/TTS,失败降级文本;`/start /turn /finish` 三接口闭环;每轮轻量 checker + 客户回应;`/finish` 单 LLM 出结构化分;固定 max_turns + 手动结束 + 评分缓存展示。
|
||||
- **P0(2026-07-05 MVP 演示必须)**:1 场景 × 1 人设 × 1 套 SOP × 1 套 rubric;**文本端到端先跑通**,语音作为外层 ASR/TTS,失败降级文本;`/start /turn /finish` 三接口闭环;每轮轻量 checker + 客户回应;`/finish` 单 LLM 出结构化分;固定 max_turns + 手动结束 + 评分缓存展示。
|
||||
- **P1(一期)**:Rubric 后台配置与版本;SOP 覆盖/语义/情绪融合;一致率校准集 + 人工评审;多场景/多 persona/动态难度/错题本/能力画像沉淀;LLM 调用日志/成本/prompt 版本/失败重试。
|
||||
|
||||
---
|
||||
|
||||
## 7. 集成适配层
|
||||
|
||||
| 集成 | 接口/做法 | Demo 兜底 | 优先级 |
|
||||
| 集成 | 接口/做法 | MVP 兜底 | 优先级 |
|
||||
|---|---|---|---|
|
||||
| 组织人员同步 | `hr-sync` 拉取采购系统 API → 写 `sync_*` | 读静态快照文件 | P0 |
|
||||
| 登录/SSO | 一期本地账号(若依) | — | P0(SSO=P2) |
|
||||
| 登录/SSO | 管理端用若依本地账号;移动端用手机号短信登录,验证码通过后自动注册 `app_user` | SSO 不做 | P0(SSO=P2) |
|
||||
| 权限映射 | `role_perm_mapping` 规则引擎 | 手工配置 | P0 |
|
||||
| 大模型 | `hr-ai/chat` 封装公有 API | — | P0 |
|
||||
| ASR/TTS | `hr-ai/asr,tts` 封装第三方(方言) | 1 家 1 条路径 | P0 |
|
||||
@@ -349,7 +354,7 @@ INIT → WAITING_INPUT → PROCESSING → WAITING_INPUT(loop) → FINISHED
|
||||
|
||||
## 8. 权限与数据范围
|
||||
|
||||
- 认证:若依本地账号(一期);SSO 预留 `hr-sync` 对接点(P2)。
|
||||
- 认证:管理端使用若依本地账号;移动端使用短信验证码登录,不存在的手机号自动注册 `app_user`;SSO 预留 `hr-sync` 对接点(P2)。
|
||||
- 授权:`role_perm_mapping` 把外部岗位/组织映射到本地 `role_code`。
|
||||
- **数据范围以项目为主体**:所有业务查询套若依数据权限,按 `party_role.scope_project_ext_org_id` 过滤;主管只见本项目数据。
|
||||
|
||||
@@ -366,7 +371,7 @@ INIT → WAITING_INPUT → PROCESSING → WAITING_INPUT(loop) → FINISHED
|
||||
|
||||
## 10. 实现优先级与里程碑(对齐 MVP 切割线 / 施工单)
|
||||
|
||||
### 10.1 P0(2026-07-05 Demo 必需)
|
||||
### 10.1 P0(2026-07-05 MVP 演示必需)
|
||||
|
||||
- 工程骨架 + 本地登录 + 数据权限(M1/M2)
|
||||
- AI 适配层:chat / asr / tts / score(M9)
|
||||
@@ -382,7 +387,7 @@ INIT → WAITING_INPUT → PROCESSING → WAITING_INPUT(loop) → FINISHED
|
||||
|
||||
### 10.3 P2(二期)
|
||||
|
||||
- 知识图谱(Neo4j)、独立 APP、玉溪 Agent 化、企微/钉钉深度集成、SSO、实时同步、多项目类型(公建/景区)。
|
||||
- 知识图谱(Neo4j)、原生 APP、玉溪 Agent 化、企微/钉钉深度集成、SSO、实时同步、多项目类型(公建/景区)。
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user