# AI 语音面试系统 - 项目进度总结 **更新日期**: 2026-01-21 **项目代号**: 011-ai-interview-2601 --- ## 一、已完成功能 ### 1. 基础架构 ✅ - [x] 前端项目初始化 (Vue 3 + TypeScript + Vite + Element Plus) - [x] 后端项目初始化 (FastAPI + Python) - [x] Coze API 集成 (PAT Token 认证) - [x] 文件服务器搭建 (Nginx + PHP 上传脚本) ### 2. 工作流 A - 面试初始化 ✅ - [x] 接收姓名和简历 PDF - [x] 上传简历到自建文件服务器 (`files.test.ai.ireborn.com.cn`) - [x] 调用 Coze 工作流解析简历 - [x] 生成 `session_id` 并写入 `ci_interview_assessments` 表 - [x] 返回 `session_id` 给前端 ### 3. 工作流 B - 面试对话 ⚠️ (部分完成) - [x] 调用 Coze `/v3/chat` API 进行对话 - [x] 支持文字面试模式 - [x] 支持语音面试模式 (RTC 房间创建) - [ ] **未完成**: 多轮对话状态维持 - [ ] **未完成**: 对话日志写入 `ci_interview_logs` 表 ### 4. 工作流 C1 - 数据查询 ✅ - [x] 支持查询 `ci_interview_assessments` 表 - [x] 支持查询 `ci_interview_logs` 表 - [x] 支持查询 `ci_business_config` 表 - [x] 通过 JSON 输入指定表名和 SQL ### 5. 后台管理页面 ✅ - [x] 登录页面 (`/admin/login`) - [x] 面试列表页面 (`/admin/interviews`) - [x] 面试详情页面 (`/admin/interviews/:id`) - [x] 基本信息展示 - [x] 维度评分展示 - [x] 评估报告展示 - [x] 对话记录展示 (数据依赖工作流 B) - [x] 配置管理页面 (`/admin/configs`) ### 6. 文件服务 ✅ - [x] 自建文件服务器 (`files.test.ai.ireborn.com.cn`) - [x] PHP 上传接口 (Token 认证) - [x] Nginx 静态文件服务 - [x] CORS 支持 --- ## 二、核心问题 ### 问题:工作流 B 多轮对话状态无法维持 **现象**: - 每次调用 `/v3/chat` API,Coze 返回新的 `conversation_id` - 即使传入上一次的 `conversation_id`,仍然返回新值 - 导致工作流 B 每次都从头执行,重复显示欢迎语 **影响**: 1. 面试无法正常进行多轮问答 2. 对话日志无法写入 `ci_interview_logs` 表 3. 后台管理页面无法显示对话记录 **已尝试的方案**: 1. ❌ 传入 `conversation_id` 参数 - Coze 仍返回新值 2. ❌ 使用 `/v1/workflows/chat` 接口 - 接口不存在或参数格式不对 3. ⏳ 通过 `session_id` 在工作流内部管理状态 - 需要修改工作流 B --- ## 三、解决方案建议 ### 方案:工作流 B 内部状态管理 修改 Coze 工作流 B,不依赖 Coze 的 conversation 机制,改为: 1. **开始节点**: 接收 `session_id` 和用户消息 2. **查询状态**: 从 `ci_interview_logs` 表查询该 `session_id` 的历史对话数量 3. **条件分支**: - 如果历史为 0:显示欢迎语,更新状态 - 如果历史 > 0:直接进入下一轮提问 4. **写入日志**: 每次对话后,将 AI 问题和用户回答写入 `ci_interview_logs` 5. **结束判断**: 当对话轮次达到设定值时,生成评估报告 --- ## 四、技术栈 | 模块 | 技术 | |------|------| | 前端 | Vue 3 + TypeScript + Vite + Element Plus + Tailwind CSS | | 后端 | Python + FastAPI + Pydantic + httpx | | AI 平台 | Coze (扣子) | | 文件服务 | Nginx + PHP | | 数据库 | Coze 内置数据库 | --- ## 五、API 端点 ### 后端 API | 端点 | 方法 | 说明 | |------|------|------| | `/api/init-interview` | POST | 初始化面试(上传简历、生成 session_id) | | `/api/chat` | POST | 文字面试对话 | | `/api/rooms` | POST | 创建语音面试房间 | | `/api/admin/login` | POST | 管理员登录 | | `/api/admin/interviews` | GET | 面试列表 | | `/api/admin/interviews/{id}` | GET | 面试详情 | | `/api/admin/interviews/{id}/logs` | GET | 对话记录 | ### Coze 工作流 | 工作流 | ID | 说明 | |--------|-----|------| | 工作流 A | 7597357422713798710 | 面试初始化(简历解析) | | 工作流 B | 7595077233002840079 | 面试对话(Chatflow) | | 工作流 C1 | 7597376294612107318 | 数据查询 | --- ## 六、数据库表 | 表名 | 说明 | |------|------| | ci_interview_assessments | 面试评估记录 | | ci_interview_logs | 面试对话日志 | | ci_business_config | 业务配置 | --- ## 七、下一步工作 1. **修改工作流 B** - 实现内部状态管理,不依赖 conversation_id 2. **测试多轮对话** - 验证对话日志正确写入数据库 3. **完善语音面试** - 测试 RTC 语音对话功能 4. **优化后台页面** - 改进布局和用户体验 --- ## 八、文件结构 ``` 011-ai-interview-2601/ ├── frontend/ # 前端项目 │ ├── src/ │ │ ├── api/ # API 请求 │ │ ├── pages/ │ │ │ ├── interview/ # 面试页面 │ │ │ └── admin/ # 后台管理 │ │ ├── composables/ # 组合式函数 (useRTC) │ │ └── router/ # 路由配置 │ └── package.json ├── backend/ # 后端项目 │ ├── app/ │ │ ├── routers/ # API 路由 │ │ ├── services/ # 服务层 (coze_service) │ │ └── schemas.py # 数据模型 │ ├── main.py │ └── requirements.txt ├── docs/ # 文档 │ ├── upload.php # PHP 上传脚本 │ ├── nginx-files-server.conf │ └── 项目进度总结-20260121.md └── coze-workflows/ # Coze 工作流配置 ``` --- ## 九、配置信息 ### 环境变量 (.env) ```env COZE_PAT_TOKEN=pat_xxx COZE_BOT_ID=7595113005181386792 FILE_SERVER_TOKEN=ai_interview_2026_secret TUNNEL_URL=http://files.test.ai.ireborn.com.cn ``` ### 文件服务器 - 域名: `files.test.ai.ireborn.com.cn` - 上传接口: `/upload.php` - 文件目录: `/resumes/` --- **总结**: 项目基础架构已完成,核心问题是工作流 B 的多轮对话状态维持。需要在 Coze 工作流 B 中实现基于 session_id 的状态管理,才能正确记录对话日志并在后台展示。