8.0 KiB
8.0 KiB
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 ✅ 匹配的设计
- 面试维度一致:工作流的 4 维度(销售技能、销售观、素质项、求职动机)与 PRD 一致
- 简历上传流程一致:前端上传 → 后端调用 Coze API → 工作流解析
- 语音房间创建:后端调用
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 需要配置:
# 已有
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 优先完成(用户端)
- ✅ 前端用户端 4 个页面
- ✅ 后端 Coze API 封装(文件上传、房间创建)
- ⚠️ 前端 RTC SDK 集成(核心功能)
- ⚠️ 会话状态管理(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 |