Skip to content

Latest commit

History

882 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

JobRadar

面向中国校招与职业选择的、由真实岗位数据驱动的求职决策 Agent

从岗位发现、个性化推荐、简历改写,到针对目标岗位的模拟面试。

在线产品 · Local TUI · 功能状态 · 完整产品部署 · Voice Agent 验收

JobRadar 产品概览

高保真产品原型。岗位、分数与统计数字为演示数据,不代表当前线上数据。

JobRadar 在做什么

传统岗位平台回答“现在有哪些岗位”,JobRadar 更想回答三个后续问题:

  1. 以我的经历和目标,哪些岗位真的值得投?
  2. 为什么推荐,依据来自哪条 JD、哪段经历和哪类公司情报?
  3. 决定投递以后,简历和面试应该怎样针对这个岗位准备?

因此它不是一个套着聊天框的岗位爬虫,而是一条可追溯的求职决策链:

公开岗位发现 → 标准化 / 去重 / 覆盖诊断 → 简历与偏好建模
→ 受约束的 Agent 调研与选择 → 岗位解释 → 简历改写
→ 定制模拟面试 → 事实型反馈报告

为什么值得 Star

数据基座是地基,但不是这个项目唯一、甚至不是最容易复用的价值。 JobRadar 把四类通常分散的工程放进了一个真实垂直场景:

  • 可维护的岗位数据工程:配置驱动的抓取适配器、字段归一、去重、来源分层、可疑零结果检测和抓取证据留存。
  • 受约束的垂直 Agent:先由规则召回候选池,再让 ReAct Agent 在工具预算内检索、查看 JD、读取公司情报,最终只能提交真实候选池中的 job_id
  • 上下文与长期记忆:XHS、播客、赛道知识和用户记忆通过 purpose-aware ContextProvider 注册表按场景供给,而不是把所有内容无差别塞进 prompt。
  • 评测先行的模拟面试:自适应提问、并行评分与追问、证据化报告,以及带取消、打断、降级和隐私边界的实时语音链路。
  • 真正可安装的本地 Agent:独立 TUI 不依赖 Web 服务或 Coding Agent,岗位搜索离线可用,简历修改必须引用原文证据并由用户逐条确认。

如果你在做 Agent 应用、RAG、实时语音、招聘产品或爬虫可靠性,这个仓库的价值更接近一份可运行的垂直 Agent 参考实现,而不是一份会迅速过期的数据包。

产品界面

上传与结构化解析

简历上传与解析 Agent 原型

岗位决策与简历工作台

岗位决策与简历工作台原型

工作台把岗位约束、Agent 对话、推荐证据和简历改写放在同一条决策上下文中。图中姓名与履历均为虚构演示数据。

实时模拟面试

实时模拟面试交互原型

该图是交互原型,不是线上通话实录。设备检测界面见 mock-interview-device-check-prototype.png

真实功能状态

模块已实现当前边界
岗位数据基座公开来源抓取、ATS/站点适配、标准化、去重、评分、调度、覆盖与失败诊断生产数据库和受限来源原始数据不随仓库发布
简历与偏好PDF/DOCX 解析、结构化档案、目标方向与地点/行业/薪资偏好高质量解析与生成需要兼容 OpenAI API 的模型凭证
岗位推荐 Agent规则候选池、search_candidatesinspect_jobsget_company_intel、工具预算、执行 trace、受约束 finalize 与 fallbackXHS 向量检索目前不是 ReAct 推荐主路径
简历 Copilot多轮改写、差异预览、一键应用、捏造风险提示、跨会话用户记忆输出仍需用户确认,不能替代事实核验
RAG / 外部情报XHS、播客、赛道知识与记忆 Provider;按 chat/interview/intel 等 purpose 路由私有语料与派生索引不作为公共数据集分发
模拟面试岗位定制题目、自适应追问、并行编排、评分、报告与 Voice Facts V2反馈只展示可测事实,不输出未经校准的性格/自信标签
Realtime Voice AgentLiveKit WebRTC、流式 ASR/TTS、播放取消、自动轮次、barge-in、重连与 legacy fallback 均已实现并受 feature flag 控制Gate B 真人中文语料和 Gate C 真实 LiveKit 房间验收尚未完成
Local TUI v0.1.0-alpha已实现一键初始化、SQLite/FTS 岗位检索、CSV/JSON/SQLite 导入、PDF/DOCX/Markdown/TXT 解析、OpenAI-compatible/Ollama、证据化 patch、Run trace 与 Docker当前只开放岗位检索和简历优化;不包含生产岗位库、私有语料、模拟面试或自动投递

