添加岗位标签处理
This commit is contained in:
@@ -94,10 +94,11 @@ UPDATE app_job_data SET clean_status=0 WHERE clean_status=1 AND updated_at < NOW
|
||||
### 2.2 参考数据准备
|
||||
|
||||
应用启动时加载并缓存(定期刷新):
|
||||
- `bg_job_category` 全量:拼成 `id:name` 文本列表
|
||||
- `bg_industry` 全量:拼成 `id:name` 文本列表
|
||||
- `bg_job_category` 全量:只取叶子节点(level=3),拼成 `id:name(一级/二级)` 文本列表
|
||||
- `bg_industry` 全量:只取叶子节点(level=2),拼成 `id:name(一级)` 文本列表
|
||||
- `bg_skill_tag` 全量:按 `categoryId` 分组缓存为 `Map<Long, List<SkillTag>>`,供第二次 AI 调用使用
|
||||
|
||||
这两份列表作为 prompt 的一部分传给AI,ID由人工维护为短数字,不使用雪花ID。
|
||||
分类和行业列表作为 prompt 的一部分传给AI,ID由人工维护为短数字,不使用雪花ID。
|
||||
|
||||
地区数据(`bg_china_regions_code`)不传给AI,由Java侧根据AI返回的城市名自行匹配。
|
||||
|
||||
@@ -162,7 +163,41 @@ UPDATE app_job_data SET clean_status=0 WHERE clean_status=1 AND updated_at < NOW
|
||||
|
||||
步骤 2-7 放在一个短事务中,保证数据一致性。
|
||||
|
||||
### 2.5 设计决策记录
|
||||
### 2.5 技能标签匹配(第二次 AI 调用)
|
||||
|
||||
`bg_skill_tag` 是预定义的技能标签池,挂在岗位类型下,用于岗位-简历匹配度计算。与 `bg_job.skill_tags`(自由文本,展示用)是两套东西。
|
||||
|
||||
#### 关联表
|
||||
|
||||
```sql
|
||||
CREATE TABLE bg_job_skill_tag_relation (
|
||||
id BIGINT NOT NULL,
|
||||
job_id BIGINT NOT NULL COMMENT '岗位ID',
|
||||
skill_tag_id BIGINT NOT NULL COMMENT '技能标签ID',
|
||||
create_time DATETIME NOT NULL COMMENT '创建时间',
|
||||
PRIMARY KEY (id),
|
||||
INDEX idx_job_id (job_id),
|
||||
INDEX idx_skill_tag_id (skill_tag_id),
|
||||
UNIQUE INDEX uk_job_skill (job_id, skill_tag_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='岗位-技能标签关联表';
|
||||
```
|
||||
|
||||
#### 流程
|
||||
|
||||
1. 第一次 AI 调用完成后,拿到 `categoryId`
|
||||
2. 从缓存取该 `categoryId` 下的 skillTag 列表,为空则跳过
|
||||
3. 发起第二次 AI 调用:传岗位标题+职责+要求 + 该分类下的标签列表(`id:name`),AI 返回匹配的标签 ID 数组
|
||||
4. 校验返回的 ID 确实存在于该 categoryId 的标签池中(防幻觉)
|
||||
5. 写入 `bg_job_skill_tag_relation`(在 saveJobData 事务中一并写入)
|
||||
6. 第二次 AI 调用失败不影响岗位入库,仅日志记录
|
||||
|
||||
#### prompt 规则
|
||||
|
||||
- 只能从给定列表中选择,不允许自创
|
||||
- 不限制个数,不重复即可
|
||||
- 只返回 ID 数组,如 `[1, 3, 7]`
|
||||
|
||||
### 2.6 设计决策记录
|
||||
|
||||
| 决策点 | 结论 | 原因 |
|
||||
|--------|------|------|
|
||||
@@ -175,6 +210,10 @@ UPDATE app_job_data SET clean_status=0 WHERE clean_status=1 AND updated_at < NOW
|
||||
| skillTags 数量 | 最多8个 | 控制数量,保持精炼 |
|
||||
| source_id 取值 | app_job_data.id | 简单直接,用于去重 |
|
||||
| 公司不存在时 | 自动创建 status=0 待完善 | 后续由公司数据补充逻辑完善 |
|
||||
| skillTag 存储方式 | 独立关联表 bg_job_skill_tag_relation | 百万级数据量,JSON查询性能差 |
|
||||
| skillTag 匹配时机 | 第二次 AI 调用,岗位入库后 | 需要先确定 categoryId 才能缩小标签范围 |
|
||||
| skillTag 与 skill_tags 的关系 | 两套独立数据 | skill_tags 是展示用自由文本,skillTag 是计算用预定义标签 |
|
||||
| 第二次 AI 失败是否影响入库 | 不影响 | 标签匹配是增强功能,不阻断主流程 |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -70,6 +70,7 @@ offerpie/back-end
|
||||
│ ├─ CompanyMapper.java # 公司Mapper
|
||||
│ ├─ JobMapper.java # 岗位Mapper
|
||||
│ ├─ JobRegionRelationMapper.java # 岗位-地区关联Mapper
|
||||
│ ├─ JobSkillTagRelationMapper.java # 岗位-技能标签关联Mapper
|
||||
│ ├─ IndustryMapper.java # 行业Mapper
|
||||
│ ├─ SkillTagMapper.java # 技能标签Mapper
|
||||
│ ├─ UserJobFavoriteMapper.java # 用户收藏岗位Mapper
|
||||
@@ -91,6 +92,7 @@ offerpie/back-end
|
||||
│ │ ├─ Company.java # 公司表(bg_company)
|
||||
│ │ ├─ Job.java # 岗位表(bg_job)
|
||||
│ │ ├─ JobRegionRelation.java # 岗位-地区关联表(bg_job_region_relation)
|
||||
│ │ ├─ JobSkillTagRelation.java # 岗位-技能标签关联表(bg_job_skill_tag_relation)
|
||||
│ │ ├─ Industry.java # 行业字典表(bg_industry)
|
||||
│ │ ├─ SkillTag.java # 技能标签表(bg_skill_tag)
|
||||
│ │ ├─ UserJobFavorite.java # 用户收藏岗位表(bg_user_job_favorite)
|
||||
@@ -133,6 +135,7 @@ offerpie/back-end
|
||||
| `Industry` | manager | 行业字典表(bg_industry),树形结构,一级/二级分类。 |
|
||||
| `SkillTag` | manager | 技能标签表(bg_skill_tag),挂在岗位类型下,不分级,用于匹配度计算。 |
|
||||
| `UserJobDislike` | manager | 用户不感兴趣记录表(bg_user_job_dislike),记录用户对岗位的不感兴趣原因,冗余公司ID/地区编码/行业ID方便推荐过滤。 |
|
||||
| `JobSkillTagRelation` | manager | 岗位-技能标签关联表(bg_job_skill_tag_relation),预定义技能标签与岗位的关联,用于匹配度计算。 |
|
||||
| `AppJobData` | manager | 爬虫岗位原始数据表(app_job_data),存储爬虫抓取的原始岗位数据,供清洗服务读取并写入业务表。 |
|
||||
|
||||
## 4️⃣ 权限体系设计
|
||||
|
||||
Reference in New Issue
Block a user