Files
zhiyin/docs/ARCHITECTURE.md
T
2026-06-08 16:28:00 +08:00

14 KiB
Raw Blame History

职引 — 技术架构文档 v3.0

版本: v3.0 日期: 2026-06-01 状态: 重新定位后 定位: 应届生/实习生 AI 面试教练


一、技术栈

1.1 前端

技术 版本 用途
uni-app 3.x 跨端框架(微信小程序 + H5
Vue 3.4 框架
TypeScript 5.x 类型安全
Vite 5.x 构建工具
Pinia 2.x 状态管理(用户状态、面试会话)
SCSS - 样式预处理

1.2 后端

技术 版本 用途
Node.js 18+ 运行环境
NestJS 10.x 框架(模块化,适合快速迭代)
MongoDB + Mongoose 7.x 数据库(灵活 schema,适合快速迭代)
MongoDB Atlas - 免费层起步,0 成本启动
JWT - 用户认证(微信登录对接后使用)
class-validator - 参数校验
微信支付 - 会员付费(Phase 1.5 接入)

1.3 AI 能力

技术 用途 优先级
opencode-go (deepseek-v4-flash) 面试模拟、简历诊断、面试报告 主用
NVIDIA (stepfun-ai/step-3.5-flash) 主用不可用时自动切换 备用

1.4 部署

技术 用途
腾讯云轻量应用服务器 后端部署(个人开发者友好,已 ICP 备案)
微信小程序云开发(可选) 静态资源 + 云函数(快速原型)
Nginx 反向代理(HTTPS 终止)

二、项目结构(简化版,MVP 优先)

zhiyin/
├── zhiyin-app/                    # 小程序前端
│   ├── src/
│   │   ├── pages/                # 页面
│   │   │   ├── index/            # 首页(岗位选择 + 面试入口)
│   │   │   ├── interview/        # 面试模拟(核心页面)
│   │   │   ├── report/           # 面试报告
│   │   │   ├── history/          # 历史面试记录
│   │   │   ├── resume/           # 简历诊断(Phase 1.5)
│   │   │   ├── internship/       # 实习搜索聚合(MVP 跳转模式)
│   │   │   ├── user/             # 个人中心
│   │   │   └── member/          # 会员中心(Phase 1.5
│   │   ├── components/           # 组件
│   │   ├── services/             # API 服务
│   │   ├── stores/               # Pinia 状态
│   │   ├── styles/               # 全局样式
│   │   ├── utils/                # 工具函数
│   │   ├── App.vue
│   │   └── main.ts
│   ├── package.json
│   ├── vite.config.js
│   └── manifest.json            # 小程序配置(AI 深度合成类目已通过)
│
├── backend/                       # 后端服务
│   ├── src/
│   │   ├── common/               # 公共模块
│   │   │   ├── filters/          # 异常过滤器
│   │   │   ├── guards/           # 权限守卫(JWT)
│   │   │   ├── interceptors/     # 拦截器(日志、响应格式)
│   │   │   └── utils/            # 工具函数
│   │   ├── config/               # 配置文件(数据库、AI API、微信)
│   │   ├── dto/                  # 数据传输对象
│   │   ├── modules/              # 业务模块(MVP 只做 3 个核心模块)
│   │   │   ├── interview/        # 面试模块(核心,P0)
│   │   │   ├── user/             # 用户模块(微信登录,P0)
│   │   │   ├── resume/           # 简历模块(Phase 1.5,P1
│   │   │   ├── member/           # 会员模块(Phase 1.5,P1
│   │   │   ├── internship/       # 实习搜索模块(MVP 跳转,P1)
│   │   │   └── knowledge/        # 知识图谱模块(Phase 2,P2)
│   │   ├── ai/                   # AI 能力封装(opencode-go + NVIDIA 切换)
│   │   ├── wechat/              # 微信相关(登录、支付、订阅消息)
│   │   ├── app.module.ts
│   │   └── main.ts
│   ├── package.json
│   └── tsconfig.json
│
└── docs/                         # 项目文档
    ├── PRODUCT-PLAN.md           # 产品规划(✅ 已更新 v3.0
    ├── ARCHITECTURE.md           # 架构文档(✅ 当前文件)
    ├── FEATURE-LIST.md           # 功能清单(待更新)
    ├── ROADMAP.md                # 路线图(待更新)
    └── PROJECT-STATUS.md        # 进度文档(待更新)

三、核心数据模型(简化,快速迭代)

3.1 用户(User

{
  _id: ObjectId,
  openid: String,              // 微信 openid(唯一标识)
  nickname: String,             // 微信昵称
  avatar: String,               // 微信头像
  targetPosition: String,       // 目标岗位(校招热门岗位)
  targetIndustry: String,       // 目标行业
  memberStatus: {               // 会员状态
    type: String,              // free/vip
    expireAt: Date,
  },
  usage: {                     // 使用统计
    dailyInterviewCount: Number,  // 每日面试次数
    totalInterviewCount: Number,  // 总面试次数
    lastResetDate: Date,
  },
  createdAt: Date,
  updatedAt: Date
}

3.2 面试会话(Interview)—— 核心模型

{
  _id: ObjectId,
  userId: ObjectId,
  position: String,             // 面试岗位(如"前端工程师")
  status: String,               // pending/active/completed
  rounds: [{                   // 问答轮次
    question: String,           // AI 问题
    answer: String,             // 用户回答
    feedback: {                 // AI 反馈
      score: Number,           // 本题得分(0-100
      comment: String,         // 评语
      suggestion: String,      // 改进建议
      referenceAnswer: String, // 参考回答思路
    },
    createdAt: Date,
  }],
  summary: {                  // 面试总结
    totalScore: Number,        // 总分(0-100
    strengths: [String],       // 优势
    weaknesses: [String],      // 不足
    suggestions: [String],     // 综合建议
    dimensionScores: {          // 各维度得分
      logic: Number,          // 逻辑思维
      expression: Number,     // 表达能力
      professionalism: Number, // 专业度
      stability: Number,      // 情绪稳定性
    },
  },
  createdAt: Date,
  completedAt: Date
}

3.3 简历(Resume)—— Phase 1.5

{
  _id: ObjectId,
  userId: ObjectId,
  title: String,              // 简历标题
  originalContent: String,    // 原始内容
  targetPosition: String,     // 目标岗位
  createdAt: Date,
  updatedAt: Date
}

3.4 岗位题库(QuestionBank)—— Phase 2 知识图谱前置

{
  _id: ObjectId,
  position: String,           // 岗位名称(如"前端工程师")
  category: String,           // 分类(技术/职能/AI专项)
  difficulty: String,         // 难度(junior/mid/senior
  questions: [{
    content: String,          // 问题内容
    type: String,             // 类型(basic/algorithm/project/behavioral
    referenceAnswer: String,  // 参考回答
    tags: [String],          // 标签(如"闭包"、"贪心算法"
  }],
  createdAt: Date,
  updatedAt: Date
}

四、API 接口设计(MVP 核心接口)

4.1 用户模块(微信登录)

接口 方法 路径 说明
微信登录 POST /api/user/wx-login 微信授权登录,返回 token
获取用户信息 GET /api/user/info 获取用户信息
更新用户信息 PUT /api/user/update 更新目标岗位/行业

4.2 面试模块(核心)

接口 方法 路径 说明
创建面试 POST /api/interview/create 创建面试会话(选岗位)
获取面试 GET /api/interview/:id 获取面试详情
面试列表 GET /api/interview/list 获取用户面试列表
提交回答 POST /api/interview/:id/answer 提交本轮回答
获取反馈 GET /api/interview/:id/feedback 获取本轮反馈
结束面试 POST /api/interview/:id/complete 结束面试生成报告

4.3 实习搜索模块(MVP 跳转模式)

接口 方法 路径 说明
实习搜索 GET /api/internship/search 搜索实习岗位(聚合入口)
热门实习 GET /api/internship/hot 热门实习岗位列表

MVP 阶段:不存数据,只做搜索聚合入口(跳转模式),低成本验证用户需求。

4.4 简历模块(Phase 1.5

接口 方法 路径 说明
创建简历 POST /api/resume/create 创建简历记录
诊断简历 POST /api/resume/diagnosis AI 诊断简历问题

4.5 会员模块(Phase 1.5

接口 方法 路径 说明
会员订阅 POST /api/member/subscribe 微信支付订阅
获取会员状态 GET /api/member/status 获取会员信息

五、AI 面试模拟核心流程

用户选择岗位
    ↓
创建面试会话(/api/interview/create
    ↓
AI 生成第一题(基于岗位 + 用户简历)
    ↓
用户语音/文字回答
    ↓
提交回答(/api/interview/:id/answer
    ↓
AI 实时反馈(评分 + 评语 + 建议 + 参考回答)
    ↓
AI 追问(基于回答内容)
    ↓
循环(通常 5-8 轮)
    ↓
用户结束面试
    ↓
生成面试报告(/api/interview/:id/complete
    ↓
展示报告(总分 + 各维度得分 + 优劣势 + 建议)

5.1 AI Prompt 设计要点

系统提示词(System Prompt

你是一位专业的校招面试官,正在面试一位应聘{position}岗位的应届毕业生。
请根据以下要求进行了面试:
1. 问题要符合校招难度(不要求工作经验)
2. 结合应聘岗位提出专业问题
3. 根据考生回答进行针对性追问
4. 每次回答后给出评分(0-100)和具体改进建议
5. 面试共 5-8 轮,涵盖基础、项目、算法(如适用)、行为问题

反馈提示词(Feedback Prompt

请对以下面试回答进行评分和反馈:
问题:{question}
回答:{answer}
岗位:{position}

输出格式(JSON):
{
  "score": 85,
  "comment": "回答逻辑清晰,但缺少具体案例...",
  "suggestion": "建议结合项目经历,用STAR法则组织回答",
  "referenceAnswer": "参考回答思路:..."
}

六、部署架构

微信小程序 (用户端)
    ↓ HTTPS
Nginx 反向代理(腾讯云轻量应用服务器)
    ↓
backend (NestJS :3000)
    ↓
MongoDB Atlas (数据库)
    ↓
AI API (opencode-go → NVIDIA 主备切换)

6.1 合规优势

  • ICP 备案已完成(合规运营基础)
  • AI 深度合成类目已通过(可立即上线,竞品需 3-6 个月)
  • 微信小程序已配置(manifest.json

七、关键技术决策

7.1 为什么继续用 NestJS + MongoDB

  • 已有代码基础,重写浪费时间
  • NestJS 模块化适合快速迭代(MVP → Phase 1.5 → Phase 2
  • MongoDB 灵活的数据模型适合快速改 schema(早期频繁迭代)
  • 个人开发者能 hold 住(社区资源丰富)

7.2 为什么 MVP 先做 3 个核心模块?

  • 面试模块(核心差异,必须做好)
  • 用户模块(微信登录,0 门槛)
  • 实习搜索(跳转模式,低成本验证需求)

其他模块(简历、会员、知识图谱)MVP 后按优先级加入。

7.3 为什么实习搜索用跳转模式?

  • 不存数据 = 0 合规风险
  • 不爬数据 = 0 维护成本
  • 只做聚合搜索入口 = 低成本验证用户需求
  • 如果需求验证成功,Phase 1.5 再做"精选实习岗位"(人工整理)

7.4 AI 模型选型

  • 主用opencode-go (deepseek-v4-flash) — 性能优先,成本低
  • 备用NVIDIA (stepfun-ai/step-3.5-flash) — 主用不可用时自动降级
  • 合规:已备案,可合法提供 AI 服务

八、MVP 开发优先级

P0Week 1-2,必须完成)

  • 微信登录对接(/api/user/wx-login
  • 岗位选择页面(校招热门 20+ 岗位,含 AI 岗位)
  • AI 面试模拟核心逻辑(多轮对话)
  • 每轮反馈评分接口(/api/interview/:id/feedback
  • 面试报告生成(/api/interview/:id/complete
  • 历史面试记录查看(/api/interview/list

P1Week 3-4PMF 验证后)

  • 简历诊断功能(复用已有代码)
  • 会员系统开发(¥9.9/月)
  • 微信支付对接
  • 实习搜索聚合入口(跳转模式)

P2Week 5-8,增强功能)

  • AI 岗位专属题库(算法/大模型)
  • 技能缺口分析
  • 知识图谱(校招岗位-技能映射)
  • 精选实习岗位(人工整理)

九、性能与扩展性考虑

9.1 性能优化

  • AI 调用异步化(避免阻塞用户操作)
  • 面试报告生成用队列(防止并发超时)
  • MongoDB 索引优化(userId, position, createdAt

9.2 扩展性考虑

  • 模块化设计(NestJS 天然支持)
  • AI 模型可插拔(opencode-go / NVIDIA / 未来接入其他模型)
  • 数据库分片预留(用户量大的时候)
  • 微信支付/订阅消息可替换(如果未来做独立 App)

十、安全风险与应对

风险 影响 应对
AI 内容合规 微信下架 严格遵守微信 AI 内容规范;敏感词过滤;人工审核机制
用户数据泄露 信任危机 HTTPS 全站;数据库访问权限控制;不存敏感信息
微信登录伪造 账户被盗 签名验证;openid 绑定校验
AI API 费用失控 成本飙升 限制每日调用次数;监控告警;备用模型自动切换

变更记录

日期 变更内容 操作人
2026-05-14 职引项目启动,架构文档初版 AI
2026-05-15 方向调整:简历工具 → AI 职业发展平台 AI
2026-06-01 重新架构:专注校招,简化 MVP,价格 ¥9.9/月,合规优势 AI