package ai import ( "errors" "fonchain-fiee/pkg/common/qwen" "fonchain-fiee/pkg/service" "fonchain-fiee/pkg/utils" "github.com/gin-gonic/gin" ) // VideoVLRequest 视频/图片理解请求参数 type VideoVLRequest struct { Videos []string `json:"videos"` // 视频URL列表 Images []string `json:"images"` // 图片URL列表 Text string `json:"text"` // 可选的文本提示 Model string `json:"model"` // 可选的模型名称,默认使用 qwen3-vl-plus } // AIVideoVL AI理解视频/图片接口 func AIVideoVL(ctx *gin.Context) { var req VideoVLRequest if err := ctx.ShouldBindJSON(&req); err != nil { service.Error(ctx, errors.New("参数错误")) return } // 检查是否至少提供了视频或图片 if len(req.Videos) == 0 && len(req.Images) == 0 { service.Error(ctx, errors.New("至少需要提供一个视频或图片")) return } // 检查视频大小,每个视频不能超过55MB const maxVideoSizeMB = 55 for _, videoURL := range req.Videos { if videoURL == "" { continue } // 获取视频文件大小(单位:MB) sizeMB, err := utils.GetRemoteFileSize(videoURL) if err != nil { service.Error(ctx, errors.New("获取视频大小失败: "+err.Error())) return } // 检查是否超过55MB if sizeMB > maxVideoSizeMB { service.Error(ctx, errors.New("作品视频数不能超过55MB")) return } } // 调用VL函数进行AI理解 result, err := qwen.VL(req.Videos, req.Images, req.Text, req.Model) if err != nil { service.Error(ctx, err) return } // 返回AI返回的数据 service.Success(ctx, result) }