# Mock Position Select

> 国考模拟选岗。新一年国考职位表尚未发布时,基于近三年真实国考数据帮考生提前选岗:先引导补齐简历核心信息(学历+专业为硬门槛),再按年份分组呈现匹配岗位明细表。触发词:国考模拟选岗、模拟选岗、今年国考能报什么岗、新职位表还没出、提前选岗、按历年国考选岗、国考预选岗、国考职位表还没发布、先看看往年国考岗位。

- Skill: `ahang1598/mock-position-select` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ahang1598/mock-position-select`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ahang1598/mock-position-select/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ahang1598 (https://skillmd.com/u/ahang1598)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/ahang1598/mock-position-select

---


# 国考模拟选岗 Skill

指导 Agent 在**新一年国考职位表尚未发布**时,用近三年真实国考数据做参考选岗:先补齐简历硬条件 → 定位近三年国考公告(剔除补录)→ 逐届取数 → 一次性渲染成按年份分组的岗位明细表。

与 **position-select skill** 的分工:那个 skill 处理「当前有职位表可选」的常规选岗;本 skill 专门处理「目标考试职位表还没出」的提前选岗,用历年数据代偿。触发词不重叠,不要混用。

## 何时使用

- 「今年国考职位表还没出,我能报什么岗?」
- 「帮我按往年国考数据提前选选岗。」「国考模拟选岗。」
- 用户想报国考,但 `exam_search` 里目标年份的公告 `positionNum = 0` 或搜不到 → 主动转本 skill。

**不适用**:用户问的是省考/事业编(本期只覆盖国考);目标年份职位表已发布(走 position-select skill)。

## 1. 开场定预期

第一句话就把口径说清,避免用户误以为在选今年的真岗:

- 新一年国考职位表尚未发布,本次基于**近三年真实国考职位数据**做参考选岗,岗位与竞争情况仅供参考,实际以官方公告为准。
- 模拟选岗全流程都需要登录:登录用户由服务端从请求识别,不需要也无法由你指定;未登录时 `user_resume_get` / `position_select` / `position_group_render` 直接返回 401,先引导用户登录再继续。

## 2. 简历门槛:学历 + 专业硬性,其余一轮引导

先 `user_resume_get` 探测。

**学历或专业任一缺失 → 必须先补,不要跳过。** 这两项是岗位硬过滤的地基,缺了出来的结果没有参考价值。转 **resume skill** 引导:
- 专业必须走 `major_query` 归一化确认后再存;
- `eduBackgrounds` 是**全量覆盖**语义,先读现有教育背景、合并本次改动后传全量。

**其余核心字段(政治面貌 / 应届身份 / 意向地区 / 生日)一轮引导、允许跳过。** 每项说明补了会怎样(「补上生日能筛掉超龄岗」「补上政治面貌才能判断党员限定岗」),用户不接话就按「不限」继续,**不追问第二次**。引导时优先输出选择卡片让用户点选(见 resume skill「交互形态」)。

## 3. 定位近三年国考(含补录过滤)

`exam_search(query="国家公务员考试", filter.examType=["国考"], queryType="ANNOUNCEMENT", limit=20)`。

- **国考是全国统一考试,`filter.region` 必须留空。**
- **剔除补录考试**:`exam_search` 没有补录专用字段,按 `examName` 判断——含「补录」「补充录用」「调剂」的一律排除。补录岗位是残余名额,竞争口径与正常批次不可比,混进来会误导用户。
- 从剩余项里按 `year` 倒序取 **3 个不同年份**、且 `positionNum > 0` 的公告,记下各自 `articleId`。同一年份有多条时取 `positionNum` 最大的那条。
- 相对年份(用户说「今年」)先解析成绝对年份再比。
- 命中不足 3 年就有几年用几年,并向用户说明只找到几年数据。

## 4. 逐届取数

对每个 `articleId` 调**一次** `position_select`:

```
position_select(
  query = "<专业名 + 意向工作内容等自然语言>",
  filter.articleId = <该届公告 id>,
  filter.conditions = { eduBackground, politicStatus, workAddress, ... },
  limit = 20
)
```

硬规则:

- **`filter.region` 留空**(国考不属于任何省);用户的意向工作地放 `conditions.workAddress`。这是 position-select skill 的规则,此处同样适用。
- **专业默认拼进 `query` 做语义召回**,精确匹配靠登录简历里的结构化专业;**首轮不要传 `conditions.majorIds`**——它只收窄不放宽,传了会排除全部「专业不限」岗位。某届结果明显过宽时才对该届补传一次:用 `major_query` 拿到该专业的三级 code(`ID_nnn`),去掉 `ID_` 前缀后的数字作为元素,三级全传;本 skill 每次调用都带了 `filter.articleId`,专业目录已锁定。详见 position-select skill 的「专业的处理」。
- 一届一次调用,不要为同一届反复翻页。

## 5. 一次性渲染成分组表

三届结果**一次性**传 `position_group_render`：

```
position_group_render(
  title   = "近三年国考匹配岗位明细库",
  summary = "近三年共匹配到 8 个岗位，集中在基层法院与税务系统两条线。\n你的专业在司法行政类岗位上召回更稳，建议优先看法院系统。\n补齐基层工作经历后还能解锁一批定向岗位。",
  groups  = [
    { key: "2026", label: "2026年国考", summary: "匹配 18 个岗位,以税务与基层法院为主。", positionIds: [...] },
    { key: "2025", label: "2025年国考", summary: "...", positionIds: [...] },
    { key: "2024", label: "2024年国考", summary: "...", positionIds: [...] }
  ]
)
```

页面形态是**顶部总结性分析 + 下方按年份分 tab 的岗位表**，两处文案分工别写重：

- 顶层 `summary` = 页首的**跨三年整体分析**，可多段（段间用 `\n`），建议不超过 3 段：三年匹配趋势 / 推荐报考方向 / 下一步建议。
- 分组 `summary` = 该 tab 内的**当年一句话特征**（匹配数量、岗位分布），只讲这一年。

其余硬规则：

- **一次调用一张页面**:不要分多次调用拼同一张表,也不要每届单独渲染一次。
- **只传分组标签 + positionId 顺序**:招录单位、职位名称、招录人数、进面分、报录比等客观字段由服务端按 id 回捞,你复述反而可能与真实数据冲突。
- `label` 用人话(「2026年国考」)。
- **整体结论已经在页首 `summary` 里了,渲染后聊天区不要再复述一遍**,直接进第 6 步收尾引导。

## 竞争数据的口径

进面分 / 报录比 / 报名人数都会明文展示在表格里,可以放心谈:

- 表格每一行都直接展示进面分与报录比,不必引导用户跳官网看。
- 但**聊天区不要把表格里已有的数值再罗列一遍**。顶层 `summary` 与分组 `summary` 同理:写岗位数量与分布特征,不逐个抄数字。
- 用户就**某一个具体岗位**追问竞争情况时,拿该岗位的 `history` 口述历年明细(表格只展示最近一年)。
- **不要凭印象猜数字**:`position_select` 没返回的年份就说没有数据。

## 6. 收尾一轮

- 按结果里出现的限定岗类型引导补齐对应简历字段:限户籍岗→户籍;定向生源岗→生源地;退役军人/残疾人等专项岗→特殊身份;基层岗→基层经历 + 年限;民族限定岗→民族。**一轮最多 3 项**,用户不接话就结束。
- 提示可以继续追问某个具体岗位的历年竞争情况。
- 提示新职位表发布后可以重新选一次真岗(国考职位表通常 10 月中下旬发布)。

## 边界与错误处理

- 三届都没匹配岗位:按「放宽条件(去掉某限制、扩大意向地区)」引导重试,而不是直接说没有。
- 某一届取数为空:保留该年分组(表格会显示「该分组暂无匹配岗位」),并在结论里说明那年没有匹配岗位。
- `exam_search` 一条国考公告都没召回(下游异常时返回空 items,不报错):按「暂时取不到历年国考数据,建议稍后重试」兜底,不要用记忆里的年份硬编 articleId。
- 用户问的是省考/事业编:本 skill 只覆盖国考,转 position-select skill 或说明暂不支持按历年省考数据模拟选岗。

