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

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 全部通过。