语音链路的实现、失败复盘和验收边界见 阶段复盘验收清单

Agent 架构

flowchart LR
S[公开岗位来源] --> C[抓取适配器与覆盖校验]
C --> D[(标准化岗位库)]
R[简历与用户偏好] --> P[确定性候选池]
D --> P
P --> A[受预算约束的 ReAct Agent]
A --> J[真实 job_id 推荐与 trace]
J --> W[简历改写与决策工作台]
X[XHS / 播客 / 赛道知识] --> K[ContextProvider Registry]
M[统一用户记忆] --> K
K --> W
K --> I[面试编排与报告]
J --> I
B[浏览器音频] -. feature flag .-> L[LiveKit WebRTC]
L -. ASR / LLM / TTS .-> I
Loading

1. 推荐不是一次黑盒 rerank

系统先用确定性规则形成候选池,再允许 Agent 在有限预算内调用三个只读工具。finalize 会校验岗位是否真的来自候选池;预算耗尽、模型格式错误或工具失败时走可解释 fallback。这样既保留模型的调研与比较能力,也给幻觉、成本和尾延迟设置边界。

2. RAG 按任务路由

ContextProviderpurpose、查询和用户上下文决定是否取数。XHS 更适合提供公司体验、招聘口径和候选人视角,播客更适合补充职业路径与行业方法,用户记忆则提供个人证据。Provider 失败不会拖垮主流程。

3. 面试是一条有状态编排链

每轮回答并行进入评分、追问决策和下一题准备;迟到结果通过轮次边界隔离。实时语音采用可替换的 pipeline 路线,并保留 legacy 链路作为降级,而不是把传输、ASR、LLM、TTS 和业务状态绑死在一个模型里。

数据与合规边界

  • 只面向合法、公开、可访问的岗位来源;优先官方招聘站和公开 ATS。
  • 不绕过验证码、登录封禁或站点风控,并应遵守目标站点条款与速率限制。
  • 仓库发布的是抓取器、配置、数据模型、样例和评测资产;线上生产库、学生数据、私有 XHS 语料与音频不在仓库中
  • 经用户明确授权的面试音频才会短期保存;衍生分析支持删除和过期清理。

这也意味着:当前“持续维护的数据基座”是产品护城河,但还不是一个开箱即用、持续更新的公共数据集。如果未来把数据本身作为主要开源卖点,需要另外发布有授权、带时间戳和来源说明的快照。

技术栈

技术
用户端Next.js 16、React 19、TypeScript、Tailwind CSS、Ant Design
管理端Vite、React 19、TypeScript、Ant Design
后端FastAPI、SQLAlchemy、Alembic、Pydantic、APScheduler
数据SQLite WAL、结构化配置、向量化知识索引
Agent / RAGOpenAI-compatible LLM、budgeted ReAct、ContextProvider registry、统一记忆
爬虫Python、Requests、Playwright、ATS / 站点专用 adapter
语音LiveKit Agents、Silero VAD、DashScope Paraformer、Qwen3-TTS / CosyVoice、WebRTC
Local TUIPython 3.11+、Textual、SQLite FTS5、Pydantic、HTTPX、PyPDF、python-docx

Local TUI

完整仓库适合研究和部署全栈产品;Local TUI 则提供一个不依赖 Web、管理端、调度器和语音服务的本地入口,只保留两条完整工作流:

JobRadar Local TUI

真实 Textual 应用截图,使用仓库内明确标注的离线演示岗位生成。

本地岗位数据 → 检索 / 筛选 / 比较 / 收藏
本地简历 + 目标 JD → 证据对齐 / patch 审阅 / 导出新版本

设计参考 career-ops 的 local-first 与 system/user data contract,但不依赖 Claude Code 等 Coding Agent 作为运行时。Python Textual 只负责交互,岗位召回、简历证据、Context、Memory、模型和 Run Event 都在可独立测试的 Career Core 中。

安装并运行

需要 Python 3.11+。使用 uv 可以直接从 GitHub 安装成隔离的命令行工具:

