环境搭建步骤(教师可在授课前准备)
- 克隆仓库并进入目录:
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_KEY、ALIYUN_ASR_SECRET REDIS_URL
-
教学模块与详细实现步骤
任务 1 — 设计并实现前后端分离的 Web 应用架构
- 知识点: SPA 概念、组件化开发、路由、状态管理(Pinia)、异步 API 调用、CORS、静态资源部署
-
教师讲解要点:
- 解释前后端分离的优点,演示
InterviewerAssistant/src的组件结构。 - 说明 API 设计原则(RESTful、状态码使用、分页、错误处理)。
- 解释前后端分离的优点,演示
-
开发步骤:
- 在
InterviewerAssistant/src中演示并修改一个页面组件(如ChatComponent.vue)。 - 在
InterviewerAssistant/api/main.py中定义 API 路由(示例:/api/interview/start、/api/interview/message、/api/upload/resume)。 - 使用
axios或fetch在前端调用后端接口,处理跨域问题(CORS 中间件在 FastAPI 中配置)。 - 运行前后端独立开发服务器:前端
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 设计原则:指令明确、上下文控制、温度/采样参数调整。
-
开发步骤:
- 在后端新增模块
api/ai_client.py,统一封装 Doubao/DeepSeek/OpenAI 的调用接口(包含重试、超时、限流)。 - 设计 Prompt 模板:面行为问题、技能题目、评分指引三类模板,保存在
api/prompts.py。 - 在
api/main.py的会话处理路由中调用ai_client.generate_question()或ai_client.chat(),并将结果返回前端。 - 如需实时响应,支持 Server-Sent Events (SSE) 或 WebSocket 将模型生成流式推送给前端(FastAPI 提供 WebSocket 支持)。
- 在后端新增模块
-
测试/验收:
- 使用 Postman 或前端模拟请求验证问题生成质量;记录 Prompt 修改前后输出差异作为课堂练习。
任务 3 — 开发简历解析功能(PDF/TXT)
- 知识点: PDF 文本抽取库(pypdfium2/pypdf2/pdfminer)、文本清洗、命名实体识别(NER)、关键词抽取、向量化检索(FAISS/Chroma)
-
教师讲解要点:
- 解析流程:文件上传 → 文本抽取 → 文本预处理 → 结构化字段抽取(姓名、教育、项目经验)→ 向量化索引。
-
开发步骤:
- 在后端实现文件上传路由
/api/upload/resume,保存文件到临时目录。 - 使用
pypdfium2或pdfminer.six提取 PDF 文本;对 TXT 直接读取。实现api/resume_parser.py模块。 - 实验性使用正则或 spaCy/transformers 做简单的 NER 来识别关键字段;将解析结果保存为 JSON。
- 可选:使用嵌入模型(如 sentence-transformers)将简历文本向量化,使用向量数据库(FAISS/Chroma 或简单 Redis Vector)进行相似度检索以支持快速匹配/评分。
- 在后端实现文件上传路由
-
测试/验收:
- 提供若干样例简历(PDF/TXT),要求学生提交解析结果的 JSON,并对解析准确率做简单统计。
任务 4 — 实现语音识别功能(接入阿里云 ASR)
- 知识点: ASR 基本概念、流式与批量识别、音频格式(wav、pcm)、字节处理、异步处理
-
教师讲解要点:
- 展示如何在前端采集麦克风音频(Web Audio / MediaRecorder),并以适当编码上传或直接推流。
- 讲解阿里云 ASR 的鉴权与接口调用流程。
-
开发步骤:
- 前端实现录音组件(可参考
InterviewerAssistant/src/components/的录音示例),将音频以 multipart/form-data 上传到后端/api/asr/recognize。 - 后端
api/asr.py调用阿里云 ASR SDK/HTTP 接口完成识别,返回识别文本。 - 将识别文本与会话上下文合并,传递给大模型进行下一轮问答或评分。
- 前端实现录音组件(可参考
-
测试/验收:
- 现场演示语音识别准确率,收集噪声环境下的表现并讨论容错策略(降噪、VAD)。
任务 5 — 会话管理系统(Redis 分布式会话存储)
- 知识点: Redis 数据模型、会话键设计、TTL、并发控制、事务(必要时)、序列化(JSON)
-
教师讲解要点:
- 解释会话管理的作用:保持对话上下文、存储用户简历索引、保存评估结果
-
开发步骤:
- 在后端实现会话管理模块
api/session_store.py,封装 Redis 操作:create_session()、append_message()、get_context()、clear_session()。 - 选择合适的序列化格式(JSON 或 msgpack);为会话设置 TTL(如 7 天)。
- 在路由中每次消息到达时,调用会话存储更新上下文并把上下文同时传给大模型接口。
- 在后端实现会话管理模块
-
测试/验收:
- 多用户并发访问模拟:验证会话隔离性、并发写入不丢失、TTL 机制生效。
任务 6 — 构建面试评估算法(个性化反馈报告)
- 知识点: 基于规则的评分、基于模型的评分(使用 LLM 评分或微调分类器)、打分指标设计(表达、逻辑、专业性、案例深度)
-
教师讲解要点:
- 讨论评价指标如何设计以兼顾客观性与可解释性;示范使用 Prompt 让 LLM 给出评分与改进建议。
-
开发步骤:
- 设计评分维度和权重(示例:表达 30%、逻辑 30%、专业 40%)。
- 实现
api/evaluator.py,其中包括:- 基于关键词/正则的规则评分模块(快速、可解释)
- 基于 LLM 的评估模块:将对话转为评估 Prompt,要求 LLM 返回结构化评分与改进建议(JSON 格式)
- 生成教师/学生可下载的评估报告(PDF 或 HTML)。
-
测试/验收:
- 对同一段对话分别使用规则与 LLM 评分,比较差异并讨论优缺点。
任务 7 — 系统统计功能(监控用户活跃度与使用情况)
- 知识点: 业务指标定义、事件埋点、时序统计、日志与监控(Prometheus/Grafana 可选)
-
教师讲解要点:
- 指标示例:日活(DAU)、会话时长、问题生成次数、发送语音次数、评分分布
-
开发步骤:
- 在后端实现简单统计接口
api/stats.py,记录关键事件到 Redis 或关系型数据库(如 SQLite/Postgres)。 - 前端提供统计页面(可视化图表,使用 ECharts 或 Chart.js)展示关键指标。
- 可选:配置 Prometheus 导出自定义指标并用 Grafana 仪表盘展示。
- 在后端实现简单统计接口
-
测试/验收:
- 生成模拟流量并验证统计准确性与可视化展示正确。