【免费下载链接】freehire
freehire — the open-source search engine for job seekers
freehire是一个开源的求职搜索引擎,它内置的人才网络(Talent Network)允许你把简历中的技能、职级、城市等信息以匿名卡片的形式开放给招聘方浏览——全程不暴露姓名、公司和联系方式。这篇文章带你了解:人才网络是什么、如何一键加入、公开卡片到底会显示什么,以及全部隐私开关(含已淘汰的public模式)背后的设计逻辑,帮你把档案安全地开放出去。
人才网络是什么?为什么是"匿名"的
一句话概括:人才网络是一个公开的、匿名的候选人目录。
- 你上传/解析好的简历,会被投影成一张"卡片":职级、技能、工作年限、城市、时区、教育层次、认证等;
- 招聘方访问 人才目录(
/talent)时可以按技能、职级、城市等条件筛选,但看不到你的真名; - 卡片链接使用随机生成的 handle(如
/talent/backend-7f2a),永远不等于你的用户名或邮箱。
核心设计原则:卡片上出现的每一个字符串,要么是系统词典标准化解析后的值,要么是数字或日期——你亲手输入的自由文本(公司名、学校名、项目描述)一律不会出现在公开页面上。这条规则比"打码"更严格,详见 internal/candidate/talentnetwork/doc.go。
一键加入人才网络:两步完成
加入过程非常轻量,现在对所有登录用户开放(不再需要 beta 邀请):
- 进入个人资料页(
/my/profile):页面上会出现一张人才网络邀请卡片,也可以直接在设置中找到人才网络开关;邀请卡片的显示逻辑见 web/src/lib/talentInvite.ts; - 打开开关:后端会先为你的账户铸造一个 handle(见下文),再把可见性写为
anonymous。
注意一个细节:加入的前提不是"开关打开",而是"开关 + 已有一份结构化简历"。如果你先加入但还没有上传简历,你仍是成员、拥有 handle,但卡片不会出现在目录里(接口会返回listed: false,防止设置页给你一条指向 404 的链接)。这个判断在 internal/api/handler/me_talent_network.go#L64-L77 中实现。
隐私开关全解:只有两个状态了
这是很多老用户最关心的变化。users.talent_network_visibility字段现在只有两个合法值:
| 状态 | 含义 | 说明 |
|---|---|---|
off | 不在人才网络 | 默认值。不加入 = 完全不公开 |
anonymous | 匿名加入 | 公开卡片固定展示"匿名投影",不可自定义 |
早期的第三态public(公开模式)已被正式淘汰:产品不再询问候选人"你愿意公开多少",公开投影被固定为一套脱敏后的标准内容,加入与否是唯一的决定。迁移脚本会把你原有的public自动改写为anonymous,只会收窄披露、绝不把你移出你曾选择加入的网络——见 migrations/0148_talent_network_two_states.sql。
API 层面,PUT /me/talent-network只接受off或anonymous,其他值一律返回 400;且修改开关只允许 Cookie(网页端登录态)操作,API Key 只能读取——一个泄露的 API Key 不能擅自把你的档案挂到公开网络上。这些规则在 internal/api/handler/me_talent_network.go#L49-L56 与 docs/API.md 的 Talent Network 章节中有完整说明。
公开卡片到底显示什么(与绝不显示什么)
卡片由ProjectCard从结构化简历中投影而来,字段清单见 internal/candidate/talentnetwork/card.go:
会显示的:
- 职级(Seniority)与职业类别(Category)——由词典从职位标题解析;
- 总工作年限(数字);
- 技能列表——每个技能 token 必须能被技能词典解析为标准名,解析不了的一律丢弃("绝不猜测"规则);
- 工作历史:每个职位的标题原文、职级、类别、起止时间、技术栈(技能同样需通过词典);
- 教育:仅学历层次 + 年份(学校名称和所学专业不显示);
- 认证:仅词典能确认的标准认证名;
- 城市(规范化后的城市名)、时区(IANA 时区)、你在个人资料里勾选的方向(specializations)。
绝不显示的:
- 姓名、邮箱、任何联系方式;
- 公司名(包括写在职位标题里的,例如 "Backend Engineer @ XX");
- 学校名、专业、认证机构、自由文本描述。
这里采用的是白名单而非黑名单思路:如果是"逐个打码敏感字段",将来简历解析新增任何字段都会默认被公开;而白名单下,新字段默认隐藏,直到有人显式把它加进来——出错方向是"少显示",而不是"泄露"。
你的专属 handle:URL 里不出现你的名字
每个成员有一张公开卡片页/talent/<handle>(如/talent/backend-7f2a),页面源码在 web/src/routes/talent/[handle]/+page.svelte。handle 的设计有几个讲究(见 internal/candidate/talentnetwork/handle.go):
- 格式:
职业类别-4位随机后缀。后缀从 32 个字符的字母表里随机抽取,刻意排除了l、o、0、1——因为 handle 可能被念出来、照着截图敲出来; - 故意不用你的用户名:用户名通常来自邮箱前缀,也就是你的名字,把它放进一个"以隐藏名字为目的"的页面 URL 里等于自拆台;
- 终身不变:handle 在第一次加入时铸造,之后离开再重新加入,URL 保持不变(铸造逻辑见 internal/candidate/talentnetwork/join.go#L39-L46)。你分享出去的链接不会失效;
- 不含职级:类别(如
backend)稳定,职级(如 Senior)一变,写死的 URL 就会和你的卡片对不上,所以职级刻意不进 handle。
照片会被强制模糊,且"退出即消失"
如果你上传过头像,卡片上会有一张头像——但公开接口只返回经过重度模糊、无法辨认的版本,原图永远不会通过任何公开路由流出(模糊实现在 internal/candidate/headshot/blur.go)。
围绕"离开"这件事还有一组防缓存设计(见 internal/api/handler/talent_catalog.go):
- 卡片接口的缓存头是
private, max-age=60+X-Robots-Tag: noindex:关闭 CDN 级别的共享缓存,保证你一旦退出,下一个请求就拿不到你的卡片,而不是等某个中间代理的缓存过期; - "handle 不存在""成员已退出""成员没传照片"三种情况返回完全相同的 404——外部无法通过响应差异探测某个账户是否存在或曾经是成员;
- 公开目录接口配有独立的限流预算:一份可机器读取的完整人员名单,是爬虫一夜之间就能复制走的东西,限流是唯一的防线。
招聘方如何找到你:目录筛选与 Facets
招聘方(或任何访客)无需登录即可浏览/talent目录,支持的筛选维度全部是闭集值:职业类别、职级、技能、时区、城市、方向、最低年限,对应GET /talent、GET /talent/facets、GET /talent/{handle}三个公开接口(参数说明见 docs/API.md)。
前端把技能按职业方向分组展示,模型在 web/src/lib/talentRailGroups.test.ts 与 web/src/lib/talentFacetModel.ts 中;筛选器实现位于 web/src/lib/talentFilters.ts。2026 年 9 月起,目录列表对搜索引擎开放索引(个人卡片页除外),让"人才网络"本身可以被搜到——背景见 web/src/posts/2026-09-13-talent-network-open-to-everyone.svx。
常见问题
Q:退出人才网络需要多久生效?下一次请求即生效。卡片接口直接读数据库而非内存快照,且禁用共享缓存,所以不存在"退出后还能搜到"的窗口期。
Q:我的简历解析失败会影响加入吗?不会。CV 不可读只是 handle 退化为中性前缀candidate-xxxx,不会拒绝你加入;但如前所述,没有结构化简历的成员不会出现在目录里。
Q:我能自定义显示哪些字段吗?不能,这正是设计目标:公开投影是固定且匿名化的,你唯一的决定是加入或不加入。方向(specializations)可以在个人资料页勾选,但同样来自固定的词表。
Q:public模式去哪了?已在 migrations/0148_talent_network_two_states.sql 中淘汰。原有public用户被自动改为anonymous(内容只会变少不会变多)。如果旧客户端仍提交public,接口会返回 400 而不是报错。
小结:3 步安全开放档案
- 完善并上传结构化简历(技能、经历越规范,卡片越完整);
- 在个人资料页打开人才网络开关,获得终身不变的
/talent/<handle>链接; - 随时关闭开关——退出即时生效,URL 保留,卡片从目录与搜索结果中消失。
freehire 人才网络的核心哲学就一句话:你不需要暴露自己,也能被对的人找到——公开的最小集合由系统词典严格把关,加入与否的钥匙始终在你手里。
【免费下载链接】freehire
freehire — the open-source search engine for job seekers
相关推荐
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考