You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.2 KiB
4.2 KiB
N03 行业技能词云与学习路径接口
Why
当前系统已经具备学生资料、技能标签、岗位匹配和求职进度能力,但学生无法从行业与职位的视角看到“市场在要求哪些技能”,也无法知道自己相对热门技能 TOP10 的掌握程度,更无法直接得到按优先级排列的学习补缺清单。仓库截至 V34 没有技能词云、行业技能热度或个人学习路径实现,现有 student_profiles.skills_json 与 jobs.requirements 也尚未被统一为可查询的技能分类体系。
本变更通过引入 ESCO + O*NET 的开源知识底座,为“行业 → 职位 → 技能分类 → 技能”建立可版本化数据,并为已登录学生提供三个确定性接口:查看词云与 TOP10、计算个人技能匹配度、生成缺失技能学习路径。
What Changes
- 新增 Flyway 词库表,保存行业、职位、技能分类、技能、别名、职位技能关系、O*NET Importance 热度及数据来源版本。
- 首版导入互联网、金融、教育行业及代表性职位;中文名称、别名和细粒度技能分类由项目维护映射。
- 新增
GET /api/v1/skills/word-cloud:按行业、职位、可选技能分类返回全部技能,按热度降序排列。 - 新增
GET /api/v1/skills/match:用当前学生技能命中当前筛选结果 TOP10,返回匹配度、命中技能和缺失技能。 - 新增
GET /api/v1/skills/learning-path:对缺失 TOP10 技能按热度生成优先级和通用学习建议。 - 三个接口仅允许已登录 STUDENT 访问,统一使用现有 JWT、角色校验和
ApiResponse规范。 - 更新 OpenAPI 契约、前端联调文档和词库来源说明。
Scope
In Scope
- ESCO 与 O*NET 的代表性数据导入、中文映射、来源版本和许可归属。
- 行业、职位、技能分类、技能、别名、热度及职位技能关系查询。
- 当前筛选范围内的完整技能词云,以及可由前端直接截取的 TOP10。
- 个人
skills_json与 TOP10 的别名归一化匹配。 - 匹配度按
命中数 / min(10, 实际技能数)计算,实际技能数为 0 时返回 0。 - 缺失技能按同一热度排序生成优先级 1、2、3…。
- 按技能分类生成通用学习建议,不依赖 AI 或外部服务。
- 单元测试、MockMvc 测试、H2 持久化测试和 OpenAPI 静态校验。
Out of Scope
- 平台岗位
jobId、岗位发布频率或实时文本抽取参与热度计算。 - ESCO/O*NET 全量导入、自动翻译全量技能名称、在线同步开源词库。
- 后台词库维护页面、运营导入工具或运行时更新接口。
- AI 生成课程大纲、课程链接、讲师、学习时长或培训平台对接。
- 保存个人匹配历史、学习进度、完成状态或提醒任务。
- 企业和管理员查看学生个人匹配结果。
- 前端页面、交互设计和可视化实现。
Impact
mydreamjob-server/src/main/resources/db/migration:新增词库结构迁移和代表性种子数据。mydreamjob-server/src/main/java/com/mydreamjob:新增技能词云领域包、实体、Repository、Service、DTO 和 Controller,并调整安全配置。mydreamjob-server/src/test/java/com/mydreamjob:新增查询排序、匹配、学习路径和权限场景测试。docs/openapi-rc.json、docs/frontend-integration.md:登记三个接口和响应示例。- 新增词库来源与版本说明文档,保留 ESCO/O*NET 的许可和数据版本。
- 不修改已有岗位匹配、候选人评分、求职进度等已验收接口语义。
Proof of Completion
- Flyway 在 MySQL 模式测试库成功创建词库表并导入代表性数据。
- 三个接口返回统一
ApiResponse,匿名访问为 401,非 STUDENT 为 403。 - 词云结果按 O*NET Importance 降序;无权重技能保留且排在有权重技能之后;同权重排序稳定。
- TOP10 与词云使用同一排序结果,匹配度和学习路径复用该结果。
- 匹配度覆盖 0、少于 10 项、恰好 10 项、全部命中和部分命中场景。
- 学习路径优先级连续,且只包含未命中的 TOP10 技能;无缺口时返回空列表。
mvn test、mvn clean verify和python docs/verify_openapi.py全部通过。