# 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 |
