From aa4a88c10bb317448458ec35988dfdad1b3c35c4 Mon Sep 17 00:00:00 2001 From: RoyirinRosmontis Date: Mon, 24 Aug 2026 12:01:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8A=80=E6=9C=AF=E6=A0=88?= =?UTF-8?q?=E6=B8=85=E5=8D=95=E6=96=87=E6=A1=A3=EF=BC=88docs/CareerNexus?= =?UTF-8?q?=E8=81=8C=E8=81=94=5F=E6=8A=80=E6=9C=AF=E6=A0=88.md=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/CareerNexus职联_技术栈.md | 122 +++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 docs/CareerNexus职联_技术栈.md diff --git a/docs/CareerNexus职联_技术栈.md b/docs/CareerNexus职联_技术栈.md new file mode 100644 index 0000000..46772a1 --- /dev/null +++ b/docs/CareerNexus职联_技术栈.md @@ -0,0 +1,122 @@ +# 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 零配置,存储边界已隔离可随时切换 |