# AI面试助手 **Repository Path**: RonnieKey_admin/gok ## Basic Information - **Project Name**: AI面试助手 - **Description**: AI面试助手 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-30 - **Last Updated**: 2026-07-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 线上面试 AI 助手(Interview AI Assistant) 基于 Electron + Vue 3 的桌面端线上面试辅助工具,实时监听面试官语音,经云端 ASR 转写后自动触发大模型(RAG)生成回答,以悬浮窗形式呈现在屏幕上,帮助求职者从容应对线上面试。 ## 功能特性 - **实时语音识别**:渲染层 Loopback 采集系统声音(面试官语音),经 Fun-ASR-Realtime WebSocket 云端实时转写为文本 - **即时 AI 回答**:识别到完整句子后立即向大模型提问(RAG 增强),流式输出回答,无需等待整轮结束 - **悬浮窗**:无边框透明置顶窗口(AlwaysOnTop),面试时覆盖在会议软件上方,展示面试官问题与 AI 回答 - **一键开始/暂停**:主窗口 + 悬浮窗双入口控制,停止时立即中止 AI 生成 - **RAG 知识库**:支持 PDF/Word/图片文档摄入,基于 LanceDB 向量检索增强回答质量 - **模型配置**:支持多种模型供应商(DashScope / OpenAI / Anthropic 等),模型按类型(对话 / 实时语音 / ASR)独立启停 - **面试回放**:历史会话列表,对话详情回看 - **日志管理**:按天分文件存储,支持在线筛选查看 - **数据安全**:API Key 加密存储,支持一键清除所有本地数据 ## 技术栈 | 层 | 技术 | |---|---| | 桌面框架 | Electron 32 + electron-vite | | 前端 | Vue 3(Composition API)+ TypeScript + Vite 5 | | 状态管理 | Pinia | | UI 组件 | Ant Design Vue + TDesign Vue Next Chat | | 数据库 | better-sqlite3 | | 向量库 | LanceDB(本地) | | 语音识别 | 云端 Fun-ASR-Realtime(WebSocket)| | LLM 调用 | LangChain / HTTP Stream | | 日志 | 自定义按天日志系统 | ## 项目结构 ``` interview-ai-assistant/ ├── electron/ # Electron 主进程 │ └── main/ │ ├── index.ts # 应用入口 + 生命周期 │ ├── windows.ts # 窗口管理(主窗口 / 悬浮窗) │ ├── pipeline.ts # 面试流程编排(ASR → RAG) │ ├── paths.ts # 数据/日志路径管理 │ ├── logger.ts # 日志系统 │ ├── audio/ # 音频模块 │ │ ├── asr.ts # 本地 Whisper ASR(备用) │ │ ├── capture.ts # 音频捕获 │ │ ├── cloudAsr.ts # 云端转写(HTTP) │ │ ├── realtimeAsr.ts # Fun-ASR-Realtime WebSocket │ │ └── realtimeManager.ts # 实时识别会话管理 │ ├── db/ # 数据库 │ │ ├── schema.ts # 表结构定义 │ │ ├── dao.ts # 数据访问层 │ │ ├── crypto.ts # API Key 加解密 │ │ └── index.ts # 数据库初始化 │ ├── ipc/ │ │ └── handlers.ts # IPC 通道注册与处理 │ ├── llm/ │ │ └── testModel.ts # 模型连通性测试 │ └── rag/ │ └── client.ts # RAG 服务 HTTP 客户端 ├── electron/preload/ │ └── index.ts # 预加载脚本(上下文桥) ├── shared/ # 主进程 / 渲染进程共享 │ ├── ipc.ts # IPC 通道常量定义 │ ├── types.ts # 共享类型定义 │ └── providers.ts # 模型供应商工具函数 ├── renderer/ # Vue 渲染进程 │ ├── index.html │ └── src/ │ ├── main.ts # Vue 入口 │ ├── App.vue │ ├── router/ # 路由配置 │ ├── store/ # Pinia Store │ │ └── interview.ts # 面试会话核心状态 │ ├── composables/ # 组合式函数 │ │ └── useTypewriter.ts # 打字机效果 │ ├── audio/ # 音频采集(渲染层) │ │ ├── loopbackCapture.ts # 系统声 Loopback 采集 │ │ └── micCapture.ts # 麦克风采集 │ └── views/ # 页面视图 │ ├── Layout.vue # 布局框架 │ ├── Interview.vue # 面试主页 │ ├── Overlay.vue # 悬浮窗 │ ├── Replay.vue # 面试回放 │ ├── Resumes.vue # 简历管理 │ ├── Jobs.vue # 岗位管理 │ ├── Models.vue # 模型配置 │ ├── Settings.vue # 设置中心 │ └── Logs.vue # 日志管理 ├── rag-server/ # RAG 服务(独立部署) │ ├── index.js # Express 服务入口 │ └── lib/ │ ├── chain.js # RAG 问答链 │ ├── embeddings.js # 向量嵌入 │ ├── loaders.js # 文档加载器 │ ├── logger.js # 服务日志 │ └── vectorstore.js # 向量存储 ├── resources/ │ ├── drivers/ # 音频驱动 │ └── whisper/ # 本地 Whisper 模型(可选) ├── electron.vite.config.ts # 构建配置 ├── tsconfig.json ├── tsconfig.node.json ├── tsconfig.web.json └── package.json ``` ## 环境要求 - **Node.js** >= 18 - **Windows 10/11**(Loopback 音频采集依赖 Windows API) - **RAG 服务**需要本地启动(`npm run rag`),或部署到远程服务器 ## 快速开始 ### 1. 安装依赖 ```bash cd interview-ai-assistant npm install ``` ### 2. 启动 RAG 服务(独立进程) ```bash npm run rag ``` > RAG 服务默认运行在 `http://127.0.0.1:8917`,可通过环境变量 `RAG_BASE_URL` 自定义。 ### 3. 启动开发环境 ```bash npm run dev ``` > 启动 Electron + Vite HMR 开发服务器,主进程和渲染进程均支持热更新。 ### 4. 使用流程 1. 在「模型配置」页添加对话模型和实时语音模型,启用后设置 API Key 2. (可选)上传简历 / 岗位到知识库,开启 RAG 增强 3. 在面试页选择简历和岗位,点击「开始面试」 4. 系统提示选择屏幕/窗口,选择正在进行的视频会议窗口 5. 点击「悬浮窗 开/关」打开置顶悬浮窗 6. 面试官说话 → 自动识别 → AI 流式回答呈现在悬浮窗中 ## 构建与打包 ```bash # 类型检查 npm run typecheck # 构建生产版本 npm run build # 打包 Windows 安装包(NSIS) npm run package ``` 输出目录:`release/` ## 配置 ### 环境变量 | 变量 | 说明 | 默认值 | |---|---|---| | `RAG_BASE_URL` | RAG 服务地址 | `http://127.0.0.1:8917` | ### 模型供应商 支持的模型供应商(`shared/providers.ts`): - **dashscope**:阿里云百炼(DashScope),对话 / ASR / TTS - **openai**:OpenAI 兼容接口 - **anthropic**:Anthropic Claude - **ollama**:本地 Ollama 部署 模型按类型分为三类,独立配置和启停: - **对话模型**(reasoning):AI 回答生成 - **实时语音模型**(realtime_asr):实时语音识别 - **ASR 模型**(asr):单段音频转写 ## 数据存储 所有用户数据存储在: ``` %APPDATA%/interview-ai-assistant/ ├── data/ │ ├── app.sqlite # SQLite 数据库 │ ├── lancedb/ # 向量库 │ └── recordings/ # 录音文件 ├── models/ # 本地模型缓存 └── logs/ # 日志(回退) ``` 日志优先写入项目根目录 `logs/`(按天分文件)。 ## 许可证 MIT