It keeps collecting jobs and interview write-ups from career sites, Xiaohongshu and Maimai, searches them against your constraints (city, direction, days per week, how long you can stay), marks every hard conflict between you and a job, pulls real interview questions out of real posts, and watches a search goal for you over weeks. Every claim opens to its source text; when it finds nothing, it says so.
The hosted demo is being deployed (#16). The author uses Polaris for their own internship search, and it is their entry to the Nebius × NVIDIA Global AI Hackathon, Personal AI track. The interface is in Chinese because the users and sources are.
2:38 demo video with English narration and captions; everything shown is the synthetic demo. Open on YouTube
All screenshots come from the synthetic demo: jobs, posts, company names and the profile are invented.
Each feature says how it stays trustworthy, because invented advice is the worst failure for a job-search tool.
Search by city, direction, internship type and days per week; keyword, vector and graph recall, fused and reranked.
Constraints filter before recall; an unstated constraint is "to confirm", never a match.
Education, papers, attendance and internship length against your memory card.
Hard conflicts are flagged; what your card lacks is listed as information to add.
Questions extracted from posts, with source and post date.
Asking for real questions forces a question search first; any cited id must appear in tool results or it is marked unverified.
Watch a goal: focus jobs removed or changed, new jobs in scope, new interview posts, outcomes of people like you.
Changes ranked urgent / digest / quiet; a daily report whose facts rules compute and the model only writes up.
HR's three questions: which hard requirements block you, how many common skills your card covers, whether your experience has evidence; then peers' public self-descriptions.
Says so when the sample is small; "not written" is not "does not have".
Application funnel, follow-up drafts; remembers your constraints and experience, with history, deletable.
Drafts only, never sends; changing data waits for approval; bi-temporal memory asks before overwriting.
The follow-up card script: days 4 → 5, a removed job, a new job and a new interview post are all caught, ranked and reported.

Follow-up card and situation report

Competitiveness: hard requirements, skills, gaps HR will ask about

Applications: the funnel counts the furthest step each job reached; rejection reasons feed later gap analysis.
Collection stays on the author's machine, read-only and low-rate; retrieval is hybrid inside PostgreSQL; LangGraph orchestrates the agent, and every model call records tokens, latency and cost.
Click a diagram for full size.
One request through the agent:
All came from running the whole system for real. No offline test caught any of them.
| Symptom | Cause | Fix | Result |
|---|---|---|---|
| "Beijing Agent internship" listed 1 job | Top 50 chunks from the whole corpus, then intersected with the scope: 40 in-scope candidates became 1. Also 140 of 207 Beijing internships did not state days per week | Pass in-scope job ids into all three recall paths; keep unknown days as "to confirm" | 1 → 32 candidates |
| A task took 265 s while the model paged through results | 6,000-character tool output, about 2,200 per job: 1–2 jobs per page | Slimmer list items, cap raised to 16,000 | Full task in 77 s |
| Model requests failed after 30 s | A local TUN accelerator captured Bailian traffic; direct Wi-Fi succeeded 6/6 in about 0.2 s | Only for the Bailian host and only on a fake DNS answer, resolve the real address and connect directly; fall back on failure | 103 s → 2 s |
| "I found an interview question in the database"; there was none | The model skipped the question search despite a prompt rule | Evidence gate in orchestration: no question search yet, no final answer | Every question sourced |
| Tests "passed" with the database down | Database tests were skipped with exit code 0; once, 306 of 792 never ran | Fail in CI instead; CI uses the demo's ParadeDB image | PR #2 |
The first four are in commit 1d8cf59.
Module evaluations from 10-11 to 10-13; each number holds for that version and question set only.
| Area | Result |
|---|---|
| Retrieval | NDCG@10: one path 0.73 → three paths 0.81 → reranked 0.89 (M4) |
| Cross-source alignment | Test F1 0.93, labelled after the rules were frozen (M4) |
| Memory | Exact sentence match: dev 26/28, held-out 14/16, test 13/16 (M5) |
| Answer quality | Dev 24/24 and 23/24, held-out 13/14, zero fabricated sources (dev, held-out) |
| Prompt injection | 0 of 15 attacks succeeded (injection) |
Polaris runs on Qwen models through Alibaba Cloud Bailian. It does not use Nebius Token Factory or an NVIDIA model. The model layer speaks the OpenAI-compatible API, so Token Factory is a configuration change, but that path has not been run. The author chose not to set up Nebius billing and accepts that the entry does not meet those two requirements.
LangGraph 1.2 / LangChain 1.4: middleware for approval, call limits, retries and evidence gates; Postgres checkpointer.
PostgreSQL 17, pgvector, ParadeDB pg_search (BM25 with Chinese tokenization), optional Neo4j; weighted RRF, rerank, MMR.
FastAPI, SQLAlchemy 2.1, Alembic, MCP; Next.js 16 and React 19, installable on a phone.
Alibaba Cloud Bailian: chat qwen3.7-plus, extraction qwen-plus, embeddings text-embedding-v4, rerank qwen3-rerank.