# CareerNexus 职联 · 技术栈清单 > 记录本项目实际使用的全部技术栈(2026-08,与代码仓库一致)。 > 选型总原则:**离线优先、零重依赖、单命令启动、可复现**。 --- ## 一、语言与运行时 | 技术 | 版本 | 用途 | |---|---|---| | Python | 3.11+(开发环境 3.13) | 后端、算法、数据管线、脚本 | | JavaScript(原生) | ES2020+ | 前端全部交互(无 TypeScript/无构建) | | Node.js | 20+ | 仅用于前端语法检查与逻辑单测(不参与运行) | ## 二、后端 | 技术 | 版本 | 用途 | |---|---|---| | FastAPI | ≥0.110 | REST 接口层(20+ 端点,统一响应格式/任务轮询/静态托管) | | Uvicorn | ≥0.29 | ASGI 服务(127.0.0.1:9008,可切 0.0.0.0 + Token 鉴权) | | Pydantic | v2 ≥2.6 | 全链路数据模型与 Schema 强校验(JD/抽取/图谱/匹配/简历) | | httpx | ≥0.27 | LLM API 与 Embedding API 调用 | | networkx | ≥3.2 | 时序知识图谱的底层有向图结构 | | python-docx | ≥1.1 | 简历 DOCX 解析、规范简历 DOCX 导出 | | pypdf | ≥4.0 | 简历 PDF 文本与内嵌照片提取 | | reportlab | 仅样例生成 | 中文演示 PDF 样例制作(非运行依赖) | ## 三、前端(零构建、完全离线) | 技术 | 说明 | |---|---| | 原生 HTML/CSS/JS | 无 React/Vue/npm,FastAPI 直接托管静态文件 | | Canvas 2D | 图谱力导向/同心分层/职级分带/时序四种布局渲染、趋势图、雷达图、甘特图 | | 自研设计系统 | 设计 token(主色 #2f54eb)、组件库(按钮/tag/卡片/抽屉/弹窗/分段控件)、内联 SVG 图标 | | sysDialog 组件族 | 统一系统弹窗(sysPrompt/sysConfirm/sysAlert/sysCopy),替代浏览器原生弹窗 | | cnFetch | 统一网络层:业务化中文错误、屏蔽内部细节、原位重试 | | localStorage/sessionStorage | 视图状态、备注、学习记录、引导标记缓存 | ## 四、数据与存储 | 技术 | 用途 | |---|---| | 自研 TemporalKG(时序知识图谱) | 岗位-技能关系带生效区间/变更事件/证据源,任意时点切片 | | JSON 快照(graph.json) | 图谱持久化与快速加载 | | SQLite(标准库 sqlite3,WAL) | 应用状态库:审核留痕 audit_log、候选 review_candidates、任务 tasks、人工覆写 job_overrides | | JSONL | JD 语料交换格式(jd_raw/、data/real/) | | config.yaml + config.json | 静态配置 + 运行时设置(设置面板持久化,白名单键) | | 文件系统 data/ | 语料/测试集/词表/简历/报告分目录治理 | ## 五、算法(全部纯 Python 自实现,无重型 ML 框架) | 算法 | 实现 | |---|---| | MinHash LSH 近重复检测 | 256 哈希签名 + 5-gram shingles + 16 band 分带(抄袭 JD 聚簇) | | 时间衰减加权 | w=exp(-λ·age),抑制 JD 时滞 | | TF-IDF + 凝聚聚类 | 字符 2/3-gram 向量化、平均链接贪心合并(新岗位发现) | | 时序演化分析 | 季度窗口加权频次对比 → 新增/增强/减弱/退出事件 | | 新岗位四指标判定 | 支撑 JD 数/独立企业数/双年窗口增长率/与既有岗位差异度 | | Kahn 拓扑分层 | 学习路径按技能前置关系分层 + 每阶段 ≤3 技能拆分 | | 四维加权匹配评分 | 必备 50%/加分 15%/经验 20%/场景 15%,权重可配 | | 技能归一化四级容错 | 词表别名 → 包含匹配 → 类别迁移 → BGE-M3 语义召回(阈值 0.62) | | 简历解析 | 正则族 + 版面分节 + 脱敏(姓名/手机/邮箱/住址)+ 照片提取 | ## 六、AI 模型 | 模型 | 接入方式 | 用途 | |---|---|---| | 讯飞星火 Spark 4.0 Ultra | OpenAI 兼容 API(JSON 模式 + Schema 校验 + 失败重试 + 离线降级) | JD 结构化抽取主通道(密钥经设置面板注入) | | BGE-M3 | sentence-transformers 本地权重(models/bge-m3,4.3GB) | 语义相似召回兜底(词表外技能映射) | | 通义千问 text-embedding-v4 | DashScope OpenAI 兼容 API(可选替代本地权重) | 联网语义向量 | | 离线确定性抽取器 | 技能词表 + 版面规则(无模型) | 全部 AI 通道的降级兜底 | ## 七、测试与评测 | 技术 | 用途 | |---|---| | pytest + pytest-cov | 77 个单元/接口/持久化测试,覆盖率 ≥80% | | node 逻辑单测 | tests/test_frontend_logic.js(49 个前端纯函数用例) | | 自研 evaluate.py | 三层指标:合成集(100%)/ 真实 JD(AutoWeakS,F1 99.8%)/ 真实简历(100%) | | run_demo.py | 端到端冒烟(pipeline + 图谱 + 匹配示例) | ## 八、部署与运维 | 技术 | 用途 | |---|---| | Docker(python:3.11-slim) | 一体化镜像;`INCLUDE_EMBED=1` 可选语义增强变体 | | docker-compose | app 编排 + Neo4j `advanced` profile(可选) | | Neo4j 5 Community(可选) | 生产图数据库增强,scripts/sync_neo4j.py MERGE 幂等同步 | | init.bat / init.sh | 一键初始化(venv + 依赖镜像站安装 + 离线默认配置 + 数据集生成) | | start.bat / start.sh | 一键启动(项目内 venv 直起服务,自动开浏览器) | | ModelScope | BGE-M3 权重国内镜像下载(设置面板一键配置管线) | ## 九、数据源 | 数据集 | 授权 | 用途 | |---|---|---| | AutoWeakS(北大/人大,arXiv:2012.14234) | 论文公开语料 | 真实 JD 语料(2915 条被动接入)+ 500 条真实评测集 | | AIStudio 中文简历标注集 | CC0 | 200 份真实简历评测 | | Chinese_resume 数据集 | 公开(研究用途) | 批量匹配演示简历(脱敏后 32 份) | | ISCO/ESCO 国际职业分类 | EU 公开 | 岗位标准外部锚点 | | 程序生成语料(seed=2026) | 自产 | 1720 条演示 JD、176 条测试集、词表 179 项、匹配标注 52 对 | ## 十、版本与协作 | 技术 | 用途 | |---|---| | Git + Gitea | 代码托管(`https://git.bu4.ren/RoyirinRosmontis/CareerNexus.git`) | | .gitignore/.dockerignore | 数据内容、密钥配置、模型权重不入库/不进镜像 | --- ## 已评估未采用(及原因) | 技术 | 未采用原因 | |---|---| | React/Vue + AntV G6 | 引入 npm 构建链,违背"零构建离线" | | FAISS / BGE reranker / BM25 引擎 | 需模型权重或额外服务;词表归一化 + 透明加权已满足精度 | | BERTopic / HDBSCAN | 重依赖;纯 Python TF-IDF + 凝聚聚类可复现且足够 | | GLiNER | 重型 NER 模型;离线确定性抽取器更轻且确定性更强 | | RAGAS | 需在线评测框架;evaluate.py 字段级 F1 + 真实数据集评测已覆盖 | | PostgreSQL | 单机演示规模用不上;SQLite 零配置,存储边界已隔离可随时切换 |