251 lines
8.0 KiB
Markdown
251 lines
8.0 KiB
Markdown
# Coze 工作流分析
|
||
|
||
> 分析 Consultant_interviewer 工作流与当前前后端架构的对应关系
|
||
|
||
---
|
||
|
||
## 一、工作流概览
|
||
|
||
| 属性 | 值 |
|
||
|------|-----|
|
||
| **工作流名称** | Consultant_interviewer |
|
||
| **工作流 ID** | 7595077233002840079 |
|
||
| **模式** | Chatflow(对话流) |
|
||
| **描述** | 轻医美咨询师初试智能面试官 |
|
||
|
||
---
|
||
|
||
## 二、工作流核心节点
|
||
|
||
### 2.1 节点类型统计
|
||
|
||
| 节点类型 | 数量 | 说明 |
|
||
|----------|------|------|
|
||
| `start` | 1 | 开始节点 |
|
||
| `end` | 1 | 结束节点 |
|
||
| `llm` | 18 | 大模型调用节点 |
|
||
| `question` | 11 | 问答交互节点 |
|
||
| `loop` | 5 | 循环节点 |
|
||
| `condition` | 6 | 条件分支节点 |
|
||
| `code` | 2 | 代码执行节点 |
|
||
| `output` | 4 | 输出节点 |
|
||
| `select_record` | 2 | 数据库查询节点 |
|
||
| `plugin` | 1 | 插件节点(读取简历) |
|
||
|
||
### 2.2 面试阶段流程
|
||
|
||
```
|
||
开始
|
||
│
|
||
├─ 查询数据(检查 session_id 是否存在)
|
||
│
|
||
├─ 生成会话ID(代码节点)
|
||
│
|
||
├─ 条件分支:根据 current_stage 决定进入哪个阶段
|
||
│ ├─ stage < 20 → 信息收集阶段
|
||
│ ├─ stage >= 20 → 销售技能循环
|
||
│ ├─ stage >= 30 → 销售观循环
|
||
│ ├─ stage >= 40 → 素质项循环
|
||
│ └─ stage >= 50 → 求职动机识别
|
||
│
|
||
├─ 【阶段0】姓名收集 → 上传简历 → 读取简历 → 新增数据
|
||
│
|
||
├─ 【阶段1】打招呼、介绍面试流程
|
||
│
|
||
├─ 【阶段2】销售技能提问循环(1轮)
|
||
│ ├─ 销售技巧提问(LLM)
|
||
│ ├─ 问答(用户回复)
|
||
│ ├─ 追问(LLM)
|
||
│ ├─ 问答(用户回复)
|
||
│ └─ 新增数据(保存面试记录)
|
||
│
|
||
├─ 【阶段3】销售观提问循环(1轮)
|
||
│ ├─ 销售观提问(LLM)
|
||
│ ├─ 问答 → 追问 → 问答
|
||
│ └─ 新增数据
|
||
│
|
||
├─ 【阶段4】素质项提问循环(1轮)
|
||
│ ├─ 读取素质项侧重(数据库)
|
||
│ ├─ 素质项提问(LLM)
|
||
│ ├─ 问答 → 追问 → 问答
|
||
│ └─ 新增数据
|
||
│
|
||
├─ 【阶段5】求职动机识别循环(1轮)
|
||
│ ├─ 求职动机提问(LLM)
|
||
│ ├─ 问答 → 追问 → 问答
|
||
│ └─ 新增数据
|
||
│
|
||
├─ 【评分阶段】
|
||
│ ├─ 销售技能评分(LLM)
|
||
│ ├─ 销售观、服务观评分(LLM)
|
||
│ ├─ 素质项评分(LLM)
|
||
│ └─ 更新数据(保存评分结果)
|
||
│
|
||
├─ 【报告阶段】
|
||
│ ├─ 求职动机总结(LLM)
|
||
│ ├─ 未来发展规划(LLM)
|
||
│ ├─ 背调问题清单(LLM)
|
||
│ ├─ 直觉验证(LLM)
|
||
│ └─ 任用风险提示(LLM)
|
||
│
|
||
└─ 【反问阶段】回答面试者问题循环
|
||
├─ 意图识别
|
||
├─ 回答面试者问题(LLM)
|
||
└─ 终止循环判断
|
||
```
|
||
|
||
---
|
||
|
||
## 三、与当前架构的对应关系
|
||
|
||
### 3.1 前端需负责的部分
|
||
|
||
| 前端功能 | 工作流对应 | 当前状态 |
|
||
|----------|-----------|----------|
|
||
| 欢迎页 | 无 | ✅ 已有页面骨架 |
|
||
| 姓名输入 | `question` 节点 "姓名" | ✅ 已有 info.vue |
|
||
| 简历上传 | `question` 节点 "上传简历" → `plugin` "读取简历" | ✅ 已有上传逻辑 |
|
||
| 模拟来电 | 无(纯前端效果) | ✅ 已有 call.vue |
|
||
| 语音通话 | **整个对话流由 Coze RTC 处理** | ⚠️ 需对接 RTC SDK |
|
||
| 面试结束 | `end` 节点 | ✅ 已有 complete.vue |
|
||
|
||
### 3.2 后端需负责的部分
|
||
|
||
| 后端功能 | 工作流对应 | 当前状态 |
|
||
|----------|-----------|----------|
|
||
| 简历上传到 Coze | `POST /v1/files/upload` | ✅ 已实现 coze_service |
|
||
| 创建语音房间 | `POST /v1/audio/rooms` | ✅ 已实现 coze_service |
|
||
| 候选人数据查询 | 数据库节点 `select_record` | ⚠️ Coze 无 REST API |
|
||
| 候选人数据新增 | 数据库节点 `insert_record` | ⚠️ 由工作流自动处理 |
|
||
|
||
### 3.3 完全由 Coze 工作流处理的部分
|
||
|
||
以下功能**完全在 Coze 工作流内部完成**,前后端无需实现:
|
||
|
||
| 功能 | 工作流节点 |
|
||
|------|-----------|
|
||
| 打招呼、介绍面试流程 | LLM "打招呼、介绍面试流程" |
|
||
| 销售技能提问 | Loop "销售技能提问循环" |
|
||
| 销售观提问 | Loop "销售观提问循环" |
|
||
| 素质项提问 | Loop "素质项提问循环" |
|
||
| 求职动机识别 | Loop "求职动机识别提问循环" |
|
||
| 追问逻辑 | 各循环内的 "追问" LLM 节点 |
|
||
| 销售技能评分 | LLM "销售技能评分" |
|
||
| 销售观评分 | LLM "销售观、服务观评分" |
|
||
| 素质项评分 | LLM "素质项评分" |
|
||
| 求职动机总结 | LLM "求职动机总结" |
|
||
| 未来发展规划 | LLM "未来发展规划" |
|
||
| 背调问题清单 | LLM "背调问题清单" |
|
||
| 直觉验证 | LLM "直觉验证" |
|
||
| 任用风险提示 | LLM "任用风险提示" |
|
||
| 回答面试者问题 | Loop "回答面试者问题循环" |
|
||
| 面试记录保存 | 各 "新增数据" 节点 |
|
||
| 评分结果保存 | "更新数据" 节点 |
|
||
|
||
---
|
||
|
||
## 四、关键发现
|
||
|
||
### 4.1 ✅ 匹配的设计
|
||
|
||
1. **面试维度一致**:工作流的 4 维度(销售技能、销售观、素质项、求职动机)与 PRD 一致
|
||
2. **简历上传流程一致**:前端上传 → 后端调用 Coze API → 工作流解析
|
||
3. **语音房间创建**:后端调用 `POST /v1/audio/rooms` 创建房间,前端使用 RTC SDK 加入
|
||
|
||
### 4.2 ⚠️ 需调整的设计
|
||
|
||
#### (1)数据库访问问题
|
||
|
||
**问题**:Coze 数据库不提供直接的 REST API 查询接口
|
||
|
||
**影响**:管理后台的"候选人列表"、"候选人详情"功能无法直接实现
|
||
|
||
**解决方案**:
|
||
| 方案 | 说明 | 推荐度 |
|
||
|------|------|--------|
|
||
| A | 工作流增加 Webhook 节点,面试结束后推送数据到后端 | ⭐⭐⭐ |
|
||
| B | 自建数据库(SQLite/MySQL),前端上传时同步写入 | ⭐⭐⭐ |
|
||
| C | 暂时搁置管理后台(当前选择) | ⭐⭐ |
|
||
|
||
#### (2)会话断点续传
|
||
|
||
**工作流逻辑**:
|
||
- 工作流通过 `current_stage` 字段记录面试进度(10/20/30/40/50...)
|
||
- 用户中途退出后,可通过 `session_id` 恢复进度
|
||
|
||
**前端需支持**:
|
||
- 保存 `session_id` 到 localStorage
|
||
- 重新进入时检查是否有未完成的面试
|
||
|
||
#### (3)环境变量补充
|
||
|
||
工作流中使用的数据库 ID 需要配置:
|
||
```bash
|
||
# 已有
|
||
COZE_BOT_ID=7595113005181386792
|
||
|
||
# 需补充(工作流中的数据库)
|
||
COZE_WORKFLOW_ID=7595077233002840079
|
||
COZE_DATABASE_ID=7595077053909712922
|
||
```
|
||
|
||
### 4.3 ❓ 待确认事项
|
||
|
||
| 问题 | 影响范围 | 建议 |
|
||
|------|---------|------|
|
||
| 工作流的 BOT_ID 与 WORKFLOW_ID 哪个用于创建房间? | 后端 API | 需测试确认 |
|
||
| 工作流是否支持传入 `session_id` 参数? | 断点续传 | 查看 start 节点 |
|
||
| `CONVERSATION_NAME` 参数的用途? | 会话隔离 | 可能是会话标识 |
|
||
|
||
---
|
||
|
||
## 五、开发优先级调整
|
||
|
||
基于工作流分析,建议调整开发重点:
|
||
|
||
### 5.1 优先完成(用户端)
|
||
|
||
1. ✅ 前端用户端 4 个页面
|
||
2. ✅ 后端 Coze API 封装(文件上传、房间创建)
|
||
3. ⚠️ 前端 RTC SDK 集成(核心功能)
|
||
4. ⚠️ 会话状态管理(session_id 本地存储)
|
||
|
||
### 5.2 暂时搁置(管理后台)
|
||
|
||
由于 Coze 数据库无 REST API,管理后台需等待以下方案之一落地:
|
||
- 工作流添加 Webhook 推送
|
||
- 自建数据库方案
|
||
|
||
---
|
||
|
||
## 六、RTC 对接要点
|
||
|
||
根据工作流,语音通话的核心逻辑如下:
|
||
|
||
```
|
||
1. 后端调用 POST /v1/audio/rooms 创建房间
|
||
请求体:{ bot_id, user_id, voice_id? }
|
||
返回:{ room_id, token, app_id, uid }
|
||
|
||
2. 前端使用 @volcengine/rtc SDK 加入房间
|
||
- 使用返回的 token 进行鉴权
|
||
- 使用返回的 app_id、room_id、uid 加入房间
|
||
|
||
3. 语音对话
|
||
- 前端采集麦克风音频
|
||
- SDK 自动推送到 Coze 工作流
|
||
- 工作流处理后返回 AI 语音
|
||
|
||
4. 面试结束
|
||
- 工作流达到 end 节点
|
||
- 可能通过事件通知前端
|
||
```
|
||
|
||
---
|
||
|
||
## 变更日志
|
||
|
||
| 日期 | 内容 | 操作人 |
|
||
|------|------|--------|
|
||
| 2026-01-20 | 初始化工作流分析文档 | AI |
|