面向电气工程及其自动化、能源电力、电网、新能源、自动化控制等方向应届生的招聘信息自动化收集与 AI 分析系统。系统通过 FastAPI 提供 WebUI 和 API,使用 SQLite 存储职位数据,内置 32 个招聘信息爬虫,支持 12 小时定时采集、日报/周报生成。
浏览器 WebUI
|-- 仪表盘 / 职位列表 / 职位详情
|-- AI 总结 ChatBox
| |-- 左侧:日报 / 周报 / 最近对话
| |-- 中间:总结内容、对话追问、思考过程展示
| `-- 设置:Provider / API Key / 模型 / 思考强度
|
v
FastAPI 应用
|-- Web 路由:Jinja2 页面渲染
|-- API 路由:职位查询 / 统计 / 采集触发 / 总结生成 / 对话
|-- Settings API:模型提供方、API Key、模型列表配置
|-- APScheduler:12 小时采集 / 每周日 20:00 周报
|
+--> 爬虫模块
| |-- 发电集团 / 电网 / 核电 / 装备制造
| |-- 新能源 / 电动汽车 / 招聘平台 / 高校就业网
|
+--> AI 模块
| |-- DeepSeek 日报 / 周报生成
| |-- OpenAI 兼容接口
| |-- Anthropic Messages API
| `-- Gemini:通过设置面板添加自定义提供方支持
|
v
SQLite 数据库
|-- companies
|-- jobs
|-- summary_logs
|-- provider_configs
|-- chat_sessions
`-- chat_messages
- Python 3.10+
- FastAPI + Uvicorn
- SQLAlchemy Async + aiosqlite
- SQLite
- Jinja2
- Tailwind CSS CDN
- APScheduler
- httpx + BeautifulSoup4
- OpenAI SDK 兼容 DeepSeek / OpenAI 兼容接口
- Anthropic HTTP API 调用
- Gemini API 模式:通过自定义 Provider 支持
- cpca:中文地点识别与省级筛选辅助
- python-dotenv + pydantic-settings
- marked.js:AI 总结 Markdown 渲染
双击 start.bat 即可完成 Python 检查、依赖安装、.env 初始化、目录创建、数据库表初始化和服务启动。
启动后访问:
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
copy .env.example .env
python run.pyLinux/macOS 环境:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
python run.py- 仪表盘:展示今日新增职位、来源分布、类别分布和最新职位。
- 职位列表:支持关键词搜索、分类过滤、类型过滤、来源过滤和省级地点筛选。
- 职位详情:查看岗位描述、专业要求、发布时间、截止时间和来源链接。
- AI 总结 ChatBox:左侧展示日报、周报和最近对话;中间展示总结内容并支持继续追问。
- 多模型支持:内置 DeepSeek、OpenAI、Anthropic;Gemini 可通过设置面板添加自定义提供方使用。
- 思考强度调节:支持
off、low、medium、high、xhigh、max,实际可选项由 Provider 配置决定。 - 自动采集:当前注册 32 个爬虫,默认每 12 小时自动运行一次。
- 手动采集:仪表盘可点击“手动触发采集”,也可调用 API。
- 定时周报:每周日 20:00 自动生成最近 7 天招聘周报。
- API 文档:FastAPI 自动提供
/docs交互式接口文档。
当前 run_all_crawlers() 注册 32 个爬虫,按来源类型分组如下。
- 国家电网招聘平台:
SGCCCrawler - 南方电网招聘:
CSGCrawler - 中国华能:
HuanengCrawler - 中国大唐:
DatangCrawler - 中国华电:
HuadianCrawler - 国家能源集团:
GuonengCrawler - 国家电投:
GuodianCrawler - 中国电建:
PowerChinaCrawler - 中国能建:
EnergyChinaCrawler
- 中核集团:
CNNCCrawler - 中广核:
CGNCrawler
- 中国电气装备:
CEEGCrawler - 汇川技术:
InovanceCrawler - 西门子:
SiemensCrawler - ABB:
ABBCrawler - 施耐德电气:
SchneiderCrawler
- 宁德时代:
CATLCrawler - 隆基绿能:
LongiCrawler - 阳光电源:
SungrowCrawler - 金风科技:
GoldwindCrawler - 华为数字能源:
HuaweiDigitalCrawler
- 比亚迪:
BYDCrawler - 蔚来:
NIOCrawler - 小鹏汽车:
XPengCrawler
- BOSS 直聘:
BossCrawler - 51job:
Job51Crawler - 智联招聘:
ZhilianCrawler - 北极星电力网:
BeixingCrawler
- 华北电力大学就业网:
NCEPUCrawler - 上海电力大学就业网:
SHIEPCrawler - 东北电力大学就业网:
NEEPUCrawler - 三峡大学就业网:
CTGUCrawler
爬虫统一写入 companies 和 jobs 表,职位来源 URL 作为去重依据。
- 日报:默认汇总当天新增职位,包含岗位概览、重点推荐、行业趋势和应届生建议。
- 周报:默认汇总最近 7 天新增职位,对比上一周期,分析企业、岗位类型、地区分布和下周关注方向。
- 自动生成:采集结束后会尝试生成日报;每周日 20:00 定时生成周报。
- 手动生成:仪表盘可点击“生成今日日报”,也可调用
/api/summaries/generate。
如果指定周期内没有新增职位,系统会跳过总结生成并返回提示。
AI 总结页提供交互体验:
- 左侧列表:日报、周报、最近对话。
- 中间聊天区:展示总结内容、用户追问和模型回复。
- 上下文关联:选择某条日报/周报后继续追问,系统会把该总结作为上下文。
- 会话保存:对话存入
chat_sessions和chat_messages。 - 思考过程:支持返回 reasoning content 的模型会展示思考过程折叠面板。
内置 Provider:
- DeepSeek:
deepseek-chat、deepseek-reasoner - OpenAI:
gpt-4o、gpt-4o-mini、o4-mini - Anthropic:
claude-fable-5、claude-opus-4-8、claude-sonnet-4-6、claude-haiku-4-5
Gemini 支持方式:
- 打开
/summaries。 - 点击右上角设置按钮。
- 添加自定义提供方。
api_mode选择gemini。- 填写 Gemini API Key,并获取或手动填写模型列表。
思考强度由 Provider 的 effort_levels 控制。OpenAI 推理模型会映射为 reasoning_effort;Anthropic 和 Gemini 会映射为各自的 thinking budget。
首次运行 start.bat 时,如果不存在 .env,会从 .env.example 复制生成。常用配置如下:
DATABASE_URL=sqlite+aiosqlite:///data/jobs.db
DEEPSEEK_API_KEY=your_deepseek_key_here
DEEPSEEK_BASE_URL=https://api.deepseek.com
DEEPSEEK_MODEL=deepseek-chat
CRAWL_INTERVAL_HOURS=12
OPENAI_API_KEY=your_openai_key_here
ANTHROPIC_API_KEY=your_anthropic_key_here说明:
DATABASE_URL:数据库连接地址,默认使用项目内data/jobs.db。DEEPSEEK_API_KEY:日报、周报默认使用的 DeepSeek API Key。DEEPSEEK_BASE_URL:DeepSeek API 地址。DEEPSEEK_MODEL:日报、周报默认调用的模型。CRAWL_INTERVAL_HOURS:自动采集间隔,默认 12 小时。OPENAI_API_KEY/ANTHROPIC_API_KEY:ChatBox 使用对应内置 Provider 时的环境变量配置方式。
打开 /summaries 后点击设置按钮,可以在 WebUI 中:
- 查看内置 Provider。
- 保存或更新 API Key。
- 修改 Provider 的 API Host、API Path 和模型列表。
- 新增自定义 Provider。
- 为自定义 Provider 选择
openai_compatible、anthropic或gemini模式。 - 获取 Provider 模型列表。
内置 Provider 不能改名或改变 API 模式;自定义 Provider 可以删除。
# 触发全量采集
curl -X POST http://127.0.0.1:8000/api/crawl/trigger
# 获取统计信息
curl http://127.0.0.1:8000/api/stats
# 查询职位
curl "http://127.0.0.1:8000/api/jobs?page=1&page_size=20&keyword=电气"
# 生成日报
curl -X POST http://127.0.0.1:8000/api/summaries/generate ^
-H "Content-Type: application/json" ^
-d "{\"summary_type\":\"daily\"}"- 确认 Python 3.10+ 已安装并加入 PATH。
- 双击
start.bat启动前台服务。 - 如需开机自启,右键以管理员身份运行
setup_task.bat。 - 计划任务名称为
RecruitmentCollector,系统启动时通过start_hidden.vbs后台运行。
创建 /etc/systemd/system/recruitment-collector.service:
[Unit]
Description=Recruitment Collector
After=network.target
[Service]
WorkingDirectory=/opt/recruitment-collector
ExecStart=/opt/recruitment-collector/.venv/bin/python run.py
Restart=always
RestartSec=5
Environment=PYTHONUNBUFFERED=1
[Install]
WantedBy=multi-user.target启用服务:
sudo systemctl daemon-reload
sudo systemctl enable recruitment-collector
sudo systemctl start recruitment-collector
sudo systemctl status recruitment-collector生产环境建议放在 Nginx 后面反向代理,并将 run.py 中 Uvicorn 的 reload=True 调整为关闭。
.
|-- app/
| |-- crawlers/ # 爬虫实现
| | |-- enterprise/ # 企业官网 / 招聘站
| | `-- university/ # 高校就业网
| |-- routes/ # API、Web、设置路由
| |-- static/ # CSS、JS
| |-- summarizer/ # AI 总结与 ChatBox LLM 调用
| |-- templates/ # Jinja2 页面模板
| |-- utils/ # 清洗、地点筛选等工具
| |-- config.py # 配置读取和 Provider 初始化
| |-- database.py # 数据库连接与初始化
| `-- models.py # 数据模型
|-- data/ # SQLite 数据库目录
|-- run.py # 应用入口和定时任务注册
|-- seed_data.py # 种子数据
|-- requirements.txt # Python 依赖
|-- start.bat # Windows 一键启动
|-- start_hidden.vbs # Windows 后台启动
|-- setup_task.bat # Windows 计划任务注册
|-- test_location_filter.py # 地点筛选测试
`-- test_summarizer.py # AI 总结测试
安装 Python 3.10+,并在安装时勾选 “Add Python to PATH”。安装完成后重新打开终端或重新双击 start.bat。
可以手动运行:
pip install -r requirements.txt如果网络较慢,可以配置国内镜像源后重试。
检查 .env 或设置面板中对应 Provider 的 API Key 是否配置正确,并确认当前机器可以访问对应模型服务。
日报只统计当天新增职位。如果当天没有采集到新职位,系统会跳过生成。
周报默认每周日 20:00 生成最近 7 天数据。如果该周期没有新增职位,系统会跳过生成。也可以在页面或 API 中手动触发。
系统通过数据库中最新职位的 created_at 推断最后采集时间。数据库为空时会显示暂无数据。
打开仪表盘点击“手动触发采集”,或调用:
curl -X POST http://127.0.0.1:8000/api/crawl/trigger启动服务后访问 http://127.0.0.1:8000/docs,FastAPI 会提供交互式 API 文档。
进入 /summaries,打开设置面板,添加自定义 Provider,将 API 模式设为 gemini,填写 Gemini API Key 和模型列表,保存后即可在 ChatBox 中选择使用。