招聘主流程
CRITICAL — 开始前 MUST 读取 ../beisen-shared/SKILL.md
容易混淆的概念,先分清楚再回答:
- 候选人 vs 申请:候选人是人,申请是这个人投在某个职位下的流程记录。同一个人可以有多条申请,阶段、评分、推荐理由都挂在申请上,不要跨申请混用。
- 职位 vs 招聘需求:需求(HC)是「要招几个人、招得怎么样了」,职位是对外发布的岗位与要求。问进度查需求,问职责要求查职位;两者可以关联,但不是一回事。
- 招聘通知 vs 审批待办:候选人推荐、面试变更这类提醒走招聘通知;员工自己发起或待办的审批与各类待办走审批清单。名字像,来源不同。
- 人才推荐 ≠ 候选人:人才推荐是按职位算出来的「可能合适的人」,不代表已进入招聘流程。
路由优先级
本 Skill 处理:招聘主流程(职位搜索与详情、AI推荐人才、候选人申请详情与申请列表、人才库推荐候选人搜索、异步任务)
不归本 Skill 处理:
命令速查
| 场景 |
CLI 命令 |
说明 |
| 搜索职位 |
beisen-cli recruitment job searchJobs |
按职位名称/编码/状态/招聘分类分页查询 |
| 查询职位详情 |
beisen-cli recruitment job getJobDetail |
按 jobId 获取职位完整信息 |
| AI 推荐人才 |
beisen-cli recruitment_ai job bs_recommend_candidates_by_job |
按职位批量查询 AI 推荐候选人 |
| 查询应聘者申请列表 |
beisen-cli recruitment apply bs_search_apply_list |
按职位/姓名/状态/筛选结果等查询申请列表 |
| 查询候选人申请详情 |
beisen-cli recruitment apply bs_get_apply_detail |
按 applyId 批量查询申请详情 |
| 搜索人才库候选人 |
beisen-cli recruitment_ai talentPool bs_search_candidates_in_talentpool |
按职位要求搜索推荐候选人(异步) |
| 查询异步任务结果 |
beisen-cli recruitment_ai async_task bs_get_async_task_status |
轮询异步任务执行结果 |
| 取消异步任务 |
beisen-cli recruitment_ai async_task bs_cancel_async_task |
取消进行中的异步任务 |
命令示例
# 搜索职位(按职位名称,第 1 页)
beisen-cli recruitment job searchJobs --data '{"jobTitle":"Java开发","page":0,"pageSize":10}'
# 搜索招聘中职位(按状态筛选)
beisen-cli recruitment job searchJobs --data '{"jobStatus":1,"page":0,"pageSize":20}'
# 查询职位详情
beisen-cli recruitment job getJobDetail --data '{"jobId":"<jobId>"}'
# AI 推荐人才(支持批量职位)
beisen-cli recruitment_ai job bs_recommend_candidates_by_job --data '{"jobIds":["<jobId>"],"pageIndex":0,"pageSize":30}'
# 查询应聘者申请列表(某职位)
beisen-cli recruitment apply bs_search_apply_list --data '{"jobId":"<jobId>","pageIndex":0,"pageSize":30}'
# 查询应聘者申请列表(按姓名/AI评估/筛选结果过滤)
beisen-cli recruitment apply bs_search_apply_list --data '{"jobId":"<jobId>","aiEvaluateResults":[3],"filterResults":[4],"pageIndex":0,"pageSize":30}'
# 查询候选人申请详情(支持批量)
beisen-cli recruitment apply bs_get_apply_detail --data '{"applyIds":["<applyId>"]}'
# 搜索人才库推荐候选人(异步任务,需轮询结果)
beisen-cli recruitment_ai talentPool bs_search_candidates_in_talentpool --data '{"jobRequirements":"3-5年Java开发经验,本科及以上","pageIndex":0,"pageSize":10}'
# 查询异步任务结果
beisen-cli recruitment_ai async_task bs_get_async_task_status --data '{"taskId":"<taskId>"}'
工作流程
搜索职位:用户要找工作/职位时,执行 beisen-cli recruitment job searchJobs,通过 --data 传入职位名称(jobTitle)、状态(jobStatus)、招聘分类(recruitType)、分页参数。展示职位名称、职位编号、部门、状态、申请数等关键字段。
职位详情:用户需要查看某个职位的完整信息时,先通过 searchJobs 获取 jobId,再执行 beisen-cli recruitment job getJobDetail --data '{"jobId":"<id>"}'。展示职位名称、部门、招聘人数、薪资范围、工作地点、工作年限、学历要求、工作职责、任职资格、负责人、招聘流程、申请情况等。
AI 推荐人才:用户需要某职位的 AI 推荐候选人时,执行 beisen-cli recruitment_ai job bs_recommend_candidates_by_job --data '{"jobIds":["<jobId>"],"pageIndex":0,"pageSize":30}'。展示推荐候选人摘要(应聘者姓名、性别、年龄、工作年限、学历、毕业学校、专业、最近任职公司、最近任职职位、匹配度星级、推荐亮点),以上列出的字段必须全部展示,即使值为空也不省略。候选人属于 L2 敏感数据,不回显原始 JSON。
应聘者申请列表:用户需要查某职位下候选人申请列表(如待筛选简历、按阶段/状态/筛选结果过滤)时,执行 beisen-cli recruitment apply bs_search_apply_list --data '{"jobId":"<jobId>",...}'。常用过滤条件:searchType(0=全部, 1=待处理/未处理,用户说"待处理""未处理""待处理的简历"时设为 1)、phaseName(阶段名称,如"简历初筛""面试""Offer环节"等)、statusName(状态名称,如"未处理""进行中""本轮通过""本轮淘汰"等)、filterResults(筛选结果:1=通过,2=待定,3=淘汰,4=未筛选)、aiEvaluateResults(AI 评估:0=未发起,1=评估中,2=评估失败,3=非常符合,4=不符合,5=基本符合,6=信息不足)、interviewStatuses(面试状态:0=未安排,1=已安排)、offerStatuses(Offer 状态)、entryStatuses(入职状态)、signInStates(签到状态:1=未签到,2=已签到,3=未到场)。候选人信息属于 L2 敏感数据,仅展示摘要(姓名、性别、年龄、工作年限、学历、毕业学校、专业、最近任职公司、最近任职职位、AI评估简历结果、AI评估简历理由、最初投递渠道、申请创建时间、所在阶段状态),以上列出的字段必须全部展示,即使值为空也不省略。
候选人申请详情:用户需要查看某位候选人的申请详情时,先通过 bs_search_apply_list 获取 applyId,再执行 beisen-cli recruitment apply bs_get_apply_detail --data '{"applyIds":[...]}'。
人才库搜索:用户需要按职位要求推荐人才库候选人时,执行 beisen-cli recruitment_ai talentPool bs_search_candidates_in_talentpool --data '{"jobRequirements":"<职位要求>","pageIndex":0,"pageSize":10}'。该接口为异步任务,需按 references/recruitment-demand.md 的轮询流程处理。
异步任务:当人才库搜索、面试质量分析、竞品情报等返回 taskId 时,用 bs_get_async_task_status 轮询直到 isFinished == true,从 resultJson 解析结果。
输出格式约束
- 禁止生成 JSON 文件:不得将查询结果以 JSON 文件形式输出给用户
- CSV 表头必须使用中文:生成 CSV 文件时,表头禁止使用英文字段名(如 name、educationLevel、phaseStatus),必须使用中文(如"姓名""学历""阶段状态")
执行原则
- 所有入参通过
--data 以 JSON 字符串传递,不使用 --query/--page/--size 等分散标志
jobId、applyId、taskId 必须从 CLI 返回中提取,严禁编造
searchJobs 的 jobCode/jobTitle 按需填写,分页参数 page/pageSize 必须提供
- 职位信息属于 L1 内部数据,正常展示;候选人信息属于 L2 敏感数据,仅展示摘要
- 展示约束:向用户展示数据时,只展示中文语义值(如"面试中""非常符合"),不展示原始编码名或字段名(如
phaseName、statusName、aiEvaluateResults 等),不展示枚举数字(如 0、1、3 等)
- 分页处理:
searchJobs 返回 total 字段,若 page 未到最后页,提醒用户存在更多结果
- 异步任务轮询间隔 2-5 秒,最长等待不超过 5 分钟;失败时读取
errorMessage 向用户说明
命令分组与参考
| 分组 |
参考文件 |
覆盖命令 |
| 职位管理 |
references/job-management.md |
searchJobs, getJobDetail, bs_recommend_candidates_by_job |
| 候选人/申请/人才库 |
references/candidate-search.md |
bs_search_apply_list, bs_get_apply_detail, bs_search_candidates_in_talentpool |
| 异步任务 |
references/recruitment-demand.md |
bs_get_async_task_status, bs_cancel_async_task |
Playbook 案例
案例 1:搜索职位并查看详情
用户问:"有没有 Java 开发的职位?"
执行步骤:
- 前置检查(beisen-shared 的 Step 1-3)
- 执行
beisen-cli recruitment job searchJobs --data '{"jobTitle":"Java开发","page":0,"pageSize":10}'
- 展示匹配职位列表(职位名称、部门、招聘状态)
- 用户选择某个职位后,用返回的
jobId 执行 getJobDetail 查看详情
案例 2:查看某职位的待处理简历
用户问:"查一下软件测试工程师职位的待处理简历"
执行步骤:
- 前置检查
- 用
searchJobs 或已知 jobId 定位职位
- 执行
beisen-cli recruitment apply bs_search_apply_list --data '{"jobId":"<jobId>","filterResults":[4],"pageIndex":0,"pageSize":30}'(filterResults=4 表示未筛选/待处理)
- 展示申请列表摘要(姓名、性别、年龄、工作年限、学历、毕业学校、专业、最近任职公司、最近任职职位、AI评估简历结果、AI评估简历理由、最初投递渠道、申请创建时间、所在阶段状态),候选人属于 L2 敏感数据,仅展示摘要
案例 3:人才库推荐候选人
用户问:"帮我从人才库推荐几个符合岗位要求的候选人"
执行步骤:
- 前置检查
- 执行
beisen-cli recruitment_ai talentPool bs_search_candidates_in_talentpool --data '{"jobRequirements":"<用户描述的职位要求>","pageIndex":0,"pageSize":10}'
- 提取返回的
taskId,轮询 bs_get_async_task_status 直到 isFinished == true
- 从
resultJson 解析候选人列表,展示摘要(姓名、当前职位、匹配度等 L2 摘要信息)
详细参考
- references/job-management.md:职位管理命令详细参数与返回格式
- references/candidate-search.md:候选人申请与人才库搜索命令
- references/recruitment-demand.md:异步任务管理与轮询协议
不在本 Skill 范围
1---2name: beisen-recruitment3description: 北森招聘主流程。本 Skill 覆盖职位搜索与详情、AI推荐人才、候选人申请详情与申请列表、人才库推荐候选人搜索、异步任务管理与轮询。当用户询问职位、招聘岗位、候选人、申请、人才库、简历推荐、JD 等招聘主流程问题时触发。面试相关(招聘进展、面试官待办、面试质量分析、竞品情报、招聘需求)请走 beisen-interview。4---5
6# 招聘主流程
7
8**CRITICAL — 开始前 MUST 读取 [../beisen-shared/SKILL.md](../beisen-shared/SKILL.md)**
9
10容易混淆的概念,先分清楚再回答:
11
12- **候选人 vs 申请**:候选人是人,申请是这个人投在某个职位下的流程记录。同一个人可以有多条申请,阶段、评分、推荐理由都挂在申请上,不要跨申请混用。
13- **职位 vs 招聘需求**:需求(HC)是「要招几个人、招得怎么样了」,职位是对外发布的岗位与要求。问进度查需求,问职责要求查职位;两者可以关联,但不是一回事。
14- **招聘通知 vs 审批待办**:候选人推荐、面试变更这类提醒走招聘通知;员工自己发起或待办的审批与各类待办走审批清单。名字像,来源不同。
15- **人才推荐 ≠ 候选人**:人才推荐是按职位算出来的「可能合适的人」,不代表已进入招聘流程。
16
17## 路由优先级
18
19本 Skill 处理:招聘主流程(职位搜索与详情、AI推荐人才、候选人申请详情与申请列表、人才库推荐候选人搜索、异步任务)
20
21不归本 Skill 处理:
22- 招聘进展 / 面试官待办 / 面试质量分析 / 竞品情报 / 招聘需求 → [../beisen-interview/SKILL.md](../beisen-interview/SKILL.md)
23- offer 审批流程 → [../beisen-approval/SKILL.md](../beisen-approval/SKILL.md)
24- 员工档案查询 → [../beisen-employee-profile/SKILL.md](../beisen-employee-profile/SKILL.md)
25
26## 命令速查
27
28| 场景 | CLI 命令 | 说明 |
29|------|---------|------|
30| 搜索职位 | `beisen-cli recruitment job searchJobs` | 按职位名称/编码/状态/招聘分类分页查询 |
31| 查询职位详情 | `beisen-cli recruitment job getJobDetail` | 按 jobId 获取职位完整信息 |
32| AI 推荐人才 | `beisen-cli recruitment_ai job bs_recommend_candidates_by_job` | 按职位批量查询 AI 推荐候选人 |
33| 查询应聘者申请列表 | `beisen-cli recruitment apply bs_search_apply_list` | 按职位/姓名/状态/筛选结果等查询申请列表 |
34| 查询候选人申请详情 | `beisen-cli recruitment apply bs_get_apply_detail` | 按 applyId 批量查询申请详情 |
35| 搜索人才库候选人 | `beisen-cli recruitment_ai talentPool bs_search_candidates_in_talentpool` | 按职位要求搜索推荐候选人(异步) |
36| 查询异步任务结果 | `beisen-cli recruitment_ai async_task bs_get_async_task_status` | 轮询异步任务执行结果 |
37| 取消异步任务 | `beisen-cli recruitment_ai async_task bs_cancel_async_task` | 取消进行中的异步任务 |
38
39## 命令示例
40
41```bash
42# 搜索职位(按职位名称,第 1 页)
43beisen-cli recruitment job searchJobs --data '{"jobTitle":"Java开发","page":0,"pageSize":10}'
44
45# 搜索招聘中职位(按状态筛选)
46beisen-cli recruitment job searchJobs --data '{"jobStatus":1,"page":0,"pageSize":20}'
47
48# 查询职位详情
49beisen-cli recruitment job getJobDetail --data '{"jobId":"<jobId>"}'
50
51# AI 推荐人才(支持批量职位)
52beisen-cli recruitment_ai job bs_recommend_candidates_by_job --data '{"jobIds":["<jobId>"],"pageIndex":0,"pageSize":30}'
53
54# 查询应聘者申请列表(某职位)
55beisen-cli recruitment apply bs_search_apply_list --data '{"jobId":"<jobId>","pageIndex":0,"pageSize":30}'
56
57# 查询应聘者申请列表(按姓名/AI评估/筛选结果过滤)
58beisen-cli recruitment apply bs_search_apply_list --data '{"jobId":"<jobId>","aiEvaluateResults":[3],"filterResults":[4],"pageIndex":0,"pageSize":30}'
59
60# 查询候选人申请详情(支持批量)
61beisen-cli recruitment apply bs_get_apply_detail --data '{"applyIds":["<applyId>"]}'
62
63# 搜索人才库推荐候选人(异步任务,需轮询结果)
64beisen-cli recruitment_ai talentPool bs_search_candidates_in_talentpool --data '{"jobRequirements":"3-5年Java开发经验,本科及以上","pageIndex":0,"pageSize":10}'
65
66# 查询异步任务结果
67beisen-cli recruitment_ai async_task bs_get_async_task_status --data '{"taskId":"<taskId>"}'
68```
69
70## 工作流程
71
721. **搜索职位**:用户要找工作/职位时,执行 `beisen-cli recruitment job searchJobs`,通过 `--data` 传入职位名称(`jobTitle`)、状态(`jobStatus`)、招聘分类(`recruitType`)、分页参数。展示职位名称、职位编号、部门、状态、申请数等关键字段。
73
742. **职位详情**:用户需要查看某个职位的完整信息时,先通过 `searchJobs` 获取 `jobId`,再执行 `beisen-cli recruitment job getJobDetail --data '{"jobId":"<id>"}'`。展示职位名称、部门、招聘人数、薪资范围、工作地点、工作年限、学历要求、工作职责、任职资格、负责人、招聘流程、申请情况等。
75
763. **AI 推荐人才**:用户需要某职位的 AI 推荐候选人时,执行 `beisen-cli recruitment_ai job bs_recommend_candidates_by_job --data '{"jobIds":["<jobId>"],"pageIndex":0,"pageSize":30}'`。展示推荐候选人摘要(应聘者姓名、性别、年龄、工作年限、学历、毕业学校、专业、最近任职公司、最近任职职位、匹配度星级、推荐亮点),以上列出的字段必须全部展示,即使值为空也不省略。候选人属于 **L2 敏感数据**,不回显原始 JSON。
77
784. **应聘者申请列表**:用户需要查某职位下候选人申请列表(如待筛选简历、按阶段/状态/筛选结果过滤)时,执行 `beisen-cli recruitment apply bs_search_apply_list --data '{"jobId":"<jobId>",...}'`。常用过滤条件:`searchType`(0=全部, 1=待处理/未处理,用户说"待处理""未处理""待处理的简历"时设为 1)、`phaseName`(阶段名称,如"简历初筛""面试""Offer环节"等)、`statusName`(状态名称,如"未处理""进行中""本轮通过""本轮淘汰"等)、`filterResults`(筛选结果:1=通过,2=待定,3=淘汰,4=未筛选)、`aiEvaluateResults`(AI 评估:0=未发起,1=评估中,2=评估失败,3=非常符合,4=不符合,5=基本符合,6=信息不足)、`interviewStatuses`(面试状态:0=未安排,1=已安排)、`offerStatuses`(Offer 状态)、`entryStatuses`(入职状态)、`signInStates`(签到状态:1=未签到,2=已签到,3=未到场)。候选人信息属于 **L2 敏感数据**,仅展示摘要(姓名、性别、年龄、工作年限、学历、毕业学校、专业、最近任职公司、最近任职职位、AI评估简历结果、AI评估简历理由、最初投递渠道、申请创建时间、所在阶段状态),以上列出的字段必须全部展示,即使值为空也不省略。
79
805. **候选人申请详情**:用户需要查看某位候选人的申请详情时,先通过 `bs_search_apply_list` 获取 `applyId`,再执行 `beisen-cli recruitment apply bs_get_apply_detail --data '{"applyIds":[...]}'`。
81
826. **人才库搜索**:用户需要按职位要求推荐人才库候选人时,执行 `beisen-cli recruitment_ai talentPool bs_search_candidates_in_talentpool --data '{"jobRequirements":"<职位要求>","pageIndex":0,"pageSize":10}'`。该接口为**异步任务**,需按 [references/recruitment-demand.md](references/recruitment-demand.md) 的轮询流程处理。
83
847. **异步任务**:当人才库搜索、面试质量分析、竞品情报等返回 `taskId` 时,用 `bs_get_async_task_status` 轮询直到 `isFinished == true`,从 `resultJson` 解析结果。
85
86## 输出格式约束
87
88- **禁止生成 JSON 文件**:不得将查询结果以 JSON 文件形式输出给用户
89- **CSV 表头必须使用中文**:生成 CSV 文件时,表头禁止使用英文字段名(如 name、educationLevel、phaseStatus),必须使用中文(如"姓名""学历""阶段状态")
90
91## 执行原则
92
93- 所有入参通过 `--data` 以 JSON 字符串传递,不使用 `--query`/`--page`/`--size` 等分散标志
94- `jobId`、`applyId`、`taskId` 必须从 CLI 返回中提取,严禁编造
95- `searchJobs` 的 `jobCode`/`jobTitle` 按需填写,分页参数 `page`/`pageSize` 必须提供
96- 职位信息属于 L1 内部数据,正常展示;候选人信息属于 L2 敏感数据,仅展示摘要
97- **展示约束**:向用户展示数据时,只展示中文语义值(如"面试中""非常符合"),不展示原始编码名或字段名(如 `phaseName`、`statusName`、`aiEvaluateResults` 等),不展示枚举数字(如 0、1、3 等)
98- 分页处理:`searchJobs` 返回 `total` 字段,若 `page` 未到最后页,提醒用户存在更多结果
99- 异步任务轮询间隔 2-5 秒,最长等待不超过 5 分钟;失败时读取 `errorMessage` 向用户说明
100
101## 命令分组与参考
102
103| 分组 | 参考文件 | 覆盖命令 |
104|------|---------|---------|
105| 职位管理 | [references/job-management.md](references/job-management.md) | searchJobs, getJobDetail, bs_recommend_candidates_by_job |
106| 候选人/申请/人才库 | [references/candidate-search.md](references/candidate-search.md) | bs_search_apply_list, bs_get_apply_detail, bs_search_candidates_in_talentpool |
107| 异步任务 | [references/recruitment-demand.md](references/recruitment-demand.md) | bs_get_async_task_status, bs_cancel_async_task |
108
109## Playbook 案例
110
111### 案例 1:搜索职位并查看详情
112
113用户问:"有没有 Java 开发的职位?"
114
115执行步骤:
1161. 前置检查(beisen-shared 的 Step 1-3)
1172. 执行 `beisen-cli recruitment job searchJobs --data '{"jobTitle":"Java开发","page":0,"pageSize":10}'`
1183. 展示匹配职位列表(职位名称、部门、招聘状态)
1194. 用户选择某个职位后,用返回的 `jobId` 执行 `getJobDetail` 查看详情
120
121### 案例 2:查看某职位的待处理简历
122
123用户问:"查一下软件测试工程师职位的待处理简历"
124
125执行步骤:
1261. 前置检查
1272. 用 `searchJobs` 或已知 `jobId` 定位职位
1283. 执行 `beisen-cli recruitment apply bs_search_apply_list --data '{"jobId":"<jobId>","filterResults":[4],"pageIndex":0,"pageSize":30}'`(filterResults=4 表示未筛选/待处理)
1294. 展示申请列表摘要(姓名、性别、年龄、工作年限、学历、毕业学校、专业、最近任职公司、最近任职职位、AI评估简历结果、AI评估简历理由、最初投递渠道、申请创建时间、所在阶段状态),候选人属于 L2 敏感数据,仅展示摘要
130
131### 案例 3:人才库推荐候选人
132
133用户问:"帮我从人才库推荐几个符合岗位要求的候选人"
134
135执行步骤:
1361. 前置检查
1372. 执行 `beisen-cli recruitment_ai talentPool bs_search_candidates_in_talentpool --data '{"jobRequirements":"<用户描述的职位要求>","pageIndex":0,"pageSize":10}'`
1383. 提取返回的 `taskId`,轮询 `bs_get_async_task_status` 直到 `isFinished == true`
1394. 从 `resultJson` 解析候选人列表,展示摘要(姓名、当前职位、匹配度等 L2 摘要信息)
140
141## 详细参考
142
143- [references/job-management.md](references/job-management.md):职位管理命令详细参数与返回格式
144- [references/candidate-search.md](references/candidate-search.md):候选人申请与人才库搜索命令
145- [references/recruitment-demand.md](references/recruitment-demand.md):异步任务管理与轮询协议
146
147## 不在本 Skill 范围
148
149- 招聘进展 / 面试官待办 / 面试质量分析 / 竞品情报 / 招聘需求 → [../beisen-interview/SKILL.md](../beisen-interview/SKILL.md)
150- offer 审批流程 → [../beisen-approval/SKILL.md](../beisen-approval/SKILL.md)
151- 员工入职后的档案管理 → [../beisen-employee-profile/SKILL.md](../beisen-employee-profile/SKILL.md)