
无API Key也能语义匹配JustHireMe本地ONNX嵌入模型与降级策略实现原理【免费下载链接】JustHireMeLocal-first AI job intelligence workbench for scraping roles, ranking fit, and generating tailored application materials.项目地址: https://gitcode.com/gh_mirrors/ju/JustHireMeJustHireMe 是一款本地优先local-first的 AI 求职情报工作台可以抓取招聘职位、按匹配度排序候选人资料并生成定制化的求职材料。它最巧妙的地方之一不需要任何 API Key就能在离线环境下完成职位描述 vs 你的简历语义匹配——靠的是一个约 23 MB 的本地 ONNX 嵌入模型外加一套三层降级策略保证任何环境下打分引擎都不会停摆。三层嵌入系统一次调用三种保障核心实现在 backend/data/vector/embeddings.py文件头部的注释把整个设计写得很清楚层级提供器维度特点Tier 1ONNX 本地模型all-MiniLM-L6-v2384默认完全离线模型仅约 23 MBTier 2OpenAI APItext-embedding-3-small1536用户主动选择需要 KeyTier 3BLAKE2b 哈希嵌入384内置兜底永远可用用户偏好由设置项embedding_provider决定见 backend/data/sqlite/settings.py取值为onnx/openai/hash。无论选哪个运行时都会走同一条入口embed_texts()批量嵌入文本任何失败都自动穿透到下一层永远返回向量永远不抛异常。Tier 1本地 ONNX 模型如何工作模型文件缓存在本地数据目录的models/all-MiniLM-L6-v2/下。加载是线程安全的懒加载_load_onnx_session()分词截断/补齐到 128 长度启用 ONNX Runtime 全图优化只用 CPU 执行最多 4 线程——普通笔记本即可流畅运行推理输出做均值池化 L2 归一化_onnx_embed()得到 384 维单位向量之后就能用余弦相似度衡量语义距离。Tier 3一个永不失败的哈希兜底hash_embedding() 用 BLAKE2b 把每个 token 哈希进 384 个桶按摘要字节决定正负号累加最后归一化。它不具备真正的语义理解React 和 JavaScript 不会因此更近但确定性强、零依赖、零网络——这是系统能永不宕机的最后一道保险。零配置体验模型自动下载与后台预热用户完全不用手动装模型。应用启动后调度器会在后台线程里执行预热backend/api/scheduler.py调用 ensure_onnx_model()若偏好是hash或已配置带 Key 的 OpenAI直接跳过若模型文件缺失则从 Hugging Face 拉取 4 个文件model.onnx、tokenizer 等优先用huggingface_hub缺失时退化为标准库urllib直连下载成功后重置会话并加载离线或下载失败则静默保留哈希兜底绝不影响启动。桌面版还会更彻底运行时打包安装器backend/data/vector/runtime.py会把 ONNX 模型连同 LanceDB、Playwright 一起打进runtime pack一次性装好前端通过 SemanticRuntimePrompt.tsx 这条横幅轮询安装进度无需任何命令行操作。降级策略详解比能跑起来更重要的是跑得诚实这是本项目最值得学习的设计。降级链是onnx → hash、openai → hash但有两个容易忽略的关键细节1. 维度保护⚠️ OpenAI 的向量表宽度是 1536ONNX 是 384。所以降级到哈希时必须按对应表的维度生成——openai失败时回退hash1536onnx失败时回退hash384embed_texts()。维度不匹配会静默污染整张向量表这是很多降级成功却数据损坏的事故的根源。2. 诚实的状态上报✅ embedding_status() 会区分配置的是谁和实际在跑的谁如果 ONNX 会话已加载但某次推理失败回退到了哈希状态立刻变为mode: hashingdegraded: true并附上具体错误原因下一次调用成功后又自动恢复上报为onnx——自愈且诊断页不会假装健康。这套行为有专门回归测试守护backend/tests/test_embedding_honesty.py。降级如何影响打分窗口语义匹配分数由 backend/ranking/semantic.py 计算把 JD 嵌入后在 LanceDB 的 skills / projects / experiences / credentials 四张表里做余弦检索semantic_fit()按项目 0.34、经历 0.26、技能 0.22、证书 0.10、档案 0.08的权重合并输出 0–100 的 Semantic fit 信号。由于真实语义模型产生的余弦相似度普遍高于哈希向量分数拉伸窗口按提供器模式分别标定第 474–492 行ONNX / OpenAI(combined − 0.20) / 0.55哈希降级(combined − 0.15) / 0.55本地画像回退LanceDB 不可用(combined − 0.06) / 0.30这样即使降级到哈希分数也不会失真成人人 95 分或人人 20 分。小结这套架构给开发者的三个启示本地小模型 云端大模型 纯算法兜底的三层组合是离线可用、在线增强、永不失败的经典配方降级要按存储结构对齐维度、口径否则兜底反而制造脏数据诚实上报比静默容错更有价值——让用户知道现在是降级模式比假装一切正常更值得信任。相关延伸阅读语义匹配主流程backend/ranking/semantic.py嵌入提供器与降级backend/data/vector/embeddings.py运行时打包与模型安装backend/data/vector/runtime.py降级诚实性测试backend/tests/test_embedding_honesty.py【免费下载链接】JustHireMeLocal-first AI job intelligence workbench for scraping roles, ranking fit, and generating tailored application materials.项目地址: https://gitcode.com/gh_mirrors/ju/JustHireMe创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考