不是一次性问答工具,也不是随机刷题器。
TechSpar 会持续更新你的长期画像,并在下一轮训练中继续针对你的短板追问。
大多数面试产品有一个根本问题:无状态。
你今天答得差,系统知道。
但你明天再来,它又像第一次见你一样重新开始。
TechSpar 的目标不是“再生成一组题”,而是构建一个持续演化的候选人训练闭环:
| 传统面试工具 | TechSpar |
|---|---|
| 每次练习从零开始 | 持久化用户画像,长期跟踪成长 |
| 固定题库或随机出题 | 结合画像、掌握度、知识库动态出题 |
| 反馈停留在一句点评 | 逐题评分、薄弱点提取、改进建议 |
| 很难判断自己到底进步没 | 掌握度量化、趋势追踪、复习调度 |
| 练完就结束 | 训练 -> 评估 -> 画像更新 -> 下轮更精准 |
TechSpar 不是帮你“刷一轮题”,而是帮你建立一套会越练越准的面试训练系统。
直接体验:https://aari.top/
| Password | |
|---|---|
| admin@techspar.local | admin123 |
演示环境请不要上传真实简历、真实录音或任何敏感个人信息。
TechSpar 不从固定题库随机抽题,而是融合三层信息后生成下一轮问题:
- Session Context:简历、JD、知识库、最近训练记录
- Topic Mastery:领域掌握度、历史薄弱点、练习轨迹
- Global Profile:跨领域强项、弱项、思维模式、沟通风格
结果是:问题更少重复,更贴近真实短板,也更有连续性。
每次训练结束后,系统不会只给一句点评,而是继续向后推进:
- 逐题评估回答质量
- 提取薄弱点、强项和行为特征
- 更新领域掌握度与长期画像
- 用 SM-2 调度后续复习
- 把这次结果带入下一轮训练
这意味着:每次训练都会改变下一次训练。
TechSpar 不是单页 Demo,而是完整系统:
- 前端:React 19 + React Router v7 + Vite
- 后端:FastAPI + LangGraph 工作流
- 数据层:SQLite、用户隔离目录、长期画像、向量检索
- 外部服务:OpenAI 兼容 LLM、Embedding、DashScope ASR、Qiniu OSS
选择某个领域集中训练,系统根据画像和掌握度动态调整难度,优先命中历史薄弱点。
AI 读取你的简历,通过 LangGraph 状态机驱动完整流程:自我介绍 -> 技术问题 -> 项目深挖 -> 反问环节。
输入岗位描述后,系统会抽取 JD 重点,围绕岗位要求、简历经历和知识库内容生成更贴近真实岗位的问题。
上传面试录音或粘贴面试文本,系统自动转写、结构化 Q&A,并输出逐题分析与改进建议。
- 逐题评分:不是只看整体感觉,而是逐题拆开评估
- 薄弱点提取:明确知道自己卡在哪,而不是笼统地“回答一般”
- 掌握度变化:跟踪某个领域到底是在进步还是原地打转
- 长期画像更新:系统会记住你的习惯性问题,而不是下一次重新开始
- 复习优先级:会根据遗忘风险安排后续训练重点
| 首页 | 个人画像 |
|---|---|
![]() |
![]() |
首页聚合训练入口、近期进度和学习概览,画像页集中展示训练统计、当前重点与近期信号。
| 核心知识库 | 题目图谱 |
|---|---|
![]() |
![]() |
知识库负责维护训练依据,图谱页帮助你从全局观察题目分布与掌握情况。
| 历史记录 | 领域详情与回顾 |
|---|---|
![]() |
![]() |
历史记录按训练类型回看过往复盘,领域详情页把单个训练方向的掌握度、阶段判断和持续薄弱点收拢在一起。
| JD 定向备面 | 录音复盘 |
|---|---|
![]() |
![]() |
除了刷题,还可以围绕岗位描述定向训练,或对真实面试录音做结构化复盘。
- 正在准备后端、算法、AI 应用、Agent、RAG 等技术岗位面试的人
- 已经刷了很多题,但训练缺乏连续性和复盘闭环的人
- 想围绕简历项目和 JD 做更接近真实面试练习的人
- 想长期跟踪自己能力变化,而不是做一次性问答的人
cp .env.example .env最小必填配置是 LLM + Embedding。Embedding 不是可选项,必须二选一:
EMBEDDING_BACKEND=api:默认方案,直接走兼容 OpenAI 的 embedding APIEMBEDDING_BACKEND=local:本地模型方案,需要额外安装依赖
默认推荐 api,配置示例:
API_BASE=https://your-llm-api-base/v1
API_KEY=sk-your-api-key
MODEL=your-model-name
EMBEDDING_BACKEND=api
EMBEDDING_API_BASE=https://your-embedding-api-base/v1
EMBEDDING_API_KEY=sk-your-embedding-key
EMBEDDING_API_MODEL=BAAI/bge-m3如果你使用官方 OpenAI embedding 接口,EMBEDDING_API_BASE 可以留空。
认证默认值如下,不配置也能启动:
JWT_SECRET=change-me-in-production
DEFAULT_EMAIL=admin@techspar.local
DEFAULT_PASSWORD=admin123
DEFAULT_NAME=Admin
ALLOW_REGISTRATION=false如果你要改成本地 embedding,继续补全 .env.example 里的 LOCAL_EMBEDDING_*。
如果你要启用录音转写,还需要继续补全这些可选项:
DASHSCOPE_API_KEY=
QINIU_ACCESS_KEY=
QINIU_SECRET_KEY=
QINIU_BUCKET=
QINIU_DOMAIN=.env.example 已经补齐了完整示例,可直接按需删改。
docker compose up --build启动后访问:
http://localhost
后端:
pip install -r requirements.txt
uvicorn backend.main:app --reload --port 8000如果你要使用本地 embedding,再额外安装:
pip install -r requirements.local-embedding.txt前端:
cd frontend
npm install
npm run dev访问:
http://localhost:5173
如果你是从无认证旧版升级:
python -m backend.migrate- Embedding 后端切换(API / 本地)
- 录音上传与转写分析
- 七牛云 OSS 存储
- 多用户数据隔离
- 移动端响应式使用
| Component | Technology |
|---|---|
| Backend | FastAPI, LangChain, LangGraph, LlamaIndex |
| Frontend | React 19, React Router v7, Vite, Tailwind CSS v4 |
| Storage | SQLite, semantic embeddings |
| Auth | JWT, bcrypt |
| LLM | Any OpenAI-compatible API |
TechSpar/
├── backend/
│ ├── main.py
│ ├── auth.py
│ ├── memory.py
│ ├── vector_memory.py
│ ├── indexer.py
│ ├── spaced_repetition.py
│ ├── migrate.py
│ ├── graphs/
│ │ ├── resume_interview.py
│ │ └── topic_drill.py
│ ├── prompts/
│ └── storage/sessions.py
├── frontend/src/
│ ├── App.jsx
│ ├── contexts/AuthContext.jsx
│ ├── components/
│ ├── pages/
│ └── api/interview.js
├── data/users/{user_id}/
│ ├── profile/profile.json
│ ├── resume/
│ ├── knowledge/
│ └── topics.json
├── docker-compose.yml
├── requirements.txt
├── requirements.local-embedding.txt
└── .env.example
MIT











