面试机器人项目系统开发

环境搭建步骤(教师可在授课前准备)

  • 克隆仓库并进入目录:
cd D:\QST\内涵教育\InterviewerAssistant
  • 后端 (Python) 环境:
python -m venv .venv; .\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
  • 前端 (Node) 环境:
# 在 InterviewerAssistant 根或 src 目录
npm install
# 或 pnpm install
  • 启动 Redis(本地测试)或配置连接到教学用 Redis 实例。
  • 配置环境变量(在教学机上准备 env.example 并改名为 .env):
    • API_KEYS(Doubao/DeepSeek/OpenAI)
    • ALIYUN_ASR_KEYALIYUN_ASR_SECRET
    • REDIS_URL

教学模块与详细实现步骤

任务 1 — 设计并实现前后端分离的 Web 应用架构

  • 知识点: SPA 概念、组件化开发、路由、状态管理(Pinia)、异步 API 调用、CORS、静态资源部署
  • 教师讲解要点:
    • 解释前后端分离的优点,演示 InterviewerAssistant/src 的组件结构。
    • 说明 API 设计原则(RESTful、状态码使用、分页、错误处理)。
  • 开发步骤:
    1. InterviewerAssistant/src 中演示并修改一个页面组件(如 ChatComponent.vue)。
    2. InterviewerAssistant/api/main.py 中定义 API 路由(示例:/api/interview/start/api/interview/message/api/upload/resume)。
    3. 使用 axiosfetch 在前端调用后端接口,处理跨域问题(CORS 中间件在 FastAPI 中配置)。
    4. 运行前后端独立开发服务器:前端 npm run dev,后端 uvicorn api.main:app --reload --host 0.0.0.0 --port 8000
  • 测试/验收:
    • 前端能通过 UI 发送请求并接收 JSON 响应;演示异常处理与重试策略。

任务 2 — 集成 Doubao/DeepSeek 等大模型 API(智能对话与问题生成)

  • 知识点: HTTP API 集成、异步调用、Prompt 工程、流式输出(若支持)、对话上下文管理
  • 教师讲解要点:
    • 对比不同大模型 API 的接口差异与费用/速率限制。
    • 介绍 Prompt 设计原则:指令明确、上下文控制、温度/采样参数调整。
  • 开发步骤:
    1. 在后端新增模块 api/ai_client.py,统一封装 Doubao/DeepSeek/OpenAI 的调用接口(包含重试、超时、限流)。
    2. 设计 Prompt 模板:面行为问题、技能题目、评分指引三类模板,保存在 api/prompts.py
    3. api/main.py 的会话处理路由中调用 ai_client.generate_question()ai_client.chat(),并将结果返回前端。
    4. 如需实时响应,支持 Server-Sent Events (SSE) 或 WebSocket 将模型生成流式推送给前端(FastAPI 提供 WebSocket 支持)。
  • 测试/验收:
    • 使用 Postman 或前端模拟请求验证问题生成质量;记录 Prompt 修改前后输出差异作为课堂练习。

任务 3 — 开发简历解析功能(PDF/TXT)

  • 知识点: PDF 文本抽取库(pypdfium2/pypdf2/pdfminer)、文本清洗、命名实体识别(NER)、关键词抽取、向量化检索(FAISS/Chroma)
  • 教师讲解要点:
    • 解析流程:文件上传 → 文本抽取 → 文本预处理 → 结构化字段抽取(姓名、教育、项目经验)→ 向量化索引。
  • 开发步骤:
    1. 在后端实现文件上传路由 /api/upload/resume,保存文件到临时目录。
    2. 使用 pypdfium2pdfminer.six 提取 PDF 文本;对 TXT 直接读取。实现 api/resume_parser.py 模块。
    3. 实验性使用正则或 spaCy/transformers 做简单的 NER 来识别关键字段;将解析结果保存为 JSON。
    4. 可选:使用嵌入模型(如 sentence-transformers)将简历文本向量化,使用向量数据库(FAISS/Chroma 或简单 Redis Vector)进行相似度检索以支持快速匹配/评分。
  • 测试/验收:
    • 提供若干样例简历(PDF/TXT),要求学生提交解析结果的 JSON,并对解析准确率做简单统计。

