Files
012-kaopeilian/docs/规划/全链路联调/Ai工作流/coze/基础信息.md
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
2026-01-24 19:33:28 +08:00

8.9 KiB
Raw Blame History

陪练功能基础信息

一、功能概述

业务场景

考培练系统为轻医美连锁品牌提供AI陪练功能通过模拟真实客户场景让学员进行实战对话练习。

两种陪练入口

1. 陪练中心(直接模式)

2. 课程中心(课程模式)

二、Coze配置信息

认证方式(更新于 2025-11-16

系统使用 OAuth认证JWT + 私钥签名)不再使用Personal Access Token (PAT)。

OAuth配置后端环境变量

# OAuth认证配置
COZE_OAUTH_CLIENT_ID=1114009328887
COZE_OAUTH_PUBLIC_KEY_ID=GGs9pw0BDHx2k9vGGehUyRgKV-PyUWLBncDs-YNNN_I
COZE_OAUTH_PRIVATE_KEY_PATH=/app/secrets/coze_private_key.pem
COZE_PRACTICE_BOT_ID=7560643598174683145

# API配置关键必须使用中国区
COZE_API_BASE=https://api.coze.cn

私钥文件位置

  • 宿主机: /root/aiedu/kaopeilian-backend/secrets/coze_private_key.pem
  • 容器内: /app/secrets/coze_private_key.pem
  • 权限: 600仅所有者可读写
  • Docker挂载: ./kaopeilian-backend/secrets:/app/secrets:ro(只读)

重要提示

⚠️ JWTAuth必须指定 base_url='https://api.coze.cn',否则会使用国际版导致认证失败

官方资源

Bot信息

  • Bot ID: 7560643598174683145
  • 应用ID: 1114009328887
  • 功能: AI模拟客户陪练支持多轮对话
  • 特性: 实时流式响应,可自定义场景角色

三、Dify配置信息

API配置

DIFY_API_BASE = "http://dify.ireborn.com.cn/v1"
DIFY_PRACTICE_API_KEY = "app-rYP6LNM4iPmNjIHns12zFeJp"
DIFY_PRACTICE_WORKFLOW_ID = "待确认"  # 需要从Dify创建工作流后获取

调用示例

curl -X POST 'http://dify.ireborn.com.cn/v1/workflows/run' \
--header 'Authorization: Bearer app-rYP6LNM4iPmNjIHns12zFeJp' \
--header 'Content-Type: application/json' \
--data-raw '{
  "inputs": {
    "course_id": "5"
  },
  "response_mode": "streaming",
  "user": "kaopeilian"
}'

工作流说明

  • 输入参数: course_id课程ID
  • 响应模式: streaming流式返回
  • 输出格式: JSON场景数据包含name、description、background、ai_role、objectives等

四、技术架构

核心技术栈

  • 前端: Vue3 + Element Plus
  • 后端: Python + FastAPI
  • 数据库: MySQL 8.0(存储场景数据)
  • AI对话: Coze Bot字节跳动
  • 场景提取: Dify工作流
  • 通信协议: SSE (Server-Sent Events)

数据存储策略

  • 场景数据: 存储在MySQL的practice_scenes表
  • 对话历史: 由Coze平台管理不存储在本地数据库

五、规划文档

已完成文档

  1. Coze-API文档.md - Coze API核心使用方法
  2. 陪练功能技术方案.md - 完整技术架构和实现方案
  3. 陪练功能API接口规范.md - 前后端API接口详细规范
  4. 陪练功能数据流程图.md - 数据流程和时序图
  5. 规范与约定-团队基线.md - 更新了陪练功能相关规范

文档位置

所有规划文档位于:考培练系统规划/全链路联调/Ai工作流/coze/

六、参考代码

可用参考代码位置

  • Coze Python SDK: 参考代码/coze-py-main/

    • 示例代码:examples/chat_stream.py(流式对话)
    • 示例代码:examples/chat_simple_audio.py(音频对话)
  • Coze后端参考: 参考代码/coze-chat-backend/

    • main.py - FastAPI集成示例
    • auth.py - Coze认证方式
    • config.py - 配置管理
  • Coze前端参考: 参考代码/coze-chat-frontend/

    • React + TypeScript实现
    • SSE流式对话处理示例

已有页面

  • 陪练中心页面: kaopeilian-frontend/src/views/trainee/ai-practice-center.vue(前端已实现)
  • 场景管理页面: kaopeilian-frontend/src/views/manager/practice-scene-management.vue(前端已实现)
  • 对话页面: 待开发可参考Training模块

