Files
sionrui/openspec/proposals/points-service-integration.md
2026-02-22 20:07:26 +08:00

9.0 KiB
Raw Blame History

AI 服务积分扣减公共服务设计文档

版本: v1.2 日期: 2025-02-20 状态: 待确认 用途: 业务规范文档,供后续开发参考


模块一:公共积分扣减服务

1.1 服务定位

积分扣减公共服务 - 位于 tik 模块下,供所有 AI 服务复用的基础设施。

职责:

  • 积分配置查询
  • 积分预检与扣减
  • 预扣记录管理
  • 积分流水记录

1.2 核心能力

能力 说明 使用场景
获取积分配置 根据平台+类型获取消耗积分 所有业务调用前
预检积分 检查余额是否充足,不足抛异常 调用前验证
即时扣减 直接扣减并记录流水 同步调用成功后
创建预扣 创建待确认的扣减记录 流式/异步任务开始时
确认扣减 确认预扣,实际扣减积分 流式结束/任务成功时
取消预扣 删除预扣记录,不扣费 流式出错/任务失败时

1.3 数据模型

用户积分muye_member_user_profile

  • remaining_points - 剩余积分(扣减来源)
  • used_points - 已用积分

积分记录muye_point_record

  • point_amount - 变动数量(负数为扣减)
  • biz_type - 业务类型dify_chat/voice_tts 等)
  • biz_id - 业务关联ID
  • status - 状态:pending(预扣) / confirmed(已确认) / canceled(已取消)

积分配置muye_ai_model_config

  • platform - 平台dify / tikhub / voice / digital_human
  • model_type - 类型high/low / tts/clone / latentsync/kling
  • consume_points - 消耗积分
  • api_key - API 密钥Dify 工作流密钥等)★
  • api_url - API 地址(可选,覆盖默认配置)

1.4 业务规则

积分扣减规则

  • 原子性:使用 SQL 条件更新,确保不会超扣
  • 乐观锁WHERE remaining_points >= points
  • 幂等性:同一预扣记录只能确认/取消一次

预扣过期规则

  • 预扣记录超过 30 分钟自动清理
  • 定时任务每 5 分钟执行一次清理

异常处理

  • 积分不足:抛出 POINTS_INSUFFICIENT 异常
  • 配置不存在:抛出 POINTS_CONFIG_NOT_FOUND 异常
  • 扣减失败:抛出 POINTS_DEDUCT_FAILED 异常

1.5 依赖关系

业务服务Dify/TikHub/Voice/DigitalHuman
         ↓
    PointsService公共服务
         ↓
    ├── AiModelConfigService → 获取积分配置
    ├── MemberUserProfileMapper → 扣减积分
    └── PointRecordMapper → 记录流水

模块二Dify 工作流集成

2.1 业务概述

Dify 工作流 - AI 对话服务,支持智能体配置和流式响应。

