6.0 KiB
6.0 KiB
AI 语音面试系统 - 项目进度总结
更新日期: 2026-01-21
项目代号: 011-ai-interview-2601
一、已完成功能
1. 基础架构 ✅
- 前端项目初始化 (Vue 3 + TypeScript + Vite + Element Plus)
- 后端项目初始化 (FastAPI + Python)
- Coze API 集成 (PAT Token 认证)
- 文件服务器搭建 (Nginx + PHP 上传脚本)
2. 工作流 A - 面试初始化 ✅
- 接收姓名和简历 PDF
- 上传简历到自建文件服务器 (
files.test.ai.ireborn.com.cn) - 调用 Coze 工作流解析简历
- 生成
session_id并写入ci_interview_assessments表 - 返回
session_id给前端
3. 工作流 B - 面试对话 ⚠️ (部分完成)
- 调用 Coze
/v3/chatAPI 进行对话 - 支持文字面试模式
- 支持语音面试模式 (RTC 房间创建)
- 未完成: 多轮对话状态维持
- 未完成: 对话日志写入
ci_interview_logs表
4. 工作流 C1 - 数据查询 ✅
- 支持查询
ci_interview_assessments表 - 支持查询
ci_interview_logs表 - 支持查询
ci_business_config表 - 通过 JSON 输入指定表名和 SQL
5. 后台管理页面 ✅
- 登录页面 (
/admin/login) - 面试列表页面 (
/admin/interviews) - 面试详情页面 (
/admin/interviews/:id)- 基本信息展示
- 维度评分展示
- 评估报告展示
- 对话记录展示 (数据依赖工作流 B)
- 配置管理页面 (
/admin/configs)
6. 文件服务 ✅
- 自建文件服务器 (
files.test.ai.ireborn.com.cn) - PHP 上传接口 (Token 认证)
- Nginx 静态文件服务
- CORS 支持
二、核心问题
问题:工作流 B 多轮对话状态无法维持
现象:
- 每次调用
/v3/chatAPI,Coze 返回新的conversation_id - 即使传入上一次的
conversation_id,仍然返回新值 - 导致工作流 B 每次都从头执行,重复显示欢迎语
影响:
- 面试无法正常进行多轮问答
- 对话日志无法写入
ci_interview_logs表 - 后台管理页面无法显示对话记录
已尝试的方案:
- ❌ 传入
conversation_id参数 - Coze 仍返回新值 - ❌ 使用
/v1/workflows/chat接口 - 接口不存在或参数格式不对 - ⏳ 通过
session_id在工作流内部管理状态 - 需要修改工作流 B
三、解决方案建议
方案:工作流 B 内部状态管理
修改 Coze 工作流 B,不依赖 Coze 的 conversation 机制,改为:
- 开始节点: 接收
session_id和用户消息 - 查询状态: 从
ci_interview_logs表查询该session_id的历史对话数量 - 条件分支:
- 如果历史为 0:显示欢迎语,更新状态
- 如果历史 > 0:直接进入下一轮提问
- 写入日志: 每次对话后,将 AI 问题和用户回答写入
ci_interview_logs - 结束判断: 当对话轮次达到设定值时,生成评估报告
四、技术栈
| 模块 | 技术 |
|---|---|
| 前端 | 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 | 业务配置 |
七、下一步工作
- 修改工作流 B - 实现内部状态管理,不依赖 conversation_id
- 测试多轮对话 - 验证对话日志正确写入数据库
- 完善语音面试 - 测试 RTC 语音对话功能
- 优化后台页面 - 改进布局和用户体验
八、文件结构
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)
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 的状态管理,才能正确记录对话日志并在后台展示。