FreeHire 开源招聘系统
一句话简介
基于 Go 构建的开源招聘管理项目,适合用于职位发布、候选人管理和招聘流程协作。
标签
适用应用场景
- 企业发布职位并管理招聘流程
- 招聘团队筛选和跟进候选人
- 中小企业搭建内部招聘管理平台
README 中文摘要
项目概览
freehire 是一个开源 IT 职位聚合与求职管理平台,直接抓取公司官网及其使用的 ATS 系统,汇集超过 330 万条实时职位,覆盖 47 万余家公司、124 个 ATS 平台及 Telegram 频道。职位数据来自 Workday、Greenhouse、Lever、Ashby、iCIMS 等招聘系统,链接始终指向企业原始职位页面,避免招聘机构转载、聚合中间商和失效链接。
项目采用统一职位模式并基于稳定指纹去重,同一职位即使发布在多个渠道,也只保留一条记录。搜索支持按地区、工作方式、资历、技能和薪资筛选,分类依据经过整理的词典,不对缺失信息进行猜测。项目以 MIT 许可证开放,可直接使用托管服务,也可自行部署或作为基础构建扩展功能。
核心特性
除职位目录外,平台还提供职位搜索、保存搜索、邮件与 Telegram 摘要、市场分析以及“幽灵职位”信号检测。求职流程覆盖 ATS 兼容的简历生成、职位与简历确定性匹配、AI 适配分析、简历定制、追踪链接和内推;用户可管理申请阶段、招聘方邮件、事件记录与提醒。
系统内置求职助手,提供聊天、职位浏览、个人资料分析、简历定制和面试演练五种模式。开发者可使用公开 HTTP API、CLI、面向 Claude Desktop 与 Claude Code 的 MCP 服务,以及表单填写浏览器扩展。Chrome 扩展可在职位页面侧栏中分析技能匹配度并辅助填写申请表单。
技术架构与数据来源
后端使用 Go 与 Fiber v2,PostgreSQL 和 pgvector 负责存储、过滤及语义向量;sqlc 从 SQL 生成类型安全的数据访问代码,不使用 ORM。Meilisearch 提供全文和分面搜索,Redis 用于限流与实时广播,S3 兼容对象存储保存简历、头像和预览文件。
LLM 层通过 langchaingo 接入任意 OpenAI 兼容接口,并由 Bifrost 提供用户虚拟密钥、跨供应商回退和消费追踪;Langfuse 用于调用链路监控。前端为 SvelteKit 2、Svelte 5、Tailwind 4 和 adapter-node,Prometheus 与 Grafana 提供采集和 LLM 基础设施监控。
数据来源分为三类:多租户 ATS 平台、第三方职位聚合源,以及企业官网职位源。平台适配器实现统一的 Source 接口,新增公司通常只需在 boards 目录中添加公司、供应商和职位板标识;新增 ATS 则需要编写适配器并注册到 sources.All。
快速开始
# 使用 Docker 构建并启动 API、前端、PostgreSQL、Meilisearch、Redis 和 S3
make up
curl localhost:8080/health
curl localhost:8080/api/v1/jobs
首次初始化 PostgreSQL 数据卷时会自动执行 migrations/ 中的迁移。修改已有迁移后,可使用以下命令重建数据卷,或手动执行待处理迁移:
docker compose down -v && make up
make migrate
8080 端口被占用时可指定其他端口:
HIRE_HOST_PORT=8090 make up
本地开发可仅启动数据库,再在宿主机运行服务:
docker compose up -d db
make run
复制 .env.example 为 .env 后按需调整。JWT_SECRET 为必需配置;OAuth 与 LLM 凭据可选,未设置时相关功能保持禁用。
命令与工作进程
常用命令包括生成 sqlc 代码、整理依赖、连接数据库、重建搜索索引和执行迁移:
make help
make sqlc
make tidy
make psql
make reindex
make migrate
API 服务只负责 HTTP 请求,其余任务由独立的一次性 Worker 执行,可交由定时任务调度:
go run ./cmd/migrate
go run ./cmd/ingest greenhouse
go run ./cmd/enrich
go run ./cmd/embed
go run ./cmd/search-drain
go run ./cmd/reindex
go run ./cmd/tg-ingest
go run ./cmd/tg-extract
go run ./cmd/capture-apply-form
go run ./cmd/backfill-derive
所有 Worker 都需要 DATABASE_URL,失败时返回非零状态。系统不会硬删除职位,生命周期变更采用软关闭。
API 用法
目录提供无需密钥的公开 HTTP API:
curl https://freehire.me/api/v1/jobs
响应统一使用以下结构:
{"data": {}}
{"data": [], "meta": {}}
{"error": "错误信息"}
职位和公司均通过公开 slug 标识。完整端点、筛选参数及认证方式见 freehire.me/docs/api。
添加职位来源
新增企业职位板可通过网站表单提交,或使用命令行工具:
go run ./cmd/add-board \
--provider=greenhouse \
--board=example \
--company=Example \
--apply
如果企业使用的 ATS 已受支持,通常只需添加一行目录记录;如果平台尚未覆盖,则需在 internal/ingest/sources 中实现新的适配器,并通过 Source 接口注册。新增职位板时,系统会在抓取前依据注册表完成校验。
摘要更新于 2026-10-22 01:09:14
· 原文 17316 字符
· md5 60a9fa1f5892…