Files
1818web-hoduan/RUNNINGHUB_INTEGRATION_COMPLETE.md
2025-11-14 17:41:15 +08:00

12 KiB
Raw Blame History

RunningHub集成完成报告

完成时间: 2025-10-20
版本号: v2.1.0


实现完成清单

1. 核心接口和DTO

文件 说明 状态
AIProvider.java 统一服务商接口 完成
ProviderTaskRequest.java 统一请求DTO 完成
ProviderTaskResponse.java 统一响应DTO 完成
ProviderTaskStatus.java 任务状态DTO 完成
ProviderTaskResult.java 任务结果DTO 完成

2. RunningHub专用DTO

文件 说明 状态
RunningHubSubmitRequest.java 提交请求 完成
RunningHubNodeInfo.java 节点信息 完成
RunningHubSubmitResponse.java 提交响应 完成
RunningHubStatusResponse.java 状态查询响应 完成
RunningHubOutputResponse.java 结果查询响应 完成

3. Provider实现

文件 说明 状态
OpenAIProviderImpl.java OpenAI适配器同步 完成
RunningHubProviderImpl.java RunningHub适配器异步 完成

4. 核心服务

文件 说明 状态
AIProviderService.java Provider路由服务 完成
RunningHubPollingScheduler.java 轮询调度器 完成
AiTaskServiceImpl.java 任务服务(已集成) 完成

5. 数据库和配置

文件 说明 状态
V5__add_provider_support.sql 数据库迁移脚本 完成
application.yml 多厂商配置 完成
AiTask.java 实体类更新 完成
PointsConfig.java 实体类更新 完成
AiTaskMapper.xml SQL映射更新 完成

🎯 系统架构

┌─────────────────────────────────────────────────────────────┐
│                      用户提交任务                              │
│                   (JWT or API Key认证)                        │
└────────────────────────┬────────────────────────────────────┘
                         ↓
┌─────────────────────────────────────────────────────────────┐
│                   AiTaskController                           │
└────────────────────────┬────────────────────────────────────┘
                         ↓
┌─────────────────────────────────────────────────────────────┐
│                  AiTaskServiceImpl                           │
│  1. 扣积分                                                    │
│  2. 创建任务                                                  │
│  3. 读取 points_config.provider_type                         │
│  4. 路由到不同流程                                             │
└────────┬──────────────────────────────┬─────────────────────┘
         │                              │
         ▼                              ▼
┌──────────────────┐          ┌──────────────────┐
│  OpenAI流程      │          │ RunningHub流程    │
│  (同步)          │          │  (异步)           │
└──────┬───────────┘          └─────────┬─────────┘
       │                                │
       ↓                                ↓
┌──────────────────┐          ┌──────────────────┐
│1. 加入队列        │          │1. 直接提交        │
│2. TaskScheduler  │          │2. 返回taskId      │
│   定时调度        │          │3. 更新DB          │
│3. AsyncExecutor  │          │                   │
│   同步执行        │          │                   │
│4. 立即返回结果    │          │                   │
└──────────────────┘          └─────────┬─────────┘
                                        │
                                        ↓
                              ┌──────────────────┐
                              │RunningHub        │
                              │PollingScheduler  │
                              │                  │
                              │每5秒轮询:        │
                              │1. 查询状态        │
                              │2. SUCCESS→获取   │
                              │3. FAILED→退款    │
                              │4. 更新DB+通知    │
                              └──────────────────┘

📋 工作流程对比

OpenAI流程同步

  1. 用户提交任务
  2. 系统扣除积分,创建任务
  3. 任务加入队列status='queued'
  4. TaskScheduler 调度任务
  5. AsyncTaskExecutor 调用OpenAI API
  6. 立即返回结果URL
  7. 更新status='completed'
  8. 发送WebSocket通知

耗时: ~10-30秒

RunningHub流程异步

  1. 用户提交任务
  2. 系统扣除积分,创建任务
  3. 直接调用RunningHub API
  4. 获得taskId更新status='processing'
  5. RunningHubPollingScheduler 每5秒轮询
  6. 检测到SUCCESS状态
  7. 调用outputs接口获取结果URL
  8. 更新status='completed'
  9. 发送WebSocket通知

耗时: ~2-5分钟


🔧 配置说明

application.yml

ai:
  providers:
    openai:
      enabled: true
      base-url: https://api.apiyi.com/v1/chat/completions
      api-key: "sk-xxx"
    runninghub:
      enabled: true
      base-url: https://www.runninghub.cn
      submit-url: /task/openapi/ai-app/run
      status-url: /task/openapi/status
      output-url: /task/openapi/outputs
      default-webapp-id: "1973555977595301890"
      api-key: "your_runninghub_api_key"
      polling-interval: 5000
      max-polling-times: 120

points_config表配置

-- RunningHub模型示例
INSERT INTO `points_config` VALUES
(8, 'rh_sora2_portrait', 160, 'RunningHub Sora2 竖屏视频10秒', 1, 'runninghub', 
 '{"webappId":"1973555977595301890","duration":10,"model":"portrait"}', NOW(), NOW());

providerConfig字段说明

  • webappId: RunningHub应用ID
  • duration: 视频时长(秒)
  • model: 模型类型portrait/landscape/portrait-hd/landscape-hd

🚀 部署步骤

1. 数据库迁移