核心参考代码(新发现)

  • Training模块: 参考代码/coze-chat-frontend/src/pages/Training/
    • index.tsx - 主入口20行
    • TextChat.tsx - 文本对话实现68行
    • VoiceChat.tsx - 语音对话实现225行
    • TrainingStore.ts - 核心状态管理525行 重点参考

TrainingStore.ts核心功能

  • SSE流式对话处理使用@ant-design/x的XStream
  • WebSocket语音对话使用@coze/api/ws-tools
  • 消息列表管理(增量更新、删除、重新生成)
  • 对话状态管理6种状态未连接、连接中、已连接、聆听、回复中、错误
  • 文件上传支持
  • 错误处理和重试
  • AbortController中断控制

七、开发路线图

第一阶段数据库与基础API2天

  • 创建practice_scenes表
  • 插入初始场景数据
  • 实现场景管理APICRUD

第二阶段前端管理页面2天

  • 场景管理页面开发
  • 表单验证与提交
  • 列表筛选与分页

第三阶段Coze集成3天

  • Coze SDK集成
  • 流式对话API实现
  • 陪练对话页面开发

第四阶段Dify集成2天

  • Dify场景提取API
  • 课程中心集成

第五阶段联调与优化2天

  • 端到端测试
  • 错误处理完善
  • 性能优化

预计总工期: 11个工作日

八、关键技术点

⚠️ 场景提示词构建(核心差异)

与参考代码的关键不同

  • 参考代码用户直接与Bot对话无场景概念
  • 考培练系统:首次消息必须包含完整场景设定

实现方式

# 后端:首次消息时构建场景提示词
if is_first:
    scene_prompt = f"""
# 陪练场景设定

## 场景名称
{scene_name}

## 场景背景
{scene_background}

## AI角色要求
{scene_ai_role}

## 练习目标
{chr(10).join(f"{i+1}. {obj}" for i, obj in enumerate(scene_objectives))}

---

现在开始陪练对话。请严格按照上述设定扮演角色。

学员的第一句话:{user_message}
"""
    # 发送完整提示词给Coze
    Message.build_user_question_text(scene_prompt)
else:
    # 后续消息仅发送用户输入
    Message.build_user_question_text(user_message)

为什么这样设计

  1. 让AI明确理解要扮演的角色
  2. 保持对话上下文使用conversation_id
  3. 后续消息无需重复场景信息
  4. 用户界面不显示场景设定文本

SSE流式通信

// 前端处理SSE事件
const response = await fetch('/api/v1/practice/start', {
  method: 'POST',
  body: JSON.stringify({
    scene_name: scene.name,
    scene_background: scene.background,
    scene_ai_role: scene.ai_role,
    scene_objectives: scene.objectives,
    user_message: userInput,
    is_first: true  // 标记首次消息
  })
})

const reader = response.body.getReader()
const decoder = new TextDecoder()

while (true) {
  const { value, done } = await reader.read()
  if (done) break
  
  const chunk = decoder.decode(value)
  // 解析 event: xxx\ndata: {...}\n\n 格式
}

Coze流式对话

# 后端调用Coze
from cozepy import Coze, TokenAuth, Message, ChatEventType

stream = coze.chat.stream(
    bot_id=COZE_PRACTICE_BOT_ID,
    user_id=user_id,
    additional_messages=[Message.build_user_question_text(message)],
    conversation_id=conversation_id  # 保持对话上下文
)

for event in stream:
    if event.event == ChatEventType.CONVERSATION_MESSAGE_DELTA:
        # 发送SSE增量事件
        yield f"event: message.delta\ndata: {json.dumps({'content': event.message.content})}\n\n"

九、注意事项

安全性

  • Token不要提交到版本控制
  • 使用环境变量管理敏感配置
  • API调用添加速率限制

性能

  • SSE连接超时设置为180秒
  • 数据库查询使用索引
  • 前端消息列表使用虚拟滚动

用户体验

  • 实现打字效果message.delta

如有技术问题,请参考:

  1. Coze API文档Coze-API文档.md
  2. 技术方案文档:陪练功能技术方案.md
  3. API接口规范陪练功能API接口规范.md
  4. 数据流程图:陪练功能数据流程图.md
  5. OAuth认证规范../../规范与约定-团队基线.md
  6. 完整迁移报告:/root/aiedu/OAUTH_MIGRATION_SUCCESS.md

文档版本: v2.0
最后更新: 2025-11-16
维护人: 考培练系统开发团队
重大更新: OAuth认证迁移完成