AI-powered career planning and job-hunting assistant
A one-stop career analysis platform built on Flask + multi-agent collaboration (LLM + Playwright real-time market analysis), offering career path analysis, intelligent job matching, and course learning recommendations.
β If this project helps you, feel free to give it a Star!
| Feature | Description |
|---|---|
| π― Career Path Analysis | Generates a personalized career direction based on your profile and real-time market data |
| πΌ Smart Job Matching | Matches the most suitable jobs from the job pool based on your skills and search preferences |
| π Market Trend Insights | Playwright scrapes job market dynamics in real time, and the AI summarizes industry trends |
| π Course Recommendations | Recommends courses and learning paths aligned with your career goals |
| π€ AI Mock Interview | Generates interview questions from your profile and target position, scores each answer and gives a full-session summary |
| πΊοΈ Long-term Career Planning | Builds a 5-year, three-phase roadmap (foundation β deepening β leap) with goals, actions, milestones and quantified KPIs |
| π Scalable Hybrid Retrieval | TF-IDF + inverted-index retrieval pre-filters thousands of records before the LLM re-ranks, so matching stays fast and bounded as data grows |
| π Offline Fallback Engine | If the LLM is unavailable (no key / quota / network), rule-based analysis and matching keep every feature working with the same response format |
| π Data Insights Dashboard | Interactive ECharts widgets (salary distribution, hot cities, top skills) driven by a live stats API |
| π Analysis History | Every career analysis is saved; reload or delete past results anytime |
| π Self-service Registration | Users can register their own accounts with phone + password (rate-limited) |
| π Searchable Admin Panel | Admin panel with keyword search and pagination; add / edit / delete items by id |
| π Role-based Access Control | User / admin dual roles with a dedicated admin panel |
| π³ One-command Docker | Ship the whole platform with docker compose up |
| π Out of the Box | Built-in demo accounts and sample data; deployable within minutes |
ZhituCareer+ uses a modular agent collaboration architecture in which multiple agents each do their part and work in sequence:
- User Profile Agent: parses education / major / skills / experience / goals and outputs a personal capability profile
- Market Analysis Agent: scrapes job market dynamics in real time with Playwright, combined with LLM to produce industry trends
- Job Recommendation Agent: combines the personal profile and market analysis to generate structured job-hunting advice
- Job Matching Agent: filters the most suitable positions from the job pool by match score
- Course Matching Agent: recommends the most relevant courses based on career goals
- Interview Agent: generates targeted interview questions and evaluates candidate answers with scores and feedback
- Career Planning Agent: produces a structured 5-year, three-phase long-term career roadmap
- Hybrid Retrieval Engine: TF-IDF + inverted-index search with Chinese bigram tokenization and EnglishβChinese alias expansion pre-filters thousands of records down to a bounded candidate set (β€ 20) before any LLM call
- Fallback Engine: deterministic rule-based analysis / matching that guarantees the app stays fully usable when the LLM is unreachable
- Python 3.9+ (recommend Anaconda or Miniconda)
- An API Key from ModelScope or SiliconFlow
# 1. Create and activate a virtual environment
conda create -n zhitu_career python=3.9
conda activate zhitu_career
# 2. Clone the repository
git clone https://github.com/NoahIsARider/ZhituCareer.git
cd ZhituCareer
# 3. Install dependencies
pip install -r requirements.txtCopy .env.example to .env and fill in your API key:
cp .env.example .env# Required: ModelScope / SiliconFlow API Key
OPENAI_API_KEY=your_api_key_here
# Optional: custom model and API base URL
# LLM_BASE_URL=https://api-inference.modelscope.cn/v1/
# LLM_MODEL=LLM-Research/Meta-Llama-3.1-8B-Instruct
# Optional: change the session secret key in production
# SECRET_KEY=your-secret-keyπ‘ All model names and API base URLs can be overridden via environment variables β no code changes needed. The app still starts normally without an API key: the rule-based fallback engine takes over, so career analysis, job matching, and course recommendations keep working in fully offline mode (results are tagged with a
sourcemarker).
python app.pyVisit http://localhost:5000 and log in with a demo account:
| Role | Phone | Password |
|---|---|---|
| π Admin | 13800000000 |
admin123 |
| π€ Regular user | 13900000000 |
user123 |
# One command, everything included
docker compose up --build
# Or run without API key to try the offline fallback engine right away
OPENAI_API_KEY= docker compose upVisit http://localhost:5000. Your data lives in ./data and persists across restarts.
- After logging in, the dashboard immediately shows live market insights (salary distribution, hot cities, top skills) from the built-in data
- Fill in your education / major / skills / experience / career goals on the dashboard
- Click "Get Career Analysis" and the AI will generate career direction, job-hunting advice, a skill improvement checklist, and recommended positions β every result is saved to your analysis history for later review
- Use "Job Search" to match positions by keyword and city
- Use "Course Recommendations" to get a learning path aligned with your career goals
- Use "AI Mock Interview" to run a simulated interview: enter a target position, answer the generated questions one by one, and get per-answer scores plus a final session summary
- Use "Long-term Career Planning" to generate a 5-year, three-phase roadmap with goals, actions, milestones and KPIs; every plan is saved to your plan history
- After logging in, view real-time statistics for courses and positions in the "Admin Panel"
- Use the search box to filter by keyword and the pagination controls to browse large datasets
- Use the card actions to add / edit / delete individual course and position records by id
- Data is saved to
data/course.jsonanddata/jobs.json(atomic writes, so the files can never be left half-written)
ZhituCareer/
βββ app.py # Flask main app (routing, auth, session management)
βββ career_model.py # Career analysis orchestration (multi-agent pipeline)
βββ career_plan.py # Long-term career planning (LLM β fallback)
βββ mock_interview.py # AI mock interview engine (LLM β fallback)
βββ job_matching.py # Job matching service (retrieve β LLM β fallback)
βββ course_matching.py # Course matching service (retrieve β LLM β fallback)
βββ retrieval.py # Hybrid retrieval: inverted index + TF-IDF pre-filtering
βββ fallback_matcher.py # Rule-based fallback analysis & matching (offline mode)
βββ data_store.py # Atomic JSON persistence, file locks, schema validation
βββ cache.py # Thread-safe TTL cache
βββ stats.py # Dashboard stats (salary / city / skills aggregates)
βββ agent/ # Multi-agent collaboration layer
β βββ llm_client.py # LLM client, robust JSON parsing, and retry
β βββ user_profile_agent.py
β βββ market_analysis_agent.py # Playwright market scraping
β βββ job_recommendation_agent.py
β βββ job_matching_agent.py
β βββ course_matching_agent.py
β βββ interview_agent.py # Mock-interview question generation & answer evaluation
β βββ career_planning_agent.py # 5-year roadmap generation
βββ data/ # Data storage (JSON)
β βββ users.json # Users and roles
β βββ jobs.json # Job data
β βββ course.json # Course data
β βββ interviews.json # Mock interview sessions
β βββ plans.json # Long-term career plans
βββ templates/ # Frontend pages (Bootstrap 5)
β βββ login.html # Login / register page
β βββ index.html # User dashboard (ECharts insights + history)
β βββ admin.html # Admin panel
βββ tests/ # 165 pytest cases incl. 5,000-record scale tests
βββ Dockerfile # One-command container build
βββ docker-compose.yml # `docker compose up` β running platform
βββ requirements.txt
- Hybrid retrieval for large catalogs (retrieve β LLM β fallback)
- Offline rule-based fallback engine
- Dashboard data insights (ECharts)
- Career analysis history
- AI mock interview (question generation + answer scoring + session summary)
- Long-term career planning (5-year, three-phase roadmap)
- Docker one-command deployment
- 165 automated tests
- SQLite migration for concurrent multi-worker writes
- Resume (PDF/Word) parsing
- Job application tracking (favorites / status)
- LLM streaming output (SSE)
| Layer | Technology |
|---|---|
| Backend | Flask 3 Β· Python 3.9+ |
| AI Engine | OpenAI-compatible API (ModelScope / SiliconFlow) Β· Meta-Llama-3.1-8B-Instruct Β· offline rule-based fallback |
| Data Collection | Playwright (headless Chromium, optional) |
| Retrieval | Inverted index + TF-IDF hybrid search (Chinese bigram tokenization, EnglishβChinese aliases) |
| Frontend | Bootstrap 5 Β· Bootstrap Icons Β· vanilla ES6 |
| Data Storage | Atomic JSON files (seamlessly migratable to SQLite / MySQL, see the data_base branch) |
| Testing | pytest Β· 165 cases Β· 5,000-record scale benchmarks (see docs/TEST_REPORT.md) |
The system is highly configurable, entirely through environment variables:
| Variable | Default | Description |
|---|---|---|
OPENAI_API_KEY |
empty | Required, ModelScope / SiliconFlow API Key |
LLM_BASE_URL |
ModelScope v1 | Custom LLM API base URL |
LLM_MODEL |
Llama-3.1-8B | Custom inference model |
SECRET_KEY |
dev placeholder | Flask session key; must be changed in production |
HOST / PORT |
0.0.0.0 / 5000 |
Service listen address |
FLASK_DEBUG |
0 |
Enable debug mode |
Any form of contribution is welcome!
- π Found a bug β submit an Issue
- β¨ New feature / improvement β fork and submit a Pull Request
- π Improve documentation β help more people get started quickly
Before submitting a PR, please make sure the code passes basic checks and follows the existing code style.
This project is open-sourced under the MIT License; see the LICENSE file for details.
More screenshots of the new full-chain career features.







