基于多源异构数据 + 大模型 + 知识图谱,新一代信息技术领域岗位能力分析平台。
git clone https://github.com/Talent-Star-Map/XINGTU.git
cd XINGTU
docker compose up -d浏览器打开 http://localhost:3000
# 1. 启动数据库(云服务器已部署可跳过此步,本地后端直连云库)
docker compose up -d mysql # MySQL on localhost:3307
# 2. 启动后端
cd backend && pip install -r requirements.txt
python -m uvicorn main:app --host 0.0.0.0 --port 8081 --reload
# 3. 启动前端
cd frontend && npm install
npm run dev
# 4.(可选)初始化种子数据
# 在 Navicat 中依次执行以下 SQL 文件(连接 xingtu 库后运行):
# - backend/sql/seed_users.sql # 求职者 Xing + 企业端 Tu 测试账号
# - backend/sql/seed_admin.sql # 默认管理员 admin@xingtu.com
# - backend/sql/seed_rcx.sql # 企业端测试数据(10 求职者 + 10 岗位 + 10 匹配记录)
# - backend/sql/seed_jobs.sql # 爬虫主表 15 条种子岗位数据前端构建命令
npm run build=tsc --noEmit && vite build,会先做 TypeScript 类型检查。 只想查类型不打包用npm run typecheck。提交前建议跑一次 build, 早期只跑vite build时类型错误会被静默放过。
浏览器打开 http://localhost:5173
| 角色 | 邮箱 | 密码 | 用户名 |
|---|---|---|---|
| 求职者 | xing@test.com | Xing123 | |
| 企业 | tu@test.com | Tu123 | Tu |
| 管理员 | admin@xingtu.com | Admin1234 | 系统管理员 |
管理员端入口在角色选择页底部"管理员入口"按钮。质检功能(数据质量报告、准确率测试等)已集中到管理员端,求职端/企业端不再展示。 账号通过
backend/sql/seed_users.sql和backend/sql/seed_admin.sql初始化,幂等可重复执行。
| 服务 | 本地 | 服务器 |
|---|---|---|
| 前端 | http://localhost:3000 | http://180.76.227.159:3000 |
| 后端 API | http://localhost:8081 | http://180.76.227.159:8081 |
| MySQL | localhost:3307 | 180.76.227.159:3308(Navicat 直连) |
数据库连接说明:
- 云服务器 MySQL 已映射到宿主机 3308 端口(容器内 3306)
- 本地后端默认通过
backend/.env的DATABASE_URL直连云库180.76.227.159:3308- Navicat 连接:主机
180.76.227.159,端口3308,用户root,密码Xingtu123,库xingtu- 云安全组需放行 3308 端口(建议限制源 IP 为本机公网 IP)
| 表名 | 用途 | ORM 模型 |
|---|---|---|
jobs |
爬虫整合主表(31 列,求职者端浏览市场岗位/文章) | database.py::CrawledJob |
enterprise_jobs |
企业端发布岗位表(14 列,企业端 TalentSearch/JobManage/Dashboard) | database.py::Job |
jobseekers |
求职者账号表 | database.py::Jobseeker |
enterprises |
企业端账号表 | database.py::Enterprise |
admins |
管理员账号表 | database.py::Admin |
match_records |
人岗匹配记录表 | database.py::MatchRecord |
verify_codes |
验证码表 | database.py::VerifyCode |
user_skills |
用户已掌握技能(按岗位区分) | SQL 直接操作 |
diagnosis_history |
诊断历史记录(含完整技能数据) | SQL 直接操作 |
learning_progress |
学习进度(按用户+岗位+技能) | SQL 直接操作 |
skill_resources |
技能学习资源(管理员后台维护,33 技能 88 条) | database.py::SkillResource |
llm_configs |
模型配置表(管理员端「模型配置」页面维护,LLM 路由层读取) | database.py::LlmConfig |
⚠️ 注意jobs和enterprise_jobs是两张不同的表:
jobs= 爬虫采集的真实市场岗位(求职者端浏览)enterprise_jobs= 企业自己发布的岗位(企业端管理)- 命名刻意区分以避免冲突,前后端引用时务必看准
所有种子脚本位于 backend/sql/,在 Navicat 中打开执行即可(幂等,可重复运行):
| 脚本 | 作用 |
|---|---|
seed_users.sql |
求职者 Xing/Xing123 + 企业端 Tu/Tu123 测试账号 |
seed_admin.sql |
默认管理员 admin@xingtu.com / Admin1234 |
seed_rcx.sql |
企业端测试数据:10 求职者 + 10 岗位(enterprise_jobs) + 10 匹配记录 |
seed_jobs.sql |
爬虫主表(jobs) 15 条种子岗位数据 |
密码哈希说明:脚本中的密码用 bcrypt(salt_rounds=12) 预计算,后端 auth.py 用 bcrypt.checkpw 校验,完全兼容。
重置密码命令:
python -c "import bcrypt; print(bcrypt.hashpw('新密码'.encode(), bcrypt.gensalt()).decode())"已通过 .gitignore 排除 node_modules/、dist/、*.db,各自本地安装即可。
后端三项核心指标(JD 解析 / 简历提取 / 人岗匹配)各有独立验证脚本,纯 Python 直跑,不依赖数据库、网络与 LLM:
cd backend
python tests/test_jd_parser.py # JD 技能解析 F1 0.9553(104 条 JD)
python tests/test_resume.py # 简历技能提取 F1 0.9533(100 条简历)
python tests/test_job_agent.py # 人岗匹配 Top-5 1.0000 / MRR 0.9525(全量约 7 分钟,--quick 更快)
python tests/test_our_modules.py # 纯函数单测 20 PASS
python tests/test_quality.py # 质检模块单测 14 PASS测试集在 backend/test_data/(104 条 JD + 100 条简历 + 100 组匹配对),口径细节见 docs/作品设计实现方案书.md §8。
React + Vite + TypeScript + FastAPI + SQLAlchemy + MySQL + Docker