用途
job-hunt-fetcher 是 job-hunt 套件的截图解析组件,唯一职责是从用户提供的招聘平台详情页截图中解析 JD 信息,输出标准化 Markdown 文件到 jd-pool。它支持任意招聘平台(Boss直聘、智联招聘、前程无忧、猎聘、拉勾等),只要截图包含公司名、职位名、岗位 JD 等基本信息即可。该组件不做筛选、不做分析、不做改写。
主要能力
- 逐张识别截图字段:title(职位名,必需)、job_description(JD 正文,必需)、company.name(公司名,可选,识别不到设 null),以及薪资、地点、经验、学历等其他可选字段,识别不到设 null。
- 强制规则:一张截图等于一个岗位,不做跨张分组。
- 处理分支:所有截图都能识别出 title + job_description 时直接写入;某些截图缺 title 时向用户询问补充;多张截图字段高度雷同(公司名相同 + 职位名相同)时询问合并或分开。
- 严格禁止编造:任何字段识别不到,要么置 null,要么向用户询问,绝对禁止 LLM 推断或编造公司名、职位名、薪资等任何字段。
使用方式
调用方(job-hunt 主 skill)会传入上下文:work_dir(工作根目录路径)、run_id(本次 run 的时间戳 ID,格式 YYYY-MM-DD-HHMM)、screenshots(本批次用户提供的截图)。
Step 1:识别每张截图。逐张识别字段,并根据分支处理:分支 A 直接进入 Step 2;分支 B 缺 title 时向用户询问,用户回复后写入;分支 C 多张截图雷同时询问合并或分开。用户回复“不知道”“没截到”等时,该截图按“未知职位”处理,company.name 维持原状。
Step 2:解析并写入 jd-pool。对每组截图合并阅读所有图片,提取字段:title、company.name、company.size(规模档位)、company.industry、company.stage、salary.range、salary.monthly_count、location.city、location.district、requirements.experience、requirements.education、tags、benefits、hr.name、hr.title、hr.active_status、posted_at、job_description、job_requirements、company_intro。
规模文本到档位映射:20人以下 → A,20-99人 → B,100-499人 → C,500-999人 → D,1000-9999人 → E,10000人以上 → F。
字段缺失处理:截图截不全时,能提取的字段正常写,提取不到的置为 null,不中断写入。
文件命名规则:有公司名 + 职位名时命名为“公司名-职位名-YYYYMMDDTHHmm.md”;只有职位名(无公司名)时命名为“未知公司-职位名-YYYYMMDDTHHmm.md”;只有公司名(无职位名)时命名为“公司名-未知职位-YYYYMMDDTHHmm.md”;都没有时命名为“screenshot-YYYYMMDDTHHmm.md”。文件名只用于唯一性和可读性,主 skill 扫描 jd-pool 时通过 status.analyzed: false 识别待分析文件,不依赖文件名模式。公司名可以为 null,这是正常情况,不报错、不询问,写入 frontmatter 时 company.name: null 即可。
写入路径:<work_dir>/.work/jd-pool/<文件名>。写入格式为 frontmatter 加正文,包含 id、fetched_at、run_id、source 等元数据,以及 title、company、salary、location、requirements、tags、benefits、hr、posted_at、status 等字段,正文分“岗位职责”“任职要求”“公司介绍”三节(公司介绍为 null 时删除此节)。
解析完成后汇报并返回 ID 列表,汇报格式示例:已解析完成:✅ <公司名>·<职位名>(字段完整)→ 文件:<文件名>;⚠️ <公司名>·<职位名>(<缺失字段>未截到,已置 null)→ 文件:<文件名>。不得输出任何形式的 ID 列表,调用方会通过扫描目录自行获取 ID。
适用场景
适用于需要从招聘平台详情页截图中批量提取 JD 信息并结构化保存的场景,例如求职辅助套件中收集岗位信息、建立岗位池等。只要截图包含公司名、职位名、岗位 JD 等基本信息即可使用,不限制招聘平台。
限制
- 该组件仅负责解析与写入,不做筛选、不做分析、不做改写。
- 不得编造任何字段,识别不到的可选字段置为 null,必需字段缺失时向用户询问。
- 一张截图等于一个岗位,不进行跨张分组。
- 截图完全无法识别(无法识别为招聘详情页、图片损坏等)时跳过该截图,并在汇报中标注。
- 截图包含多个岗位内容混合无法归组时,在分组确认时告知用户,请求重新截图。
- 单个字段提取失败时该字段置为 null,不中断整条 JD。