# IntervAI **Repository Path**: mutant_z/interv-ai ## Basic Information - **Project Name**: IntervAI - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-21 - **Last Updated**: 2026-08-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TechProbe — AI Technical Interview Agent Platform > **TechProbe** 是一个基于 **Go 模块化单体 (Modular Monolith)** + **Vue 3 + TypeScript SPA (全端响应式与专属移动端)** 架构的沉浸式大厂技术面试 Agent 平台。支持用户自定义模型 (OpenAI / Anthropic Compatible 网关)、多模态 RAG 专有知识库、面试状态机、实时连续追问与压力面试、分层上下文窗口与长短期记忆管理。 --- ## 一、系统架构与设计原则 ```text ┌────────────────────────────────────────────────────────────────────────┐ │ Frontend (Vue 3 + TypeScript) │ │ ├── PC 端 Web 界面 (Modern AI Developer Theme, Tailwind, RadarChart)│ │ └── 移动端专属适配 (TabBar, BottomSheet, Drawer, Touch 交互) │ └───────────────────────────────────┬────────────────────────────────────┘ │ RESTful API + Server-Sent Events (SSE) ▼ ┌────────────────────────────────────────────────────────────────────────┐ │ Go Backend (Modular Monolith) │ │ ├── Auth & Session (HttpOnly Cookie, JWT/bcrypt, RateLimit, CORS) │ │ ├── User Profile & Settings │ │ ├── Model Config & LLM Gateway (AES-GCM 256-bit 加密密钥) │ │ │ ├── OpenAI Compatible Adapter │ │ │ └── Anthropic Messages Adapter │ │ ├── Reranker Module (独立重排服务抽象, 支持 SiliconFlow / BAAI 等) │ │ ├── Durable RAG Worker + Docling Parser (PDF/DOCX/PPTX/MD/TXT/Images) │ │ ├── RAG Hybrid Retrieval (sqlite-vec KNN + FTS5 全文检索 + 加权 RRF) │ │ ├── Agent Runtime (Logical Multi-Agent) │ │ │ ├── Question Policy & Action Planner (Topic Coverage) │ │ │ ├── Answer Evaluator & Multi-dimension Scorer │ │ │ ├── Dynamic Question Generator (Scenario, DeepDive, Challenge) │ │ │ └── Wrap-up Responder (反问环节与优雅结语收敛) │ │ ├── Context Manager (L0-L5 分层装配, Token 预算管理, 70% 阈值压缩) │ │ ├── Long-term Memory Extractor (持久化候选人技能画像与误区提炼) │ │ ├── Daily Chat (多会话管理, 知识库绑定, 附件感知与流式追问) │ │ └── Admin Metrics & Health Check │ │ │ │ │ ├── SQLite (WAL 模式, FTS5 分词, sqlite-vec 向量扩展) │ │ ├── Redis (可选: 查询向量与检索结果二级缓存) │ │ └── Local Uploads / S3-compatible Object Storage (多模态图片) │ └───────────────────────────────────┬────────────────────────────────────┘ │ HTTP ▼ ┌────────────────────────────────────────────────────────────────────────┐ │ Python Parser Service (Docling 2.x + 多语言 OCR, 内部网络容器隔离) │ └────────────────────────────────────────────────────────────────────────┘ ``` --- ## 二、核心功能与模块 ### 1. 真实限时模拟面试 (Mode A) - **参数配置**: 面试岗位、难度等级 (Junior/Mid/Senior/Staff)、时长 (15~60分钟)、压力等级 (Level 0~3)、自定义考察范围、模型选择与知识库绑定。 - **面试状态机**: `CREATED` → `INTRODUCTION` → `WARM_UP` → `TECHNICAL` → `DEEP_DIVE` → `PROJECT` → `SYSTEM_DESIGN` → `WRAP_UP` → `FINISHED` - **动态规划 (Planner & Policy Engine)**: - 每轮根据历史回答评估、剩余时间与各领域覆盖率 (Topic Coverage) 动态决定下一步动作 (`ASK_NEW`、`FOLLOW_UP`、`CHALLENGE`、`DEEP_DIVE`、`SWITCH_TOPIC`、`WRAP_UP`)。 - 具备专门的 `WrapupResponder` 处理候选人的反向提问,优雅收敛面试流程。 - **压力面试策略**: 压力来源于时间约束、边界极限条件、反例挑战与底层机制追问,杜绝任何人生攻击或辱骂。 - **实时 SSE 流式互动**: 后端记录真实 `started_at` 与 `remaining_seconds`,支持展示思考阶段 (`evaluating` → `planning` → `retrieving`) 且不泄露内部私有推理链。 - **深度复盘报告与 7 维评估**: - 面试结束后生成综合得分 (100 分制)、7 维能力雷达评分 (计算机基础、代码能力、系统设计、工程素养、沟通表达、问题解决、抗压能力)。 - 结构化总结优势亮点、薄弱项、关键硬伤、推荐复习方向及全场逐题复盘与参考答案。 ### 2. 日常技术问答 (Mode B) - 类似 Claude / ChatGPT 的现代开发者对话界面,支持多会话管理与历史归档。 - 支持直接关联/切换专有知识库,支持上传附件进行代码审查、技术方案推敲与单题深度模拟。 ### 3. 多模态 RAG 知识库与解析引擎 - **多格式自动入库**: 支持 PDF、DOCX、PPTX、Markdown、TXT、PNG、JPG/JPEG、WebP;扫描件与图片由 Docling/OCR 自动解析。 - **持久化流水线**: 上传后由异步 Worker 执行解析、清洗、结构感知 Chunk、多模态向量化和双索引提交;任务中断可恢复,失败会自动重试。 - **智能切片 (Semantic Chunking)**: 目标 600 Token、最大 800、具备真实滑动窗口 Overlap,严格保留标题、页码、幻灯片、表格、代码块及问答边界。 - **Hybrid 融合检索**: - 中文增强 FTS5 与 sqlite-vec 向量检索并行召回; - 经过加权倒数排名融合 (RRF) 与独立解耦的 Cross-Encoder / Reranker 模块进行精准重排; - 支持 Redis 二级结果缓存;所有检索强制按用户与知识库严格隔离。 - **RAG 可视化调试**: 提供实时检索测试工具,展示 Top-K 命中切片、相似度得分、重排得分与来源元数据。 - **检索防注入 (Safety)**: Prompt 强约束将检索文档严格作为外部参考资料,防止 Prompt Injection 篡改系统规则。 ### 4. 全端响应式与专属移动端体验 - **移动端专属组件**: 专为移动端打造的 BottomSheet、Drawer、TabBar、Segmented Control 与响应式 RadarChart。 - **流畅手势与视口优化**: 解决移动端软键盘遮挡、安全区域 (Safe Area Insets)、动态视口高度 (dvh) 与滚动穿透问题。 - **双端自适应路由**: 自动识别桌面端与移动端环境,无缝切换布局与交互体验。 ### 5. 上下文与长短期记忆管理 (Context Window Cache) - **分层装配 (Layered Prompt)**: L0 核心系统指令、L1 稳定面试配置、L2 结构化状态、L3 长期记忆、L4 RAG 知识、L5 压缩摘要、L6 近期原话 (6~12 turns)。 - **70% 阈值压缩**: 当上下文超出 Token 预算时触发无损摘要压缩,使用 `` 边界标签隔离,并保证冲突时以近期原话为准。 - **长期记忆沉淀 (Memory Extractor)**: 面试结束后自动提炼候选人的知识掌握盲区与典型思维误区沉淀至数据库,下次面试根据领域动态载入。 --- ## 三、快速开始 ### 方式 1: Docker Compose 一键启动 (推荐) ```bash # 1. 克隆项目并进入根目录 git clone https://github.com/Mutant-z/IntervAI.git techprobe cd techprobe # 2. 创建本地配置 (对象存储仅在需要图片视觉索引时配置) cp .env.example .env # 3. 启动 Docker 容器 (包含后端、前端与 Docling 内部解析服务) docker compose up -d # 4. 访问系统 # 打开浏览器访问: http://localhost:8080 ``` 首次登录后在「模型管理」页面配置您的 LLM、Embedding 与 Rerank 服务(所有 API Key 均在服务端经过 AES-GCM 256 位加密存储)。 --- ### 方式 2: 本地开发启动 #### 环境要求 - **Go**: 1.22+ - **Node.js**: v18+ (推荐 v20+) - **npm**: 9+ - **Python**: 3.10+ (用于 Docling 解析服务,`scripts/start.sh` 会自动配置独立 venv) #### 一键脚本启动 ```bash # 推荐:一键启动解析器服务、Go 后端与前端服务 ./scripts/start.sh # 停止服务 ./scripts/stop.sh # 查看实时运行日志 ./scripts/logs.sh ``` #### 或使用 Makefile / 分步启动 ```bash # 后端启动 cd backend go run -tags sqlite_fts5 cmd/server/main.go # 前端开发启动 (在另一个终端) cd frontend npm install npm run dev # 前端 Vite 运行在 http://localhost:5173 (自动代理 API 请求至 8080) ``` #### Makefile 快捷指令 ```bash make test # 运行后端单元测试与前端 Vitest 测试 make build # 构建前端 dist 与后端二进制可执行文件 make dev # 同时启动本地前端与后端开发服务 ``` --- ## 四、Demo 使用全流程 1. **注册与登录**: - 访问 `http://localhost:8080` (本地开发访问 `http://localhost:5173`)。 - 进入 `/register` 注册账号,系统通过安全 `HttpOnly Cookie` 自动维持会话。 2. **配置大模型与 Reranker**: - 进入「模型管理」页面,点击「添加新模型」。 - 支持填写任意 OpenAI 兼容协议服务 (如 DeepSeek、SiliconFlow、OpenAI、Moonshot、Zhipu、Ollama、OneAPI 等) 或 Anthropic 协议服务。 - 配置 Embedding / Rerank 模型服务,点击「测试连接」验证连通性。 3. **创建知识库并上传文档**: - 进入「知识库 RAG」页面,创建知识库 (如 `Go 架构与分布式系统题库`)。 - 拖拽或上传 PDF、DOCX、PPTX、Markdown、TXT 或图片。系统异步 Worker 自动完成 OCR 解析、语义分块、向量化与多维索引。 - 使用右侧「RAG 检索效果调试」输入查询词,实时检验 Top-K 命中切片及得分。 4. **发起模拟面试**: - 进入「模拟面试」,配置岗位 (`Go 后端架构师`)、时长 (`30分钟`)、难度 (`Senior`) 与压力等级 (`Level 2`),勾选考察范围并关联知识库。 - 点击「立即开始模拟面试」进入考场。 5. **实时考场互动**: - 顶部实时显示倒计时、题号与当前面试阶段; - 候选人提交答案后,面试官实时显示思考状态 (`正在评估回答...` → `正在规划下一轮考察重点...`),并进行动态追问、极限挑战或阶段跃迁。 6. **面试复盘报告与记忆沉淀**: - 面试结束自动生成 7 维雷达图、综合总分、亮点优势、关键软肋与逐题复盘; - 系统自动将弱项沉淀为长期技能记忆,在未来的面试中自适应强化考察。 --- ## 五、项目目录结构 ```text techprobe/ ├── backend/ # Go 模块化单体后端 │ ├── cmd/ │ │ ├── server/main.go # 后端入口与路由组装 │ │ └── rag-eval/ # RAG 效果评估工具 │ ├── internal/ │ │ ├── admin/ # 系统指标与审计统计 │ │ ├── agent/ # 面试状态机、规划器、评估器、题目策略与收尾响应器 │ │ ├── assetstore/ # 资产与对象存储适配 │ │ ├── auth/ # 认证服务、JWT/Session 管理与密码哈希 │ │ ├── chat/ # 技术问答服务、多会话管理与 SSE 流 │ │ ├── config/ # 全局环境配置加载与校验 │ │ ├── context/ # L0-L5 分层 Prompt 上下文装配与 70% 阈值压缩 │ │ ├── document/ # 多格式解析、清洗、语义切片器与入库持久化 │ │ ├── embedding/ # 多模态向量化客户端 (Doubao/OpenAI 兼容) │ │ ├── interview/ # 模拟面试生命周期、打分器、复盘报告生成 │ │ ├── jobs/ # 异步 Worker 任务池 │ │ ├── knowledgebinding/ # 会话与知识库动态绑定 │ │ ├── llm/ # LLM 统一接口与网关 (OpenAI / Anthropic) │ │ ├── memory/ # 长期技能记忆提取与检索 │ │ ├── middleware/ # 鉴权、RateLimit、CORS、日志审计中间件 │ │ ├── modelconfig/ # 模型配置管理与 AES 加解密服务 │ │ ├── parser/ # Docling / 本地解析服务客户端 │ │ ├── rag/ # 融合检索器 (FTS5 + sqlite-vec + RRF) 与缓存 │ │ ├── ragindex/ # 多维向量索引仓储 │ │ ├── ragsettings/ # RAG 参数与检索配置管理 │ │ ├── reranker/ # 独立重排服务 (Cross-Encoder / API) │ │ ├── sqlitevec/ # sqlite-vec CGO 扩展绑定 │ │ ├── storage/ # SQLite 连接池 (WAL 模式) 与嵌入式 Migration │ │ └── user/ # 用户信息与配置管理 │ ├── migrations/ # 数据库 SQL 迁移文件 │ └── pkg/ # 基础通用包 (AES-GCM, JWT, Logger, SSE Writer, Tokenizer) ├── frontend/ # Vue 3 + TypeScript + Vite 前端 │ ├── src/ │ │ ├── api/ # Axios 请求客户端与全局拦截器 │ │ ├── components/ # 通用组件 (RadarChart, MarkdownView, Toast, Modal 等) │ │ ├── composables/ # 组合式函数 (Sidebar, Toast 等) │ │ ├── mobile/ # 移动端专属组件与页面视图 │ │ │ ├── components/ # MobileTabBar, MobileHeader, MobileDrawer, MobileBottomSheet 等 │ │ │ ├── styles/ # 移动端专属样式规范 │ │ │ ├── utils/ # 设备判定与移动端导航控制 │ │ │ └── views/ # 移动端对应各功能页面 │ │ ├── router/ # 路由守卫与双端自适应路由分发 │ │ ├── stores/ # Pinia 状态管理 (Auth, Interview) │ │ ├── types/ # 全局 TypeScript 接口定义 │ │ ├── utils/ # SSE 流处理、打分计算、附件工具 │ │ ├── views/ # PC 端各功能视图 │ │ ├── App.vue # 根组件 (含环境自适应容器) │ │ ├── main.ts # 前端入口 │ │ └── style.css # Modern AI Developer 主题样式表 │ ├── tests/ # 前端 Vitest 单元测试与端到端集成测试集 │ └── vite.config.ts ├── rag-parser/ # Python Docling 2.x 文档与 OCR 解析服务 │ ├── app/main.py # FastAPI 解析服务入口 │ ├── Dockerfile # Parser 服务容器构建文件 │ └── requirements.txt ├── docker/ # Docker 镜像构建配置 ├── docker-compose.yml # Docker 一键容器编排 ├── scripts/ # 运维与测试脚本 (start.sh, stop.sh, logs.sh, test_e2e.sh) ├── Makefile # 构建与研发指令集 ├── .env.example # 环境变量参考模板 └── README.md # 项目使用与架构文档 ``` --- ## 六、环境变量说明 | 变量名 | 默认值 | 说明 | |---|---|---| | `APP_ENV` | `development` | 运行环境 (`development` / `production`) | | `APP_PORT` | `8080` | 服务监听端口 | | `DATABASE_PATH` | `data/db/techprobe.db` | SQLite 数据库文件存储路径 | | `UPLOAD_DIR` | `data/uploads` | 文档与附件上传存储目录 | | `APP_ENCRYPTION_KEY` | `techprobe-secure-aes-gcm-master-key-32b` | 服务端 AES-GCM 256 位加密主密钥 (用于加密 API Key) | | `SESSION_SECRET` | `techprobe-development-session-secret-key-32b` | 用户 Session 密钥 | | `MAX_UPLOAD_SIZE` | `20971520` | 单文件最大上传限制 (20MB) | | `RAG_BATCH_UPLOAD_LIMIT` | `20` | 单批次上传文档数上限 | | `PARSER_SERVICE_URL` | `http://rag-parser:8000` | Docling 文档与 OCR 内部解析服务地址 | | `PARSER_TIMEOUT_SECONDS` | `300` | 单文件解析超时限制 (秒) | | `WORKER_CONCURRENCY` | `3` | 文档解析入库后台并发 Worker 数量 | | `RAG_CHUNK_STRATEGY` | `semantic-v1` | 文档切分策略 (`semantic-v1` / `fixed`) | | `RAG_CHUNK_MAX_TOKENS` | `800` | 单切片 Token 容量硬上限 | | `RAG_SEMANTIC_WINDOW_SIZE` | `3` | 语义边界检测的滑动平滑窗口大小 | | `RAG_REDIS_ENABLED` | `false` | 是否启用 Redis 检索结果与 Query Embedding 缓存 | | `REDIS_URL` | `redis://127.0.0.1:6379/0` | Redis 服务连接地址 | | `RAG_RERANK_MIN_RELEVANCE` | `0.50` | 精排相关性过滤阈值 | | `RAG_VECTOR_MIN_SIMILARITY`| `0.45` | 向量召回最低余弦相似度阈值 | | `OBJECT_STORAGE_ENDPOINT` | 无 | 可选:S3 兼容对象存储内部 endpoint (用于图片视觉向量索引) | | `OBJECT_STORAGE_PUBLIC_ENDPOINT` | 无 | 可选:外部可访问的公网 endpoint (用于生成临时图片签名 URL) | | `OBJECT_STORAGE_REGION` | `cn-beijing` | 对象存储区域 | | `OBJECT_STORAGE_BUCKET` | 无 | 图片存储 Bucket 名称 | | `OBJECT_STORAGE_ACCESS_KEY`| 无 | 对象存储 Access Key | | `OBJECT_STORAGE_SECRET_KEY`| 无 | 对象存储 Secret Key | --- ## 七、自动化测试与验证 本项目包含完善的后端与前端测试套件,覆盖模型接口、状态机流转、评估算法、Reranker、多端适配与 SSE 协议: ```bash # 1. 运行后端全套单元测试 (包含 SQLite FTS5 与向量扩展标签) cd backend && go test -tags sqlite_fts5 -v ./... # 2. 运行前端 Vitest 单元测试与组件测试 (12 个测试文件, 58+ 测试用例) cd frontend && npm test # 3. 运行前端 TypeScript 类型检查与生产打包验证 cd frontend && npm run build # 4. 运行端到端 E2E 全流程自动化测试 (覆盖注册、模型配置、知识库构建、面试流转与复盘打分) ./scripts/test_e2e.sh ``` ### SSE 流式链路生产建议 日常技术问答和模拟面试均使用 `POST` SSE 长连接通信。在生产环境反向代理 (如 Nginx、Caddy、Cloudflare 或网关) 中,建议进行如下配置: 1. **禁用代理缓冲 (Buffering)**: 关闭 `proxy_buffering`,避免响应在末尾一次性刷出; 2. **长连接超时**: 将代理读写空闲超时 (`proxy_read_timeout` / `proxy_send_timeout`) 保持在至少 180 秒以上; 3. **分块传输**: 支持 `chunked` 传输编码,确保思考过程与文本内容实时到达前端。 --- ## 八、开源协议与贡献 本项目采用 [MIT License](LICENSE) 开源协议。欢迎提交 Issue 与 Pull Request 共同完善 TechProbe!