uv tool install git+https://github.com/Slackness1/JobRadar.git
jobradar init
jobradar doctor
jobradar tui

也可以使用 pipx install git+https://github.com/Slackness1/JobRadar.git。初始化会创建本地工作区,并在空库中放入 6 条明确标记为演示的岗位,因此断网、没有模型 Key 时也能先体验岗位检索。

岗位检索

jobradar jobs import ./jobs.csv
jobradar jobs import ./jobradar.db
jobradar jobs search "AI Agent 后端" --location 上海

支持 CSV、JSON、JSONL 和 JobRadar SQLite。结果只包含本地库中的真实 job_id;相关性分数附带关键词、地点、方向、时效和风险解释,不会包装成录用概率。

简历优化

默认模型是本机 Ollama 的 OpenAI-compatible endpoint:

ollama pull qwen3:8b
jobradar config model \
--base-url http://127.0.0.1:11434/v1 \
--model qwen3:8b
jobradar resume optimize ./resume.pdf --job-id demo-agent-backend-sh

使用远程模型时必须显式添加 --allow-remote,API Key 只从环境变量读取。模型输出不是直接覆盖简历,而是生成逐条 patch;target_block_id、原文、Evidence Ref、新增数字和 JD 缺口都会经过证据门验证,Blocked patch 不能接受。

本地数据

系统包与用户数据物理分离。原始简历只读保存,所有导出都是新版本;每次运行会写出 manifest.jsonevents.jsonl,记录 Context hash、步骤、质量和降级原因,不记录 API Key 或隐藏思维过程。默认无遥测、无自动投递、无 JobRadar 云端依赖。

完整命令、Ollama/远程模型配置、Docker 和数据目录说明见 Local TUI 文档,技术取舍与验收标准见 实施 Spec

Docker

docker compose -f docker-compose.tui.yml build
docker compose -f docker-compose.tui.yml run --rm jobradar init
docker compose -f docker-compose.tui.yml run --rm jobradar tui

完整产品部署

Docker:后端与管理端

当前 docker-compose.yml 启动 FastAPI 和旧管理端,不包含 Next.js 用户端。

touch .env
docker compose up --build -d

本地运行完整用户链路

# Terminal 1: backendcd backend
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/playwright install chromium
PYTHONPATH=. .venv/bin/uvicorn app.main:app --reload --port 8000
# Terminal 2: Next.js user appcd resume-copilot-web
npm ci
RESUME_COPILOT_BACKEND_URL=http://127.0.0.1:8000 npm run dev

打开 http://localhost:3001。Agent 功能至少需要在仓库根目录或 backend/.env.local 中配置:

RESUME_COPILOT_LLM_BASE_URL=https://api.deepseek.com/v1RESUME_COPILOT_LLM_API_KEY=your-keyRESUME_COPILOT_LLM_MODEL=deepseek-chat

语音功能还需要 DASHSCOPE_API_KEY;LiveKit 路线默认关闭,需额外配置 LIVEKIT_URLLIVEKIT_API_KEYLIVEKIT_API_SECRET 和对应 feature flags。当前 LiveKit adapter 需要原始 PCM,因此启用该路线时 DASHSCOPE_TTS_MODEL 必须选择支持 PCM 流式输出的 CosyVoice 模型。

仓库结构

backend/ FastAPI、Agent、RAG、面试编排、语音与爬虫
resume-copilot-web/ 面向求职者的 Next.js 产品
frontend/ 岗位、评分、调度与爬虫管理端
src/jobradar_core/ Local TUI 共用的岗位、简历、Context、Memory 与 Runtime
src/jobradar_tui/ Textual 界面与 jobradar CLI
tests/local_tui/ 本地工作区、检索、防编造、导出和 TUI 验收
docs/ 架构、评测报告、复盘与产品原型
scripts/ 数据导入、抓取、验证和运维脚本

评测与工程记录

授权状态

仓库目前尚未加入开源许可证。在 LICENSE 明确之前,代码可供阅读和评估,但不应默认拥有复制、修改或再分发授权。许可证选择是开放外部贡献前必须补齐的一步。


Maintained by Chuanbo Zhou, focused on AI Agent, realtime voice and backend product engineering.

About

Search job and match

Resources

Stars

155 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages