Files
JobRadar/README.md
T

216 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# JobRadar · 职途雷达
JobRadar 是一套面向个人使用、以 Agent 为核心的智能岗位发现与决策系统。Agent 根据用户目标制定执行步骤,调用岗位采集、企业调查、规则筛选、评分和数据持久化工具,完成多步骤任务,并将过程、证据和结果展示在 WebUI 中。
> 当前项目处于基础骨架阶段,已完成 Django 工程初始化;岗位采集、企业研判、评分、异步任务和业务页面均在后续迭代范围内。
## 项目目标
- 使用正规的 Agent 运行循环完成任务规划、工具调用、状态延续和结果输出。
- 通过独立站点工具采集授权范围内的岗位信息。
- 统一不同来源的岗位字段,并识别重复岗位和内容变化。
- 使用硬性规则优先排除明显不符合要求的岗位。
- 联网补充企业主体、企业性质和行业等信息,保留来源与查询时间。
- 按可配置权重计算岗位匹配分,输出推荐理由和风险提示。
- 提供适合个人使用的岗位管理、收藏、忽略和投递跟踪页面。
- 保留原始数据、规则版本和分析证据,使每项结论可以复核。
- 展示 Agent 的执行轨迹、工具调用、耗时、失败原因和人工确认节点,用于学习与项目展示。
## 技术栈
| 分类 | 选型 | 当前状态 |
| --- | --- | --- |
| 开发语言 | Python 3.13 | 已配置 |
| Web 框架 | Django 6.0.8 | 已配置 |
| 当前数据库 | SQLite | 已配置,仅用于开发起步 |
| 目标数据库 | PostgreSQL | 规划中 |
| 页面采集 | Playwright | 环境已安装,尚未接入 |
| 普通请求 | HTTPX | 规划中 |
| 异步任务 | Celery + Redis | 规划中 |
| 定时调度 | Celery Beat | 规划中 |
| Agent 运行时 | OpenAI Agents SDK(Python) | 规划中 |
| 模型接口 | OpenAI Responses API | 规划中 |
| Agent 输出 | Pydantic 结构化模型 | 规划中 |
| 可观测性 | Agents SDK Tracing + 业务运行记录 | 规划中 |
| Agent 评测 | 官方 Agent Evals 思路 + 本地评测集 | 规划中 |
| 用户系统 | Django 内置认证 + 简化用户资料 | 规划中 |
| WebUI | Django Admin + 自定义 Django 页面 | 规划中 |
| 部署 | Docker Compose + Nginx/Caddy + HTTPS | 规划中 |
第一阶段优先采用 Django Admin 管理站点、规则、企业和任务数据,再为岗位浏览与决策流程开发自定义页面。出现明确的前后端分离需求后,再评估是否增加 Django REST Framework 和 Vue。
## 当前目录
```text
JobRadar/
├── JobRadar/ Django 项目配置
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── docs/ 架构与实施文档
├── templates/ 全局 Django 模板
├── environment.yml Conda 环境定义
├── manage.py Django 管理入口
└── README.md
```
业务模块将随迭代逐步增加,暂定拆分为:
```text
accounts/ 用户认证、个人配置与数据归属
jobs/ 岗位、岗位来源及状态跟踪
companies/ 企业主体及企业证据
crawlers/ 招聘网站采集适配器
screening/ 硬性筛选规则
ranking/ 权重评分
agent_runtime/ Agent 定义、运行上下文与编排入口
agent_tools/ 采集、检索、筛选、评分和持久化工具
evals/ Agent 行为评测用例与结果
task_center/ 采集、分析与调度任务
audit/ 日志、证据与版本追踪
```
详细边界参见 [架构设计](docs/architecture.md),Agent 的目标、工具和状态约定参见 [Agent 契约](docs/agent-contract.md),开发顺序参见 [实施路线图](docs/roadmap.md)。
## AI开发方式
JobRadar采用“阶段目标驱动、AI直接实现”的开发方式:
1. 用户确认当前阶段目标、业务边界和验收重点。
2. AI先检查仓库现状,给出修改方案和涉及文件。
3. AI直接生成或修改代码、迁移、配置、测试与必要文档。
4. AI执行静态检查、自动化测试和安全检查,并如实报告未覆盖项。
5. 用户根据可运行结果和页面效果进行业务验收。
6. 当前阶段稳定后,再进入下一阶段或扩展更多工具。
实现应保持增量、小步、可验证。不会为了展示一次性生成所有未来模块,也不会将尚未运行验证的规划描述为已完成功能。详细约定参见 [AI开发约定](docs/development-guide.md)。
## 本地运行
### 1. 创建或更新 Conda 环境
如果本机还没有 `JobRadar` 环境:
```powershell
conda env create -f environment.yml
```
如果环境已经存在:
```powershell
conda env update -n JobRadar -f environment.yml --prune
```
激活环境:
```powershell
conda activate JobRadar
```
### 2. 检查数据库迁移
当前默认使用项目目录中的 SQLite 数据库:
```powershell
python manage.py migrate
```
### 3. 创建本地管理员
```powershell
python manage.py createsuperuser
```
### 4. 启动开发服务
```powershell
python manage.py runserver
```
访问地址:
- 管理后台:<http://127.0.0.1:8000/admin/>
### 5. 安装 Playwright 浏览器
首次开发采集模块时执行:
```powershell
python -m playwright install chromium
```
浏览器文件不应提交到仓库。
## 配置原则
- 本地开发密钥、数据库密码、招聘网站 Cookie 和模型 API Key 不得提交到 Git。
- 当前 `settings.py` 仍是 Django 生成的开发配置,不可直接用于生产环境。
- 接入 PostgreSQL 前,应先增加本地配置文件或环境隔离方案,并提供不含真实密钥的示例配置。
- 采集器必须设置并发、频率、超时和指数退避,不能绕过验证码、登录保护或访问控制。
- 企业性质及 AI 判断必须保存来源、判断时间和置信度;信息不足时应标记为待人工复核。
## 用户系统
系统面向公网部署,因此第一阶段即接入用户认证,但不设计复杂的角色权限体系:
- 使用 Django 内置用户、密码哈希、Session 和登录保护能力。
- 普通用户登录后只能访问自己的搜索任务、筛选配置、岗位状态和个人画像。
- 管理员使用 Django Admin 维护站点适配器、系统任务和异常数据。
- 第一阶段只区分普通用户与管理员,不增加角色表、权限组、组织机构或审批流。
- 业务数据必须记录所属用户,查询和任务执行时统一校验数据归属。
- 默认关闭公开注册,由管理员创建账号;确需开放注册时再增加邮箱验证、验证码和频率限制。
## 公网部署要求
- Django 由生产级 WSGI/ASGI 服务运行,不能使用 `manage.py runserver` 对外提供服务。
- 使用 Nginx 或 Caddy 作为反向代理,并强制启用 HTTPS。
- 正确配置 `ALLOWED_HOSTS`、可信 CSRF 来源、安全 Cookie 和代理转发头。
- PostgreSQL 和 Redis 仅在容器私有网络中开放,不映射到公网。
- 登录、注册、密码重置和耗时接口应设置频率限制与异常审计。
- 密钥、数据库密码、网站 Cookie 和模型 API Key通过部署平台密钥或受保护的环境配置注入。
- 定期备份数据库,并验证备份恢复流程。
## 开发约定
- 一个招聘网站对应一个采集适配器,禁止把站点特有解析逻辑写入公共业务模块。
- Agent 通过类型明确的工具完成外部操作,不在提示词中伪造浏览、查询或入库结果。
- 第一版只实现一个岗位研究 Agent;只有单 Agent 难以维持明确职责时才增加专家 Agent 和 handoff。
- 涉及持久化或外部副作用的工具必须边界窄、可审计、可重试。
- 高风险或不可逆操作必须设置人工确认;第一版不允许 Agent 自动投递简历或联系招聘人员。
- 原始数据与标准化数据分开保存,避免解析规则变化后无法追溯。
- 先执行确定性筛选,再调用联网服务和大模型,降低成本与误判范围。
- 规则筛选和权重计算作为确定性工具提供给 Agent,最终分数不能由模型随意生成。
- 采集、企业补全和 AI 分析任务必须可重复执行,并通过唯一约束或幂等键防止重复入库。
- 重要判断应包含证据,不以模型生成的自然语言作为唯一依据。
## 明确不采用的捷径
- 不把一次普通的大模型请求包装成 Agent;必须存在真实的运行循环、工具调用、状态和轨迹。
- 不用 LangChain 等兼容层统一不同模型或 Agent 框架,优先直接学习 OpenAI Agents SDK 的原生能力。
- 当前业务没有知识库检索需求,不引入 pgvector、独立向量数据库或为了展示而搭建 RAG。
- 不一开始拆成多 Agent;先用一个 Agent 验证完整闭环,再依据评测结果演进。
## 验证命令
```powershell
python manage.py check
python manage.py test
```
涉及数据模型变更时,还应检查是否遗漏迁移文件:
```powershell
python manage.py makemigrations --check --dry-run
```
## 合规说明
JobRadar 仅用于个人岗位信息整理与求职辅助。使用前应确认目标网站的服务条款、数据授权范围和访问频率限制。项目不以绕过验证码、风控、登录限制或其他技术保护措施为目标,也不应自动投递简历或自动联系招聘人员。
## 项目状态
当前版本:`0.1.0-dev`
当前阶段:架构与Agent契约已经确定,下一步由AI直接实现阶段一工程基线。