# AI 语音面试系统 - 项目进度总结

> 更新日期: 2026-01-21

## 一、项目概述

**项目名称**: AI 语音面试系统 (轻医美行业)  
**项目周期**: 2026-01 至今  
**当前状态**: 🟡 开发中 (核心功能已完成，语音模式待优化)

## 二、已完成功能

### 2.1 用户端 (前端)

| 功能 | 状态 | 说明 |
|------|------|------|
| 欢迎页面 | ✅ | 品牌展示、开始面试入口 |
| 信息采集 | ✅ | 姓名输入、简历 PDF 上传 |
| 面试初始化 | ✅ | 调用 Workflow A 生成 session_id |
| 文字面试模式 | ✅ | 基于 /v3/chat API 的文字对话 |
| 语音面试模式 | 🟡 | RTC 连接正常，session_id 传递待优化 |
| 调试面板 | ✅ | 显示 session_id、API 响应、错误信息 |

### 2.2 管理后台

| 功能 | 状态 | 说明 |
|------|------|------|
| 登录页面 | ✅ | 账号密码认证 |
| 数据概览 | ✅ | 统计卡片、匹配度分布、状态饼图、排行榜 |
| 面试列表 | ✅ | 搜索、筛选、分页、阶段标签 |
| 面试详情 | ✅ | 匹配度圆环、维度评分、风险分析、对话记录 |
| 骨架屏加载 | ✅ | 优化加载体验，替代 v-loading 遮罩 |

### 2.3 后端服务

| 功能 | 状态 | 说明 |
|------|------|------|
| 文件上传 | ✅ | 支持 PDF，上传到自建文件服务器 |
| 面试初始化 API | ✅ | 调用 Workflow A，返回 session_id |
| 文字聊天 API | ✅ | 调用 /v3/chat，支持多轮对话 |
| 语音房间 API | ✅ | 调用 /v1/audio/rooms 创建 RTC 房间 |
| 管理后台 API | ✅ | 通过 Workflow C 查询 Coze 数据库 |

### 2.4 Coze 工作流

| 工作流 | ID | 功能 |
|--------|-----|------|
| Workflow A | 7597357422713798710 | 面试初始化：接收 name + file_url，解析简历，生成 session_id |
| Workflow B | 7595077233002840079 | 面试主流程：4 维度提问、评分、生成报告 |
| Workflow C | 7597376294612107318 | 数据查询：接收 table + sql，执行增删改查 |

### 2.5 基础设施

| 组件 | 状态 | 说明 |
|------|------|------|
| 自建文件服务器 | ✅ | Nginx + PHP，域名 files.test.ai.ireborn.com.cn |
| Coze 数据库 | ✅ | ci_interview_assessments, ci_interview_logs, ci_business_config |

## 三、技术架构

```
┌─────────────────────────────────────────────────────────────┐
│                        用户端                                │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  欢迎页面   │→│  信息采集   │→│  面试页面   │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
│                          ↓                ↓                 │
│                    文件上传          语音/文字模式           │
└─────────────────────────────────────────────────────────────┘
                           ↓                ↓
┌─────────────────────────────────────────────────────────────┐
│                      FastAPI 后端                            │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │ /init-interview │ /api/chat  │ /api/room    │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
└─────────────────────────────────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────┐
│                       Coze 平台                              │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │ Workflow A  │  │ Workflow B  │  │ Workflow C  │         │
│  │ (初始化)    │  │ (面试主流程) │  │ (数据查询)  │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
│                          ↓                                  │
│                    Coze Database                            │
└─────────────────────────────────────────────────────────────┘
```

## 四、待解决问题

### 4.1 语音模式 session_id 传递

**问题**: 语音模式下，session_id 无法通过 /v1/audio/rooms API 传递到 Workflow B

**已尝试方案**:
1. ❌ `config.session_id` - 不支持
2. ❌ `parameters` 字段 - 不支持
3. ❌ `user_id` 字段 - 可设置但 Workflow 无法读取
4. ❌ Volcengine RTC SDK `sendRoomMessage` - 不是 Coze 信令通道
5. 🟡 `@coze/realtime-api` SDK `session.update` 事件 - 待验证

**建议方案**:
- 在 Workflow B 开始时通过数据库查询最近的 session_id
- 或使用 `@coze/realtime-api` 的 `session.update` 事件

### 4.2 面试阶段字段

**已实现**: current_stage 数值映射
- >= 50: 面试完成 (求职动机阶段)
- >= 40: 素质项评估
- >= 30: 销售观评估
- >= 20: 销售技能
- >= 10: 简历上传

## 五、数据库表结构

### ci_interview_assessments
| 字段 | 类型 | 说明 |
|------|------|------|
| id | String | 主键 (自动生成) |
| session_id | String | 会话 ID |
| candidate_name | String | 候选人姓名 |
| current_stage | String | 当前阶段 (10-50) |
| sales_skill_score | String | 销售技能分数 |
| sales_skill_report | String | 销售技能报告 |
| sales_concept_score | String | 销售观分数 |
| sales_concept_report | String | 销售观报告 |
| competency_score | String | 综合素质分数 |
| competency_report | String | 综合素质报告 |
| final_score_report | String | 最终评估报告 |
| resume_text | String | 简历文本 |
| risk_warning | String | 风险提示 |

### ci_interview_logs
| 字段 | 类型 | 说明 |
|------|------|------|
| log_id | String | 主键 (必填) |
| session_id | String | 会话 ID |
| stage | String | 面试阶段 |
| round | String | 轮次 |
| ai_question | String | AI 问题 |
| user_answer | String | 用户回答 |
| log_type | String | 日志类型 |

## 六、关键文件清单

### 前端
- `frontend/src/pages/interview/index.vue` - 欢迎页 + 信息采集
- `frontend/src/pages/interview/call.vue` - 面试页面 (语音/文字)
- `frontend/src/pages/admin/*.vue` - 管理后台页面
- `frontend/src/composables/useCozeRealtime.ts` - Coze Realtime SDK 封装
- `frontend/src/api/candidate.ts` - API 调用封装

### 后端
- `backend/main.py` - FastAPI 入口
- `backend/app/services/coze_service.py` - Coze API 服务
- `backend/app/routers/init.py` - 面试初始化 API
- `backend/app/routers/chat.py` - 文字聊天 API
- `backend/app/routers/room.py` - 语音房间 API
- `backend/app/routers/admin.py` - 管理后台 API

### 配置
- `backend/.env` - 环境变量 (PAT_TOKEN, BOT_ID, FILE_SERVER_TOKEN 等)
- `docs/upload.php` - 文件上传 PHP 脚本
- `docs/nginx-files-server.conf` - Nginx 配置

## 七、访问地址

| 服务 | 地址 |
|------|------|
| 用户端 | http://localhost:5173 |
| 管理后台 | http://localhost:5173/admin |
| 后端 API | http://localhost:8000 |
| 文件服务器 | https://files.test.ai.ireborn.com.cn |
