招聘过程中的摩擦
一个岗位需要反复切换 JD、搜索引擎、LinkedIn、候选人页面和表格,最后还要手工整理成可以比较的结论。
- 英文 JD 与本地 HR 的阅读和判断之间存在转换成本
- 职位名称、Boolean Search、目标公司通常靠经验临时拼接
- 候选人页面信息不完整,抓到的内容也不一定能直接使用
个人作品 · Recruiting AI
这是一个面向 HR 的本地招聘工作台:从一份岗位 JD 出发,自动整理搜索策略、研究目标公司、处理候选人资料,并把结果交给 HR 审核,而不是让模型直接替人做不可逆的决定。
定位:个人作品集 Demo · 本地部署 · 人机协作 · 不自动发送或骚扰候选人
实机演示
这段录屏展示海外招聘助手的实际界面:岗位信息、策略生成与人才搜索在同一个本地工作台中流转,HR 可以随时回看、调整和确认。
演示内容为本地测试环境。视频中的人才信息与界面状态仅用于说明工作流,不代表真实招聘决策或自动触达行为。
为什么做它
海外人才搜索往往卡在信息分散、职位词不统一、候选人履历难以比较,以及 AI 结果无法解释和接续执行。这个项目把这些碎片连接起来。
一个岗位需要反复切换 JD、搜索引擎、LinkedIn、候选人页面和表格,最后还要手工整理成可以比较的结论。
让模型负责理解、整理和提出建议,让确定性代码负责边界、状态和执行,让 HR 把时间放在真正需要判断的地方。
AI 策略层
每个 Agent 都有明确输入、输出、失败状态和运行记录,严格串行读取上游结果。这样可以知道问题发生在哪一步,也可以只重跑受影响的节点。
理解本次请求,标准化岗位信息,并判断最早需要重跑的节点。
负责路由,不替其他 Agent 做决定生成标准职位名、扩展职位词、职级变体和排除词。
保留目标市场的真实职位语言拆解职责、Must-have、Preferred、Risk 与候选人分层。
不让模型输出任意数字权重在受控的公开 HTTPS 范围内研究目标公司,输出匹配理由。
搜索失败时可安全回退到模型知识汇总前序结果,生成可编辑的 LinkedIn 搜索轮次与约束。
只生成计划,不直接操作浏览器从输入到结果
可以直接使用英文岗位描述,例如 International Business Development Sales Manager (Hong Kong)。系统不会强迫 HR 先把岗位翻译成另一套格式。
系统把职位词、Boolean Search、目标公司、地区约束、Must-have 和 Risk 组织成一份只读策略。HR 可以通过自然语言修改,后端从最早受影响的 Agent 开始重跑。
TargetCompanyAgent 只能调用固定的公司搜索和公开页面读取工具,接受 HTTPS、GET/HEAD、超时与正文预算等约束。网页文字只是参考内容,不能改变 Agent 角色或审批策略。
浏览器扩展按计划执行搜索、筛选、收集、打开档案和导入等原子步骤。每一步都有租约、心跳、失败分类和恢复语义,模型不能临时生成 CSS selector 或 shell 命令。
LinkedIn 页面内容经过清理、去噪和结构化,整理为工作经历、教育、项目、技能、评分证据与触达建议。邮件最多生成草稿,发送仍需要 HR 的最终确认。
将跨境业务合作、渠道拓展和项目落地经历归纳为可快速浏览的中文要点,同时保留原始职位与公司名称,方便 HR 对照原页面。
评分理由引用结构化履历片段,而不是只给一个无法追溯的总分。
Candidate Intelligence
这个项目的重点不是把所有 DOM 原样搬进后台,而是把噪声清理掉,再用模型完成中文整理和结构化,让候选人的经历、项目和技能可以被整体浏览。
工程设计
模型擅长理解非结构化信息,确定性代码擅长做边界和状态机。两者分工清晰,系统才不会因为一次模型输出就失去可控性。
FastAPI + SQLite + React 本地运行,业务数据和运行记录保存在当前电脑。模型只接收经过边界处理的必要信息。
邮箱、电话、凭据和原始网页内容不进入不必要的模型输入、SSE 或普通日志;邮箱来源和审批绑定可审计。
模型不能改变审批门、工具白名单、访问域名、评分硬门或浏览器动作。每次执行前后都有后端校验。
每个 Agent 节点与浏览器步骤独立记录状态。失败只重试当前安全范围,旧计划失效时不会继续使用。
技术栈与实现
International business development sales manager (Hong Kong) → 中文策略理解 + 国际职位词保留 + 海外业务拓展相关 Boolean Search + 目标公司研究 + 候选人中文履历整理。
诚实的项目边界
我更希望展示如何把 AI 变成可靠的工作流组件,而不是把所有能力都写成“自动完成”。