mysql -u root -p 1818ai < V5__add_provider_support.sql

2. 更新配置

编辑 application.yml填入RunningHub API Key

ai:
  providers:
    runninghub:
      api-key: "YOUR_RUNNINGHUB_API_KEY"

3. 编译部署

# 编译
mvn clean package -DskipTests

# 停止服务
sudo systemctl stop spring_1818_user_server

# 备份旧版本
sudo cp /www/wwwroot/1818_user_server/1818_user_server-1.0-SNAPSHOT.jar \
         /www/wwwroot/1818_user_server/1818_user_server-1.0-SNAPSHOT.jar.bak

# 部署新版本
sudo cp target/1818_user_server-1.0-SNAPSHOT.jar \
         /www/wwwroot/1818_user_server/

# 启动服务
sudo systemctl start spring_1818_user_server

# 查看日志
sudo journalctl -u spring_1818_user_server -f

🧪 测试指南

1. 测试OpenAI模型验证兼容性

curl -X POST "http://localhost:8081/user/ai/tasks/submit" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "modelName": "sora_image",
    "prompt": "一只可爱的猫咪"
  }'

预期结果:

  • 任务立即执行
  • 30秒内返回completed状态
  • resultUrl包含图片地址

2. 测试RunningHub模型

curl -X POST "http://localhost:8081/user/ai/tasks/submit" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "modelName": "rh_sora2_portrait",
    "prompt": "一个人在海边奔跑,镜头从远到近"
  }'

预期结果:

  • 任务提交成功status='processing'
  • 返回taskNo和providerTaskId
  • 2-5分钟后status变为'completed'
  • resultUrl包含视频地址

3. 查看轮询日志

tail -f logs/application.log | grep "RunningHub"

正常日志示例:

2025-10-20 15:30:05 INFO  - 提交任务到RunningHub: TASK20251020153005ABC
2025-10-20 15:30:06 INFO  - RunningHub任务提交成功: TASK20251020153005ABC, providerTaskId: 1980149306768457730
2025-10-20 15:30:11 DEBUG - RunningHub轮询 - 发现1个待处理任务
2025-10-20 15:30:11 DEBUG - 轮询任务: TASK20251020153005ABC, providerTaskId: 1980149306768457730
2025-10-20 15:30:11 DEBUG - 任务 TASK20251020153005ABC 状态: RUNNING
...
2025-10-20 15:33:21 INFO  - 任务成功 - taskNo: TASK20251020153005ABC
2025-10-20 15:33:22 INFO  - 任务 TASK20251020153005ABC 处理完成结果URL: https://rh-images.xiaoyaoyou.com/...

📊 数据库变更

ai_task表新增字段

ALTER TABLE `ai_task`
ADD COLUMN `provider_type` VARCHAR(50) NULL,
ADD COLUMN `provider_task_id` VARCHAR(100) NULL,
ADD COLUMN `provider_response` TEXT NULL;

points_config表新增字段

ALTER TABLE `points_config`
ADD COLUMN `provider_type` VARCHAR(50) NOT NULL DEFAULT 'openai',
ADD COLUMN `provider_config` TEXT NULL;

⚠️ 注意事项

1. 兼容性

  • 现有OpenAI模型完全不受影响
  • 现有API接口保持不变
  • 现有数据可正常使用

2. 轮询性能

  • 每5秒轮询一次RunningHub任务
  • 最多同时处理100个任务
  • 建议生产环境增加Redis缓存减少数据库压力

3. 错误处理

  • RunningHub任务失败会自动退还积分
  • 超时任务会被标记为failed
  • 所有异常都有详细日志记录

4. 监控建议

# 查看RunningHub任务数量
SELECT COUNT(*) FROM ai_task 
WHERE provider_type='runninghub' AND status='processing';

# 查看平均处理时间
SELECT AVG(TIMESTAMPDIFF(SECOND, start_time, complete_time)) as avg_seconds
FROM ai_task
WHERE provider_type='runninghub' AND status='completed'
AND complete_time > DATE_SUB(NOW(), INTERVAL 1 DAY);

🎯 功能对比

特性 OpenAI格式 RunningHub
认证方式 Bearer Token API Key
调用方式 同步 异步
返回方式 立即返回 轮询查询
处理时间 10-30秒 2-5分钟
支持类型 图片、视频 视频
横竖屏 URL参数 model字段
队列管理 Redis队列 RunningHub内部
进度追踪 WebSocket WebSocket

🔮 未来扩展

  1. 更多服务商可以继续添加其他AI服务商Midjourney、Stable Diffusion等
  2. 智能路由:根据价格、速度、成功率自动选择最优服务商
  3. 负载均衡:同一个模型配置多个服务商,实现负载分担
  4. 降级策略:主服务商故障时自动切换到备用服务商
  5. 成本优化:根据用户等级选择不同价格的服务商

📞 技术支持

如遇问题,请检查:

  1. 数据库迁移是否成功

    DESC ai_task;  -- 检查是否有provider_type字段
    
  2. 配置是否正确

    grep "runninghub" src/main/resources/application.yml
    
  3. 服务是否启动

    ps aux | grep spring_1818_user_server
    
  4. 日志是否有报错

    tail -100 logs/application.log
    

集成完成! 🎉

系统现已支持OpenAI和RunningHub双服务商用户可以无感切换使用不同的AI生成服务