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