環(huán)境搭建步驟(教師可在授課前準(zhǔn)備)
- 克隆倉庫并進(jìn)入目錄:
cd D:\QST\內(nèi)涵教育\InterviewerAssistant
- 后端 (Python) 環(huán)境:
python -m venv .venv; .\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
- 前端 (Node) 環(huán)境:
# 在 InterviewerAssistant 根或 src 目錄
npm install
# 或 pnpm install
- 啟動 Redis(本地測試)或配置連接到教學(xué)用 Redis 實例。
- 配置環(huán)境變量(在教學(xué)機上準(zhǔn)備
env.example并改名為.env):-
API_KEYS(Doubao/DeepSeek/OpenAI) -
ALIYUN_ASR_KEY、ALIYUN_ASR_SECRET REDIS_URL
-
教學(xué)模塊與詳細(xì)實現(xiàn)步驟
任務(wù) 1 — 設(shè)計并實現(xiàn)前后端分離的 Web 應(yīng)用架構(gòu)
- 知識點: SPA 概念、組件化開發(fā)、路由、狀態(tài)管理(Pinia)、異步 API 調(diào)用、CORS、靜態(tài)資源部署
-
教師講解要點:
- 解釋前后端分離的優(yōu)點,演示
InterviewerAssistant/src的組件結(jié)構(gòu)。 - 說明 API 設(shè)計原則(RESTful、狀態(tài)碼使用、分頁、錯誤處理)。
- 解釋前后端分離的優(yōu)點,演示
-
開發(fā)步驟:
- 在
InterviewerAssistant/src中演示并修改一個頁面組件(如ChatComponent.vue)。 - 在
InterviewerAssistant/api/main.py中定義 API 路由(示例:/api/interview/start、/api/interview/message、/api/upload/resume)。 - 使用
axios或fetch在前端調(diào)用后端接口,處理跨域問題(CORS 中間件在 FastAPI 中配置)。 - 運行前后端獨立開發(fā)服務(wù)器:前端
npm run dev,后端uvicorn api.main:app --reload --host 0.0.0.0 --port 8000。
- 在
-
測試/驗收:
- 前端能通過 UI 發(fā)送請求并接收 JSON 響應(yīng);演示異常處理與重試策略。
任務(wù) 2 — 集成 Doubao/DeepSeek 等大模型 API(智能對話與問題生成)
- 知識點: HTTP API 集成、異步調(diào)用、Prompt 工程、流式輸出(若支持)、對話上下文管理
-
教師講解要點:
- 對比不同大模型 API 的接口差異與費用/速率限制。
- 介紹 Prompt 設(shè)計原則:指令明確、上下文控制、溫度/采樣參數(shù)調(diào)整。
-
開發(fā)步驟:
- 在后端新增模塊
api/ai_client.py,統(tǒng)一封裝 Doubao/DeepSeek/OpenAI 的調(diào)用接口(包含重試、超時、限流)。 - 設(shè)計 Prompt 模板:面行為問題、技能題目、評分指引三類模板,保存在
api/prompts.py。 - 在
api/main.py的會話處理路由中調(diào)用ai_client.generate_question()或ai_client.chat(),并將結(jié)果返回前端。 - 如需實時響應(yīng),支持 Server-Sent Events (SSE) 或 WebSocket 將模型生成流式推送給前端(FastAPI 提供 WebSocket 支持)。
- 在后端新增模塊
-
測試/驗收:
- 使用 Postman 或前端模擬請求驗證問題生成質(zhì)量;記錄 Prompt 修改前后輸出差異作為課堂練習(xí)。
任務(wù) 3 — 開發(fā)簡歷解析功能(PDF/TXT)
- 知識點: PDF 文本抽取庫(pypdfium2/pypdf2/pdfminer)、文本清洗、命名實體識別(NER)、關(guān)鍵詞抽取、向量化檢索(FAISS/Chroma)
-
教師講解要點:
- 解析流程:文件上傳 → 文本抽取 → 文本預(yù)處理 → 結(jié)構(gòu)化字段抽?。ㄐ彰⒔逃?、項目經(jīng)驗)→ 向量化索引。
-
開發(fā)步驟:
- 在后端實現(xiàn)文件上傳路由
/api/upload/resume,保存文件到臨時目錄。 - 使用
pypdfium2或pdfminer.six提取 PDF 文本;對 TXT 直接讀取。實現(xiàn)api/resume_parser.py模塊。 - 實驗性使用正則或 spaCy/transformers 做簡單的 NER 來識別關(guān)鍵字段;將解析結(jié)果保存為 JSON。
- 可選:使用嵌入模型(如 sentence-transformers)將簡歷文本向量化,使用向量數(shù)據(jù)庫(FAISS/Chroma 或簡單 Redis Vector)進(jìn)行相似度檢索以支持快速匹配/評分。
- 在后端實現(xiàn)文件上傳路由
-
測試/驗收:
- 提供若干樣例簡歷(PDF/TXT),要求學(xué)生提交解析結(jié)果的 JSON,并對解析準(zhǔn)確率做簡單統(tǒng)計。
任務(wù) 4 — 實現(xiàn)語音識別功能(接入阿里云 ASR)
- 知識點: ASR 基本概念、流式與批量識別、音頻格式(wav、pcm)、字節(jié)處理、異步處理
-
教師講解要點:
- 展示如何在前端采集麥克風(fēng)音頻(Web Audio / MediaRecorder),并以適當(dāng)編碼上傳或直接推流。
- 講解阿里云 ASR 的鑒權(quán)與接口調(diào)用流程。
-
開發(fā)步驟:
- 前端實現(xiàn)錄音組件(可參考
InterviewerAssistant/src/components/的錄音示例),將音頻以 multipart/form-data 上傳到后端/api/asr/recognize。 - 后端
api/asr.py調(diào)用阿里云 ASR SDK/HTTP 接口完成識別,返回識別文本。 - 將識別文本與會話上下文合并,傳遞給大模型進(jìn)行下一輪問答或評分。
- 前端實現(xiàn)錄音組件(可參考
-
測試/驗收:
- 現(xiàn)場演示語音識別準(zhǔn)確率,收集噪聲環(huán)境下的表現(xiàn)并討論容錯策略(降噪、VAD)。
任務(wù) 5 — 會話管理系統(tǒng)(Redis 分布式會話存儲)
- 知識點: Redis 數(shù)據(jù)模型、會話鍵設(shè)計、TTL、并發(fā)控制、事務(wù)(必要時)、序列化(JSON)
-
教師講解要點:
- 解釋會話管理的作用:保持對話上下文、存儲用戶簡歷索引、保存評估結(jié)果
-
開發(fā)步驟:
- 在后端實現(xiàn)會話管理模塊
api/session_store.py,封裝 Redis 操作:create_session()、append_message()、get_context()、clear_session()。 - 選擇合適的序列化格式(JSON 或 msgpack);為會話設(shè)置 TTL(如 7 天)。
- 在路由中每次消息到達(dá)時,調(diào)用會話存儲更新上下文并把上下文同時傳給大模型接口。
- 在后端實現(xiàn)會話管理模塊
-
測試/驗收:
- 多用戶并發(fā)訪問模擬:驗證會話隔離性、并發(fā)寫入不丟失、TTL 機制生效。
任務(wù) 6 — 構(gòu)建面試評估算法(個性化反饋報告)
- 知識點: 基于規(guī)則的評分、基于模型的評分(使用 LLM 評分或微調(diào)分類器)、打分指標(biāo)設(shè)計(表達(dá)、邏輯、專業(yè)性、案例深度)
-
教師講解要點:
- 討論評價指標(biāo)如何設(shè)計以兼顧客觀性與可解釋性;示范使用 Prompt 讓 LLM 給出評分與改進(jìn)建議。
-
開發(fā)步驟:
- 設(shè)計評分維度和權(quán)重(示例:表達(dá) 30%、邏輯 30%、專業(yè) 40%)。
- 實現(xiàn)
api/evaluator.py,其中包括:- 基于關(guān)鍵詞/正則的規(guī)則評分模塊(快速、可解釋)
- 基于 LLM 的評估模塊:將對話轉(zhuǎn)為評估 Prompt,要求 LLM 返回結(jié)構(gòu)化評分與改進(jìn)建議(JSON 格式)
- 生成教師/學(xué)生可下載的評估報告(PDF 或 HTML)。
-
測試/驗收:
- 對同一段對話分別使用規(guī)則與 LLM 評分,比較差異并討論優(yōu)缺點。
任務(wù) 7 — 系統(tǒng)統(tǒng)計功能(監(jiān)控用戶活躍度與使用情況)
- 知識點: 業(yè)務(wù)指標(biāo)定義、事件埋點、時序統(tǒng)計、日志與監(jiān)控(Prometheus/Grafana 可選)
-
教師講解要點:
- 指標(biāo)示例:日活(DAU)、會話時長、問題生成次數(shù)、發(fā)送語音次數(shù)、評分分布
-
開發(fā)步驟:
- 在后端實現(xiàn)簡單統(tǒng)計接口
api/stats.py,記錄關(guān)鍵事件到 Redis 或關(guān)系型數(shù)據(jù)庫(如 SQLite/Postgres)。 - 前端提供統(tǒng)計頁面(可視化圖表,使用 ECharts 或 Chart.js)展示關(guān)鍵指標(biāo)。
- 可選:配置 Prometheus 導(dǎo)出自定義指標(biāo)并用 Grafana 儀表盤展示。
- 在后端實現(xiàn)簡單統(tǒng)計接口
-
測試/驗收:
- 生成模擬流量并驗證統(tǒng)計準(zhǔn)確性與可視化展示正確。