🎯 AI Lab-InterReviewer — Cybernetic Command
一款面向顶尖高校实验室申请场景的 AI 面试系统 ,通过大语言模型模拟不同面试风格,提供全流程、多维度、沉浸式的面试训练体验。采用 Clean Architecture 分层架构重构,前端采用 「指挥舱」 深空主题 Dashboard 设计。
系统支持完整的 10 阶段面试流程 ,顶部进度条实时追踪:
开始 → 自我介绍 → 经历深挖 → 基础知识 → 代码 → 科研动机 → 科研潜力 → 综合追问 → 学生反问 → 结束
功能
说明
语音面试
Web Audio API 录音 → StepFun ASR 识别 → 自动发送至对话
文字对话
SSE 流式响应,实时逐字渲染 AI 回复
流式 TTS
Edge-TTS 句子级并行合成,边生成边播放,首句响应 < 2s
沉浸式模式
全屏语音交互界面,极简操作体验
RAG 知识库
ChromaDB 向量检索,CS 领域专业题库
代码编辑器
CodeMirror IDE 面板,语法高亮、括号匹配、代码折叠
AI 面试报告
多维度加权评分,Markdown 导出
简历解析
PDF 上传 → AI 分析,针对性个性化提问
导师信息搜索
联网检索目标导师信息,注入面试上下文
视频录制
可选 WebRTC 摄像头录制,面试留存
测试房间
导师创建房间 → 学生加入 → 标准化测试,结果自动上传
精简对话模式
仅显示当前轮次问答,模拟真实面试界面
┌─────────────────────────────────────────────┐
│ API 层 │
│ FastAPI Routes / Dependencies │
├─────────────────────────────────────────────┤
│ 服务层 │
│ ChatService / AudioService / ResumeService │
│ AdvisorService / RoomService / ReportService│
├─────────────────────────────────────────────┤
│ 领域层 │
│ Entities / Interfaces / Value Objects │
├─────────────────────────────────────────────┤
│ 基础设施层 │
│ LLM / TTS / ASR / RAG / Storage / Utils │
└─────────────────────────────────────────────┘
浏览器 (ES Modules 模块化前端)
│
├── POST /api/asr → ASRProvider → StepFun ASR
│
├── POST /api/chat/stream → ChatService
│ ├── RAGEngine (ChromaDB 检索)
│ ├── LLMProvider (Qwen 流式生成)
│ └── TTSProvider (Edge-TTS 合成)
│
├── POST /api/resume/upload → ResumeService → PDF解析 + AI分析
│
├── POST /api/advisor/search → AdvisorService → 联网检索
│
├── POST /api/report/stream → ReportService → AI报告生成
│
├── POST /api/teacher/create → RoomService → 创建测试房间
│
└── POST /api/student/join/{id} → RoomService → 加入房间
组件
技术
说明
Web 框架
FastAPI
异步高性能、SSE 流式推送、自动 API 文档
架构模式
Clean Architecture + DI
依赖注入容器,分层解耦
配置管理
Pydantic Settings
类型安全配置,.env 文件支持
LLM
DashScope (Qwen-Plus)
国内低延迟,流式输出
Embedding
DashScope Embedding
向量化中文文本
向量库
ChromaDB
本地持久化,元数据过滤
RAG
LangChain
文本分块 + 向量检索
TTS
Edge-TTS
免费多声色,句子级并行
ASR
StepFun step-asr
中文识别准确率高
HTTP 客户端
httpx
异步 HTTP,ASR API 调用
PDF 解析
pdfplumber + PyPDF2
简历 + 导师文档解析
技术
用途
原生 HTML/CSS/JS
零框架依赖,轻量高效
ES Modules
模块化前端架构,EventBus 事件解耦
EventBus
发布-订阅模式,解耦模块间通信
StateManager
单一数据源,集中管理应用状态
Web Audio API
浏览器录音
SSE (EventSource)
流式对话接收
CodeMirror 5
Web IDE 编辑器
CSS Glassmorphism
深空主题设计系统
Python 3.10+
阿里云 DashScope API Key(LLM + Embedding)
StepFun API Key(ASR 语音识别,TTS 可选)
# 1. 克隆项目
git clone https://github.com/your-repo/AI_Intereviewer_USTC.git
cd AI_Intereviewer_USTC
# 2. 安装依赖
pip install -r requirements.txt
# 3. 配置环境变量
cp .env.example .env
# 编辑 .env 填写 API Keys
# 4. 构建知识库向量索引
python scripts/build_cs_vector_store.py
# 5. 启动服务
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
地址
说明
http://localhost:8000
学生端主界面
http://localhost:8000/static/teacher.html
导师端管理界面
http://localhost:8000/docs
FastAPI 交互文档
所有配置通过 .env 文件或环境变量注入,参考 .env.example 。
变量
说明
DASHSCOPE_API_KEY
阿里云 DashScope API Key(LLM + Embedding)
STEPFUN_API_KEY_1
StepFun API Key(至少配置一个)
变量
默认值
说明
LLM_MODEL
qwen-plus
使用的 LLM 模型
TTS_PROVIDER
edge
TTS 提供者:edge(免费)或 stepfun
TTS_VOICE
zh-CN-YunjianNeural
Edge-TTS 声色
PORT
8000
服务端口
DEBUG
false
调试模式
SESSION_TTL_HOURS
2
会话有效期(小时)
MAX_CONVERSATION_TURNS
50
最大对话轮数
STEPFUN_API_KEY_2~8
空
多 Key 轮询(可选,突破限流)
声色
名称
特点
zh-CN-YunjianNeural
云健
沉稳磁性(默认)
zh-CN-YunxiNeural
云希
年轻活泼
zh-CN-XiaoxiaoNeural
晓晓
甜美女声
AI_Intereviewer_USTC/
├── main.py # FastAPI 应用入口
├── config.py # 旧版配置(向后兼容)
├── requirements.txt # Python 依赖
├── pytest.ini # 测试配置
├── .env.example # 环境变量模板
│
├── backend/ # 后端分层架构(Clean Architecture)
│ ├── config/
│ │ ├── settings.py # Pydantic Settings 配置管理
│ │ └── prompts/ # 预设提示词
│ │
│ ├── domain/ # 领域层(业务核心)
│ │ ├── entities/ # 实体:InterviewSession, ResumeInfo, AdvisorInfo
│ │ ├── interfaces/ # 抽象接口:LLMProvider, TTSProvider, ASRProvider
│ │ ├── value_objects/ # 值对象
│ │ └── events/ # 领域事件
│ │
│ ├── infrastructure/ # 基础设施层(外部依赖实现)
│ │ ├── llm/ # LLM 提供者(DashScope/StepFun)
│ │ ├── tts/ # TTS 提供者(Edge-TTS)
│ │ ├── asr/ # ASR 提供者(StepFun)
│ │ ├── rag/ # RAG 引擎(ChromaDB)
│ │ ├── storage/ # 存储(会话/文件)
│ │ └── utils/ # 工具(文本清理等)
│ │
│ ├── services/ # 服务层(业务逻辑编排)
│ │ ├── chat_service.py # 流式聊天
│ │ ├── audio_service.py # TTS + ASR
│ │ ├── resume_service.py # 简历解析
│ │ ├── advisor_service.py # 导师搜索
│ │ ├── room_service.py # 测试房间管理
│ │ └── report_service.py # 面试报告生成
│ │
│ ├── api/ # API 层(路由 + 依赖注入)
│ │ ├── routes/
│ │ │ ├── chat.py # /api/chat/* /api/asr
│ │ │ ├── resume.py # /api/resume/*
│ │ │ ├── advisor.py # /api/advisor/*
│ │ │ ├── room.py # /api/teacher/* /api/student/*
│ │ │ └── report.py # /api/report/*
│ │ └── dependencies.py # 通用依赖(presets等)
│ │
│ ├── container.py # 依赖注入容器
│ └── tests/ # 测试
│ ├── conftest.py # 通用 fixtures
│ ├── unit/ # 单元测试
│ │ ├── test_domain/
│ │ ├── test_services/
│ │ └── test_infrastructure/
│ └── integration/ # 集成测试
│ └── test_api/
│
├── frontend/ # 前端模块化架构(ES Modules)
│ ├── core/
│ │ ├── event-bus.js # 全局事件总线
│ │ ├── state-manager.js # 状态管理器
│ │ ├── api-client.js # API 客户端封装
│ │ └── config.js # 前端配置
│ ├── modules/
│ │ ├── settings/
│ │ │ ├── settings-manager.js # 设置管理
│ │ │ ├── sidebar-manager.js # 侧边栏
│ │ │ └── drawer-manager.js # 抽屉面板
│ │ ├── resume/
│ │ │ └── resume-manager.js # 简历管理
│ │ ├── advisor/
│ │ │ └── advisor-manager.js # 导师搜索
│ │ └── interview/
│ │ ├── mode-manager.js # 面试模式(标准/沉浸/测试)
│ │ ├── phase-timeline.js # 阶段时间线
│ │ └── report-manager.js # 报告生成
│ └── main.js # 模块化应用入口
│
├── static/ # 静态资源(传统前端,仍在使用)
│ ├── index.html # 学生端主页面
│ ├── teacher.html # 导师端页面
│ ├── css/style.css # 深空 Glassmorphism 设计系统
│ └── js/
│ ├── app.js # 主应用逻辑(单体,历史遗留)
│ ├── chat.js # 对话模块
│ ├── audio.js # 录音模块
│ ├── tts-stream.js # TTS 流式播放
│ ├── vad.js # 语音活动检测
│ ├── video.js # 视频录制
│ ├── teacher.js # 导师端逻辑
│ └── markdown-renderer.js # Markdown 渲染
│
├── modules/ # 旧版后端模块(向后兼容)
│ ├── llm_agent.py
│ ├── rag_engine.py
│ ├── audio_processor.py
│ ├── interview_manager.py
│ ├── ai_report.py
│ ├── resume_parser.py
│ ├── advisor_search.py
│ ├── advisor_docs.py
│ └── room_manager.py
│
├── data/ # 知识库数据
│ └── cs ai/ # CS 专业题库(JSONL)
│
├── vector_db/ # ChromaDB 向量数据库(本地持久化)
├── scripts/
│ └── build_cs_vector_store.py # 知识库向量化构建脚本
│
├── output/ # 运行时输出(gitignored)
│ ├── reports/ # 面试报告
│ ├── videos/ # 录像文件
│ ├── rooms/ # 房间数据
│ └── advisor_docs/ # 导师文档
│
└── temp_audio/ # TTS/ASR 临时音频(gitignored)
所有接口通过 X-Session-ID Header 传递会话 ID。
方法
路径
说明
POST
/api/chat/stream
流式聊天(SSE)
POST
/api/asr
语音识别(上传音频 → 返回文字)
POST
/api/tts
文字转语音
GET
/api/settings
获取会话设置
POST
/api/settings
保存会话设置
GET
/api/presets
获取预设提示词
GET
/api/rag/domains
获取可用 RAG 领域
GET
/api/rag/history
获取检索历史
方法
路径
说明
POST
/api/resume/upload
上传并解析简历 PDF
GET
/api/resume/status
获取简历上传状态
DELETE
/api/resume
删除简历
方法
路径
说明
POST
/api/advisor/search
联网搜索导师信息
GET
/api/advisor/status
获取当前导师状态
DELETE
/api/advisor
清除导师信息
POST
/api/advisor/document/upload
上传导师文档
GET
/api/advisor/document/list
获取文档列表
DELETE
/api/advisor/document/{filename}
删除指定文档
方法
路径
说明
POST
/api/report/stream
流式生成面试报告(SSE)
GET
/api/report/download/json
下载 JSON 格式对话记录
GET
/api/report/download/txt
下载 TXT 格式对话记录
方法
路径
说明
POST
/api/teacher/create
创建测试房间
GET
/api/teacher/rooms
列出所有房间
GET
/api/teacher/room/{id}
获取房间详情
PUT
/api/teacher/room/{id}/close
关闭房间
GET
/api/teacher/room/{id}/results
获取学生结果
方法
路径
说明
POST
/api/student/join/{room_id}
加入测试房间
POST
/api/student/submit
提交测试结果
在控制面板切换预设角色,或选择「自定义」编写完整 System Prompt:
风格
特点
温和型
循循善诱,充分提示,适合初学者
正常型(默认)
导师面试常规节奏,平衡考察基础与潜力
压力型
高频深挖,检验科研严谨性与抗压表达
自定义
完全自定义 System Prompt
# 新增领域只需 3 步:
# 1. 准备 JSONL 数据 → data/<新领域>/qa_xxx.jsonl
# 2. 运行向量化脚本
python scripts/build_cs_vector_store.py
# 3. 前端自动识别 vector_db/ 下的新领域目录
# 运行所有单元测试
pytest backend/tests/unit/ -v
# 运行基础设施层测试
pytest backend/tests/unit/test_infrastructure/ -v
# 运行服务层测试
pytest backend/tests/unit/test_services/ -v
# 运行带覆盖率报告
pytest backend/tests/ --cov=backend --cov-report=html
MIT License
🌟 如果这个项目对你有帮助,请给一个 Star 支持!