# 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 的状态管理，才能正确记录对话日志并在后台展示。