任务 4 — 实现语音识别功能(接入阿里云 ASR)

  • 知识点: ASR 基本概念、流式与批量识别、音频格式(wav、pcm)、字节处理、异步处理
  • 教师讲解要点:
    • 展示如何在前端采集麦克风音频(Web Audio / MediaRecorder),并以适当编码上传或直接推流。
    • 讲解阿里云 ASR 的鉴权与接口调用流程。
  • 开发步骤:
    1. 前端实现录音组件(可参考 InterviewerAssistant/src/components/ 的录音示例),将音频以 multipart/form-data 上传到后端 /api/asr/recognize
    2. 后端 api/asr.py 调用阿里云 ASR SDK/HTTP 接口完成识别,返回识别文本。
    3. 将识别文本与会话上下文合并,传递给大模型进行下一轮问答或评分。
  • 测试/验收:
    • 现场演示语音识别准确率,收集噪声环境下的表现并讨论容错策略(降噪、VAD)。

任务 5 — 会话管理系统(Redis 分布式会话存储)

  • 知识点: Redis 数据模型、会话键设计、TTL、并发控制、事务(必要时)、序列化(JSON)
  • 教师讲解要点:
    • 解释会话管理的作用:保持对话上下文、存储用户简历索引、保存评估结果
  • 开发步骤:
    1. 在后端实现会话管理模块 api/session_store.py,封装 Redis 操作:create_session()append_message()get_context()clear_session()
    2. 选择合适的序列化格式(JSON 或 msgpack);为会话设置 TTL(如 7 天)。
    3. 在路由中每次消息到达时,调用会话存储更新上下文并把上下文同时传给大模型接口。
  • 测试/验收:
    • 多用户并发访问模拟:验证会话隔离性、并发写入不丢失、TTL 机制生效。

任务 6 — 构建面试评估算法(个性化反馈报告)

  • 知识点: 基于规则的评分、基于模型的评分(使用 LLM 评分或微调分类器)、打分指标设计(表达、逻辑、专业性、案例深度)
  • 教师讲解要点:
    • 讨论评价指标如何设计以兼顾客观性与可解释性;示范使用 Prompt 让 LLM 给出评分与改进建议。
  • 开发步骤:
    1. 设计评分维度和权重(示例:表达 30%、逻辑 30%、专业 40%)。
    2. 实现 api/evaluator.py,其中包括:
      • 基于关键词/正则的规则评分模块(快速、可解释)
      • 基于 LLM 的评估模块:将对话转为评估 Prompt,要求 LLM 返回结构化评分与改进建议(JSON 格式)
    3. 生成教师/学生可下载的评估报告(PDF 或 HTML)。
  • 测试/验收:
    • 对同一段对话分别使用规则与 LLM 评分,比较差异并讨论优缺点。

任务 7 — 系统统计功能(监控用户活跃度与使用情况)

  • 知识点: 业务指标定义、事件埋点、时序统计、日志与监控(Prometheus/Grafana 可选)
  • 教师讲解要点:
    • 指标示例:日活(DAU)、会话时长、问题生成次数、发送语音次数、评分分布
  • 开发步骤:
    1. 在后端实现简单统计接口 api/stats.py,记录关键事件到 Redis 或关系型数据库(如 SQLite/Postgres)。
    2. 前端提供统计页面(可视化图表,使用 ECharts 或 Chart.js)展示关键指标。
    3. 可选:配置 Prometheus 导出自定义指标并用 Grafana 仪表盘展示。
  • 测试/验收:
    • 生成模拟流量并验证统计准确性与可视化展示正确。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容