设计原则:

  • 所有智能体共用一个"文案生成"工作流(同一个 api_key
  • 智能体之间只通过 systemPrompt 区分
  • 前端只需传 agentId

核心流程:

  1. 前端传入 agentId + content
  2. 后端通过 agentId 获取智能体的 systemPrompt
  3. 调用 Dify API固定工作流传入 sysPrompt 参数
  4. 流式返回内容
  5. 流结束或用户停止时扣费

2.2 扣费流程

┌─────────────────────────────────────────────────────────────┐
│                      Dify 流式扣费流程                        │
├─────────────────────────────────────────────────────────────┤
│  1. 获取智能体配置systemPrompt                            │
│  2. 获取积分配置platform=dify                             │
│  3. 预检积分 → 积分不足则拒绝                                  │
│  4. 创建预扣记录                                              │
│  5. 调用 Dify 流式 API传入 sysPrompt                      │
│     ├─ 流正常结束 → 确认扣费(全额)                           │
│     ├─ 用户取消 → 确认扣费(按实际消耗或最低消费)              │
│     └─ 出错 → 取消预扣(不扣费)                               │
│  6. 记录使用记录                                              │
└─────────────────────────────────────────────────────────────┘

2.3 接口定义

阻塞模式

  • URL: POST /api/tik/dify/chat
  • 入参: agentId, content, conversationId
  • 出参: content, conversationId, consumePoints

流式模式

  • URL: POST /api/tik/dify/chat/stream
  • 入参: agentId, content, conversationId
  • 出参: SSE 流event: message / done

说明:

  • agentId 用于获取智能体的 systemPrompt
  • 所有智能体共用同一个 Dify 工作流

2.4 配置方案

Dify 配置存储在 muye_ai_model_config 表:

字段 说明
model_name Dify 文案生成 配置名称
platform dify 平台标识
model_type writing 类型
consume_points 10 消耗积分
api_key app-xxx Dify 工作流密钥 ★
status 1 启用

配置文件只存公共配置:

yudao:
  dify:
    api-url: http://8.155.172.147:8088
    timeout: 60

2.5 智能体表(无需修改)

现有 muye_ai_agent 表已有字段:

字段 说明
agent_id 智能体ID
agent_name 智能体名称
system_prompt 系统提示词(传递给 Dify 的 sysPrompt 参数)
status 状态

调用流程:

  1. 通过 agentId 获取智能体的 systemPrompt
  2. muye_ai_model_config 获取 api_key + consume_pointsplatform=dify
  3. 调用 Dify API传入 sysPrompt 参数

模块三:各业务积分扣减集成

3.1 扣费模式总览

业务 扣费模式 扣费时机 失败处理
Dify 工作流 流式结束扣费 流结束/用户停止时 不扣费
TikHub 成功后扣费 API 调用成功后 不扣费
语音合成 成功后扣费 TTS 生成成功后 不扣费
数字人合成 任务完成扣费 任务成功完成时 不扣费

统一原则:失败不扣费

3.2 TikHub 集成

业务场景

  • 抖音/小红书数据抓取
  • 用户信息、视频、帖子等

扣费流程

1. 获取积分配置platform=tikhub, modelType=fetch
2. 预检积分
3. 调用 TikHub API
4. 成功 → 扣减积分
5. 失败 → 不扣费

积分配置

platform model_type consume_points
tikhub fetch 5

3.3 语音合成集成

业务场景

  • TTS 语音生成
  • 音色克隆

扣费流程

1. 获取积分配置platform=voice, modelType=tts/clone
2. 预检积分
3. 执行语音合成
4. 成功 → 扣减积分
5. 失败 → 不扣费

积分配置

platform model_type consume_points
voice tts 2
voice clone 10

3.4 数字人合成集成

业务场景

  • 口型同步视频生成
  • 支持 Latentsync / 可灵 两种供应商

扣费流程

1. 获取积分配置platform=digital_human, modelType=latentsync/kling
2. 预检积分
3. 创建预扣记录
4. 创建任务并异步处理
5. 任务成功 → 确认扣费
6. 任务失败/取消 → 取消预扣

积分配置

platform model_type consume_points
digital_human latentsync 15
digital_human kling 20

附录

A. 业务类型枚举

类型码 说明
dify_chat Dify对话
ai_chat AI聊天
image_gen 图像生成
tikhub_fetch TikHub数据抓取
voice_tts 语音合成
voice_clone 音色克隆
digital_human 数字人合成
kling_video 可灵视频

B. 异常码

错误码 说明
1001001 积分不足
1001002 积分配置不存在
1001003 积分扣减失败

C. 开发计划

步骤 内容
1 数据库muye_point_record 新增 status 字段
2 公共服务PointsService 接口 + 实现
3 Dify 集成:配置类 + 客户端 + 服务 + Controller
4 TikHub 集成:添加积分扣减逻辑
5 语音合成集成:添加积分扣减逻辑
6 数字人集成:添加积分扣减逻辑
7 测试验证

无需修改的表:

  • muye_ai_agent - 无需改动
  • muye_ai_model_config - 已有 api_key 字段,无需改动

D. 成熟度检查

检查项 说明
原子扣减 SQL 条件更新,防止超扣
乐观锁 WHERE remaining_points >= points
预扣机制 支持流式/异步场景
过期清理 30分钟自动清理预扣
事务隔离 核心操作加事务
异常处理 统一错误码
配置化 积分消耗可配置
业务解耦 公共服务复用