supeng il y a 4 jours
Parent
commit
80cb03caed

+ 34 - 0
content-understanding-core/src/main/java/com/tzld/piaoquan/content/understanding/model/param/QwenParam.java

@@ -0,0 +1,34 @@
+package com.tzld.piaoquan.content.understanding.model.param;
+
+import lombok.Data;
+
+@Data
+public class QwenParam {
+    /**
+     * 类型
+     * @see com.tzld.piaoquan.content.understanding.common.enums.ContentTypeEnum
+     */
+    private Integer type;
+    /**
+     * 媒体资源url
+     * 视频 or 图片
+     */
+    private String mediaUrl;
+    /**
+     * prompt
+     */
+    private String prompt;
+    /**
+     * api key
+     */
+    private String apiKey;
+    /**
+     * 模型
+     */
+    private String model;
+    /**
+     * 温度
+     */
+    private Double temperature = 1.0;
+
+}

+ 135 - 0
content-understanding-core/src/main/java/com/tzld/piaoquan/content/understanding/service/impl/QwenGenerateContentAction.java

@@ -0,0 +1,135 @@
+package com.tzld.piaoquan.content.understanding.service.impl;
+
+import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
+import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
+import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
+import com.alibaba.dashscope.common.MultiModalMessage;
+import com.alibaba.dashscope.common.Role;
+import com.alibaba.dashscope.exception.ApiException;
+import com.alibaba.dashscope.exception.NoApiKeyException;
+import com.alibaba.dashscope.exception.UploadFileException;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.tzld.piaoquan.content.understanding.common.base.CommonResponse;
+import com.tzld.piaoquan.content.understanding.common.enums.AigcServerExceptionEnum;
+import com.tzld.piaoquan.content.understanding.common.enums.ContentTypeEnum;
+import com.tzld.piaoquan.content.understanding.common.exception.StopRetryException;
+import com.tzld.piaoquan.content.understanding.model.param.ActionParam;
+import com.tzld.piaoquan.content.understanding.model.param.GeminiParam;
+import com.tzld.piaoquan.content.understanding.model.param.QwenParam;
+import com.tzld.piaoquan.content.understanding.service.Action;
+import com.tzld.piaoquan.content.understanding.util.HttpClientUtil;
+import com.tzld.piaoquan.content.understanding.util.HttpPoolClient;
+import com.tzld.piaoquan.content.understanding.util.RedisUtil;
+import com.tzld.piaoquan.content.understanding.util.RetryUtil;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author supeng
+ */
+@Slf4j
+@Service(value = "qwenGenerateContentAction")
+public class QwenGenerateContentAction implements Action {
+
+    @Value("${ai.qwenApi.url:https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions}")
+    private String qwenApiUrl;
+
+    @Value("#{'${qwen.apikey.list:[]}'.split(',')}")
+    private List<String> apiKeyList;
+
+    private final OkHttpClient client = new OkHttpClient().newBuilder().connectTimeout(15, TimeUnit.SECONDS).readTimeout(15, TimeUnit.MINUTES).writeTimeout(15, TimeUnit.MINUTES).build();
+
+
+    private static final String MODEL = "qwen3.5-plus";
+    private static final Double TEMPERATURE = 1.0;
+
+    private static final Integer RETRY_TIMES = 3;
+
+    @Override
+    public String execute(ActionParam param) {
+        Integer type = param.getType();
+        if (!Objects.equals(ContentTypeEnum.VIDEO.getValue(), type)) {
+            throw new RuntimeException("qwen only support video");
+        }
+        String apiKey = apiKeyList.get(0);
+        List<JSONObject> content = new ArrayList<>();
+
+        JSONObject videoUrlJson = new JSONObject();
+        videoUrlJson.put("url", param.getInput());
+
+        JSONObject videoContent = new JSONObject();
+        videoContent.put("type", "video_url");
+        videoContent.put("video_url", videoUrlJson);
+
+        content.add(videoContent);
+
+        JSONObject textContent = new JSONObject();
+        textContent.put("type", "text");
+        textContent.put("text", param.getPrompt());
+        content.add(textContent);
+
+        JSONObject message = new JSONObject();
+        message.put("role", "user");
+        message.put("content", content);
+
+        List<JSONObject> messages = new ArrayList<>();
+        messages.add(message);
+
+        Map<String, Object> responseFormat = new HashMap<>();
+        responseFormat.put("type", "json_object");
+
+        JSONObject paramJson = new JSONObject();
+        paramJson.put("model", MODEL);
+        paramJson.put("messages", messages);
+        paramJson.put("response_format", responseFormat);
+
+        MediaType mediaType = MediaType.parse("application/json");
+        RequestBody body = RequestBody.create(mediaType, paramJson.toJSONString());
+
+        Request request = new Request.Builder()
+                .url(qwenApiUrl)
+                .method("POST", body)
+                .addHeader("Content-Type", "application/json")
+                .addHeader("Authorization", "Bearer " + apiKey)
+                //跳过敏感
+                .addHeader("X-DashScope-DataInspection", "{\"input\":\"disable\",\"output\":\"disable\"}")
+                .build();
+        return RetryUtil.executeWithRetry(() -> {
+            try (Response response = client.newCall(request).execute()) {
+                if (Objects.isNull(response.body())) {
+                    throw new RuntimeException("qwenGenerateContentAction optionalS is null paramJson = " + JSON.toJSONString(paramJson));
+                }
+                String respBodyString = response.body().string();
+                JSONObject respJson = JSON.parseObject(respBodyString);
+                JSONArray choices = respJson.getJSONArray("choices");
+                if (Objects.nonNull(choices) && !choices.isEmpty()) {
+                    String result = choices.getJSONObject(0).getJSONObject("message").getString("content");
+                    //过滤一些特殊格式
+                    result = result.replace("```json", "").replace("```", "");
+                    return result;
+                } else {
+                    JSONObject errorJson = respJson.getJSONObject("error");
+                    String errorMsg = null;
+                    if (Objects.nonNull(errorJson) && !errorJson.isEmpty()) {
+                        errorMsg = errorJson.getString("message");
+                    }
+                    throw new RuntimeException("qwenGenerateContentAction error errorMsg = " + errorMsg);
+                }
+            } catch (Exception e) {
+                throw new RuntimeException("qwenGenerateContentAction request error", e);
+            }
+        }, RETRY_TIMES, "qwenGenerateContentAction", RetryUtil::retryInterval);
+
+    }
+
+}

+ 1 - 1
content-understanding-server/src/test/java/com/tzld/piaoquan/content/understanding/service/DeepSeekServiceTest.java

@@ -21,7 +21,7 @@ public class DeepSeekServiceTest extends BaseTest {
 
     @Test
     public void test(){
-        String apiKey = "sk-4d57c097379348fb86c73e9d063e23c7";
+        String apiKey = "";
         DeepSeekParam deepSeekParam = new DeepSeekParam();
         deepSeekParam.setApiKey(apiKey);
         deepSeekParam.setPrompt("帮我随机生成一些能够吸引中老年人的视频标题,结果以json格式返回");

+ 385 - 0
content-understanding-server/src/test/java/com/tzld/piaoquan/content/understanding/service/QwenActionTest.java

@@ -0,0 +1,385 @@
+package com.tzld.piaoquan.content.understanding.service;
+
+import com.alibaba.fastjson.JSON;
+import com.tzld.piaoquan.content.understanding.BaseTest;
+import com.tzld.piaoquan.content.understanding.common.base.CommonResponse;
+import com.tzld.piaoquan.content.understanding.model.param.ActionParam;
+import com.tzld.piaoquan.content.understanding.model.param.QwenParam;
+import com.tzld.piaoquan.content.understanding.util.HttpClientUtil;
+import com.tzld.piaoquan.content.understanding.util.HttpPoolClient;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+
+@Slf4j
+public class QwenActionTest extends BaseTest {
+
+    @Autowired
+    Action qwenGenerateContentAction;
+
+    @Test
+    public void test(){
+        ActionParam actionParam = new ActionParam();
+        actionParam.setType(2);
+        actionParam.setPrompt("你是一个专业的视频分析师,我将给你一个视频,请你对视频进行理解,回答下面的问题。\n" +
+                "\n" +
+                "一、基础信息:\n" +
+                "1关键维度:请从视频中的视觉、音乐、文字这三个维度信息做分析比较,哪个维度的信息是该视频中最重要的,可能成为该视频的要点驱动力?你只要回答视觉/音乐/文字三者其一即可。\n" +
+                "2内容选题:如果需要从视频中提取一个内容选题,你觉得应该是什么?请注意:选题应该体现视频的关键点,亮点,爆点,选题不能超过8个字。\n" +
+                "3视频主题:描述视频的整体主题。\n" +
+                "4视频关键词:使用3到5个关键词对视频进行概括\n" +
+                "\n" +
+                "二、主体和场景:\n" +
+                "1视频主体:视频中的核心人物或物体,有几个?分别是什么?\n" +
+                "2视频场景:视频属于什么场景?场景可以有多个,每个不超过6个字。\n" +
+                "\n" +
+                "三、情感与风格:\n" +
+                "1情感倾向:对视频传递的情感进行分类,分类标签为[\"积极\",\"消极\",\"中立\",\"不明显\"]\n" +
+                "2视频风格:判断视频是什么风格类型?给出风格描述词,例如:震惊、严肃、轻松等等\n" +
+                "\n" +
+                "四、视频传播性与画像:\n" +
+                "1片尾引导:\n" +
+                "有无:对视频是否有片尾引导进行分类,分类标签为[\"有\",\"无\"]\n" +
+                "引导时长:引导时长为多少秒\n" +
+                "引导强度:引导强度如何\n" +
+                "2对视频的传播性强度进行分类,分类标签为[\"极高\",\"高\",\"中\",\"低\",\"极低\",\"不明显\"]\n" +
+                "3视频用户画像:\n" +
+                "地域:输出视频中画面、音频、文字、字幕、口播明确提及的具体省份、直辖市,精确到明确的省份或直辖市(北京、山东等),如未提及则输出无地域;并描述推测的原因\n" +
+                "年龄段:根据视频中提及的年龄段或内容推理,判断观众年龄段,候选集合如下:小于40岁、40~50岁、50~60岁、60~70岁、70岁以上,结果只能从候选集中输出,并描述推测的原因\n" +
+                "性别:根据视频中提及的性别或内容推理,判断观众的性别,候选集合如下:男、女、通用,结果只能从候选集中输出,并描述推测的原因\n" +
+                "价值类型:对用户观看后产生的情绪价值进行分类,分类标签为[\"有趣\",\"有用\",\"惊奇\",\"同感\",\"无明显价值\"]\n" +
+                "用户价值点:判断视频对于用户的具体价值,例如祝福、传递知识、嘴替、回忆过去、无明显价值等等\n" +
+                "观众收入:对视频观众的收入偏好进行分类,分类标签为[\"低保收入\",\"低收入\",\"中等收入\",\"中高收入\",\"高收入\",\"无明显偏好\"]\n" +
+                "\n" +
+                "五、音画细节:\n" +
+                "1音频细节\n" +
+                "背景音类型:对视频的背景音分类,分类标签为[\"纯音乐\",\"歌曲\",\"无背景音乐\"]\n" +
+                "背景音风格:分析得到背景音的风格,例如激昂,舒缓等等\n" +
+                "语音类型:分析得到语音类型,例如童声、青年男性、青年女性、中年男性、中年女性、老年男性、老年女性、外国人等等\n" +
+                "歌曲名:歌曲名是什么?\n" +
+                "音色:音色是怎样的?\n" +
+                "2视频水印\n" +
+                "产品水印:是否有产品名的水印?\n" +
+                "产品名称:水印是否涉及产品名称是什么?\n" +
+                "3视频字幕\n" +
+                "字幕:是否有字幕?\n" +
+                "颜色:字幕的颜色?\n" +
+                "字号:字幕的字号?\n" +
+                "位置:字幕的位置如何?\n" +
+                "4视频口播:提供视频中出现的口播内容进行提炼,提炼为100字以内的总结。\n" +
+                "5AI生成可能性评分:输出一个0到10之间的整数作为最终的“评分”,0分代表“绝对真实拍摄”,10分代表“绝对为AI生成”;判断依据可以参考但不限于以下维度:\n" +
+                "物理定律:\n" +
+                "运动与重力: 物体的运动轨迹(如抛物线、碰撞反弹)、流体(水、烟雾)的流动、柔性物体(布料、树叶)的飘动,是否严格遵循现实世界的物理规律?是否存在不自然的漂浮、加速或停顿?\n" +
+                "光影逻辑: 视频中的阴影方向、长短、虚实是否与光源完全匹配?移动物体或镜头时,光影变化是否连贯、准确?\n" +
+                "反射与折射: 镜面、金属或水面中的反射内容是否真实、无畸变?光线穿过透明物体(如玻璃、水)时,折射效果是否正确?\n" +
+                "\n" +
+                "物体与纹理稳定性分析:\n" +
+                "形态恒定性: 视频中的物体(建筑、车辆、桌椅等)是否在整个过程中保持其固有的、稳定的形态?还是会出现不易察觉的“蠕动”、“变形”或“融化”现象?\n" +
+                "纹理真实性: 仔细观察物体的表面纹理(如木纹、砖墙、草地、皮肤)。纹理是否过于平滑、重复,或者在镜头拉近/拉远时出现不合逻辑的变化?\n" +
+                "\n" +
+                "时空连贯性分析:\n" +
+                "帧间稳定性: 慢速或逐帧播放时,背景或前景中的元素是否存在无故的闪烁、跳变,或者凭空出现/消失?\n" +
+                "镜头动态: 模拟摇臂、推拉、无人机等运镜时,其动态模糊、景深变化和画面流畅度是否与真实摄影设备一致?\n" +
+                "\n" +
+                "生物特征分析 (如果视频中包含人物或动物):\n" +
+                "形态与动作: 检查手部、面部五官的比例是否正常。行走、奔跑等动作的步态是否符合生物力学?\n" +
+                "表情与交互: 表情是否自然?与环境的交互(如手拿起物体)是否精确?\n" +
+                "\n" +
+                "六、封面信息\n" +
+                "1、封面主体:分析得到视频封面的主体元素是哪些,例如人物、物体、文字、数字或其他等等,不超过3个\n" +
+                "2、人物个数:如果封面主体包含人物,统计人物数量\n" +
+                "3、文字数量:如果封面主体包含文字,统计文字数量\n" +
+                "4、文字关键字:如果封面主体是文字,请提取1~2个关键词进行概括\n" +
+                "5、封面主题:描述封面的整体主题,一句话进行概括\n" +
+                "\n" +
+                "七、人物与场景:\n" +
+                "1知名人物\n" +
+                "是否出现:视频或音频中是否出现知名人物?\n" +
+                "人物名字:视频或音频中是否出现知名人物是谁?\n" +
+                "2人物年龄段:视频中人物的年龄段(如中青年男、中青年女等)。\n" +
+                "3场景描述:视频和声音中涉及的场景描述。\n" +
+                "\n" +
+                "八、时效性与分类:\n" +
+                "1时效性:\n" +
+                "有无时效:对视频是否具有时效性进行分类,分类标签为[\"有\",\"无\"]\n" +
+                "具体时间:适用具体的时效日期或使用时间,例如早上,晚上,下午,中午,春节,重阳节等等\n" +
+                "\n" +
+                "2节日时效性\n" +
+                "对视频内容进行节日属性识别及时效性分类,为内容分发策略提供依据。需严格按照以下维度输出结构化结果:\n" +
+                "基础分类:是否节日视频\n" +
+                "判断标准:\n" +
+                "识别范围:中国传统节日(如春节、元宵、清明、端午、中秋、重阳等)、国人关注的重大节日(如国庆、元旦、劳动节、建军节、七夕、情人节注:需结合国内主流关注度判断等)。\n" +
+                "排除范围:纯国外节日(如感恩节、万圣节等,除非内容聚焦国内庆祝场景)、普通事件 / 日常内容。\n" +
+                "输出格式:\n" +
+                "是否节日视频: [\"是\",\"否\"]\n" +
+                "示例:\n" +
+                "春节家庭团聚视频 → [\"是\"]\n" +
+                "科技产品发布会 → [\"否\"]\n" +
+                "节日名称提取\n" +
+                "规则:\n" +
+                "若为节日视频,输出具体节日名称(需精确到单一节日,如 “春节” 而非 “春节 / 元宵”);\n" +
+                "若非节日视频,固定输出:[\"非节日\"]。\n" +
+                "输出格式:\n" +
+                "节日名称:[\"具体节日名称\",\"非节日\"]\n" +
+                "示例:\n" +
+                "中秋月饼制作教程:[\"中秋\"]\n" +
+                "周末露营vlog:[\"非节日\"]\n" +
+                "时效性判断(仅针对节日视频)\n" +
+                "分类标准:\n" +
+                "短时效(仅限节日热点期分发):\n" +
+                "内容与节日即时性需求强相关,如祝福语、节日现场活动、实时庆祝画面等;\n" +
+                "有效周期:通常为节日前 3 天至节日当天。\n" +
+                "长时效(节日前后均可分发):\n" +
+                "内容为通用性知识/文化输出,如节日起源科普、历史故事、传统习俗解析等;\n" +
+                "有效周期:节日前 3天至节后半个月内,或无明确时间限制。\n" +
+                "若非节日视频,固定输出 [\"非节日\"]。\n" +
+                "输出格式:\n" +
+                "是否强时效:[\"短时效\",\"长时效\",\"非节日\"]\n" +
+                "示例:\n" +
+                "虎年春节拜年短视频:[\"短时效\"]\n" +
+                "端午节屈原文化纪录片:[\"长时效\"]\n" +
+                "非节日视频:[\"非节日\"]\n" +
+                "\n" +
+                "3视频一级分类:判断视频分别属于下面的哪种一级分类,并输出准确完整的一级品类_分类名称:\n" +
+                "1. 一级品类_音乐\n" +
+                "2. 一级品类_剧情 / 剧情演绎\n" +
+                "3. 一级品类_二次元\n" +
+                "4. 一级品类_游戏\n" +
+                "5. 一级品类_公益\n" +
+                "6. 一级品类_随拍 / 颜值\n" +
+                "7. 一级品类_舞蹈\n" +
+                "8. 一级品类_动物 / 萌宠\n" +
+                "9. 一级品类_三农\n" +
+                "10. 一级品类_科技 / 科技数码\n" +
+                "11. 一级品类_财经\n" +
+                "12. 一级品类_母婴 / 母婴亲子\n" +
+                "13. 一级品类_法律 / 人文社科\n" +
+                "14. 一级品类_科普 / 人文社科\n" +
+                "15. 一级品类_情感 / 情感心理\n" +
+                "16. 一级品类_职场 / 人文社科\n" +
+                "17. 一级品类_教育 / 教育培训\n" +
+                "18. 一级品类_摄影摄像\n" +
+                "19. 一级品类_艺术 / 才艺技能\n" +
+                "20. 一级品类_美食\n" +
+                "21. 一级品类_旅行 / 旅游\n" +
+                "22. 一级品类_地域本地\n" +
+                "23. 一级品类_时尚 / 时尚 / 美妆\n" +
+                "24. 一级品类_文化 / 人文社科\n" +
+                "25. 一级品类_搞笑 / 休闲娱乐\n" +
+                "26. 一级品类_明星 / 名人\n" +
+                "27. 一级品类_综艺\n" +
+                "28. 一级品类_影视综艺\n" +
+                "29. 一级品类_电影\n" +
+                "30. 一级品类_电视剧\n" +
+                "31. 一级品类_汽车\n" +
+                "32. 一级品类_体育 / 运动\n" +
+                "33. 一级品类_医疗健康 / 长寿 / 健身\n" +
+                "34. 一级品类_生活记录 / 生活\n" +
+                "35. 一级品类_生活家居 / 家居家装\n" +
+                "36. 一级品类_时政社会\n" +
+                "37. 一级品类_奇人异象\n" +
+                "38. 一级品类_历史\n" +
+                "39. 一级品类_军事\n" +
+                "40. 一级品类_宗教\n" +
+                "41. 一级品类_短剧\n" +
+                "42. 一级品类_收藏品\n" +
+                "\n" +
+                "4视频二级分类:判断视频分别属于下面的哪种二级分类(:后是品类的详细说明 不用输出),你可以给到你认为最匹配到1个到3个品类,根据你认为的匹配程度给出分数(1~10分,分数越高越匹配)并按照相关度从高到低排序,请输出准确完整的品类-分类名称(如 品类-祝福音乐):\n" +
+                "品类-祝福音乐:以祝福歌曲为主体,无强时效性日期、时间段的送祝福视频\n" +
+                "品类-中国战争史\n" +
+                "品类-中国历史影像:真实发生、拍摄的中国历史场景、画面、影像;\n" +
+                "品类-知识科普:非生活技巧、非科技自然 的 文化、历史、人文等社科知识类科普视频\n" +
+                "品类-正能量剧情:多人演绎反映家庭、社会关系,正能量的对话、演绎、剧情视频\n" +
+                "品类-杂技柔术\n" +
+                "品类-早中晚好:非特定节日、节气祝福,并且明确只在早晨、午间或晚间时间段送出祝福的视频\n" +
+                "品类-益智解密\n" +
+                "品类-饮食健康\n" +
+                "品类-戏曲戏剧\n" +
+                "品类-未来科幻\n" +
+                "品类-天气变化\n" +
+                "品类-他国政策:描述对象是中国以外的国家,内容是国家政策相关\n" +
+                "品类-贪污腐败\n" +
+                "品类-书法\n" +
+                "品类-食品安全\n" +
+                "品类-社会风气\n" +
+                "品类-生活小妙招:非科普类,与生活衣食住行相关的小技巧、妙招视频\n" +
+                "品类-生活技巧科普:与生活衣食住行相关的科普讲解视频\n" +
+                "品类-省份城市亮点:以完全不包含具体正能量人物内容的,反映省份、城市亮点、热点、强点的视频\n" +
+                "品类-人生忠告:以非音乐的人生忠告、感悟、感想口播为主体的视频\n" +
+                "品类-人财诈骗\n" +
+                "品类-亲子日常\n" +
+                "品类-亲情音乐:以非祝福类的反应家庭苦难、心酸、家庭关系的音乐为主体的视频\n" +
+                "品类-木工\n" +
+                "品类-魔术特效:画面、脚本明确是魔术、特技效果相关的视频\n" +
+                "品类-迷信祝福\n" +
+                "品类-民族异域音乐\n" +
+                "品类-民生政策\n" +
+                "品类-名画赏析\n" +
+                "品类-美食教程\n" +
+                "品类-麻将\n" +
+                "品类-旅行攻略\n" +
+                "品类-历史名人\n" +
+                "品类-老综艺影像:中国老综艺内容片段剪辑影像、视频;\n" +
+                "品类-老年相关法律科普:和老年强相关的法律、法规科普视频\n" +
+                "品类-老年时尚\n" +
+                "品类-老年审美美女\n" +
+                "品类-老年生活:非人生感悟的反映人老之后在家、在养老院的实际生活内容\n" +
+                "品类-老明星\n" +
+                "品类-惊奇事件\n" +
+                "品类-节日祝福:明确在特定节日、节气日期,送出祝福的视频。\n" +
+                "品类-健身操\n" +
+                "品类-健康知识:以非音乐,健康指标、健康知识讲解为主体的科普、教学类视频\n" +
+                "品类-惠民新闻\n" +
+                "品类-绘画\n" +
+                "品类-怀念时光\n" +
+                "品类-红歌老歌:以非祝福类的中国历史经典红色歌曲为主体的视频\n" +
+                "品类-罕见画面:罕见画面类视频捕捉并展示日常生活中不常见或难以观察的瞬间或事件。这类视频可能涉及自然界的罕见现象、独特的科学实验、历史性时刻等,目的是为观众提供稀有而引人入胜的视觉体验。\n" +
+                "示例:极光现象、罕见的动物行为、难得一见的天文现象等。\n" +
+                "品类-国际文化\n" +
+                "品类-国家统一\n" +
+                "品类-国家力量:以非具体正能量人物、非科学、技术为主要内容;反映中国人文、文化、基建、人民生活、国内外对比中强大的内容\n" +
+                "品类-国家科技力量:以非具体正能量人物为主要描述对象,反映中国科学、技术、实力力量水平强大的内容\n" +
+                "品类-搞笑段子:搞笑段子是一种旨在引发观众笑声的短小视频,内容通常包含幽默的情节、对话、表演或突发的搞笑场面。这类视频通过夸张、反差、意外的情节来制造笑点。\n" +
+                "示例:搞笑的对话场景、滑稽的角色表演、夸张的肢体语言等。\n" +
+                "品类-风景实拍:以大景观、风景为主体的实拍视频\n" +
+                "品类-对口型表演:1-2个真人在舞台或漫画人物、数字人等形式以幽默夸张方式演绎的对口型口播或演唱表演\n" +
+                "品类-动物萌宠:\n" +
+                "品类-动物表演:以宠物、动物惊奇、搞笑,演唱、舞蹈、演绎为主体的视频\n" +
+                "品类-大型集体艺术\n" +
+                "品类-当代正能量人物:以具体中国当代正能量人物为主要描述对象的内容\n" +
+                "品类-传统文化\n" +
+                "品类-吃播探店\n" +
+                "品类-长寿知识:以非音乐,非感悟,明确提及并以长寿、年龄、寿星为主体的内容\n" +
+                "品类-本地生活\n" +
+                "品类-K12教育\n" +
+                "品类-(老)电影切片:中国老电影、电视剧内容片段剪辑影像、视频;\n" +
+                "\n" +
+                "九、热点信息\n" +
+                "对视频内容进行理解,目标是识别出社会大众关系的热点信息,这种信息有以下核心特征:\n" +
+                "时效性:是近期发生的事件、传播的消息、公布的制度等\n" +
+                "广泛性:涉及民生、能够吸引大众普遍关注和讨论(特别是中老年人)\n" +
+                "情感共鸣:能够激发人们的情感反应,如愤怒、同情、喜悦、担忧等\n" +
+                "争议性:往往伴随着不同的观点和立场,容易引发争议和讨论\n" +
+                "扩散性:一个热点往往会带动相关话题或领域的关注,形成热点的扩散\n" +
+                "请你根据以上特征,对视频中是否存在热点、该热点的特征、热点内容概括、说明判断是热点的原因 进行输出\n" +
+                "1是否存在热点,结果为[\"是\",\"否\"]\n" +
+                "2该热点的特征,结果为[\"时效性\",\"广泛性\",\"情感共鸣\",\"争议性\",\"扩散性\"],如果没有你认为匹配的结果,请根据你的理解输出特征\n" +
+                "3热点内容概括\n" +
+                "4判断是热点的原因\n" +
+                "\n" +
+                "十、低俗信息\n" +
+                "对视频内容进行理解,目标是识别视频中是否包含低俗画面,低俗画面包括但不限于以下特征:\n" +
+                "出现女性着比基尼的形象、出现接触男性或者女性隐私部位、不限年龄段的男性女性隐私部位特写、主要展示女性胸部、出现性行为或性动作或性器官、引人不适的恶俗或低俗行为、或其他不适合在互联网公开的低俗画面\n" +
+                "根据你对视频内容的理解输出\n" +
+                "1是否低俗,结果为[\"是\",\"否\"]\n" +
+                "2判断低俗的原因,描述具体原因,包含暴露的部位、器官、低俗动作等,需要根据整个视频输出完整的原因\n" +
+                "3低俗画面出现的具体时间段,要求枚举出现的全部时段\n" +
+                "\n" +
+                "十一、AI画面\n" +
+                "对视频内容进行理解,目标是识别视频中是否AI生成的拟真人物形象,并输出以下信息:\n" +
+                "1是否有AI人物,结果为[\"是\",\"否\"]\n" +
+                "2画面是否标注人物由AI生成,结果为[\"是\",\"否\"]\n" +
+                "3AI人物具体时间段,要求枚举出现的全部时段\n" +
+                "\n" +
+                "十二、风险类型判断\n" +
+                "你是一个优秀的视频标注员,请理解上述视频内容,并根据下列判断标准,输出对应的标注结果标签,输出要求如下:先判断内容是否有风险,并输出,命中下述标签为“有风险”,未命中下述标签的标注为“无风险”;然后输出标注标签结果,每个内容最多输出5个标签,有风险输出为[\"标签1\",\"标签2\",\"标签3\",\"标签4\",\"标签5\"],无风险输出为[\"无\"]\n" +
+                "判断标准\n" +
+                "1视频画面中出现下列行为的,标注为“低俗”,未出现下列行为的,则不需要标注“低俗”;\n" +
+                "视频画面中出现女性着比基尼的形象;\n" +
+                "视频画面首帧或长篇幅聚焦女性胸部的;\n" +
+                "视频画面中出现男女在非特殊场合下亲密接触的,特殊场合包括影视剧、医疗场景等;\n" +
+                "视频画面中出现五个以上的年轻女性,并且着装较为暴露,存在集中展示胸部、腿部、臀部等诱惑性行为的;\n" +
+                "视频文案中,主要是在讲黄色笑话或者荤段子,以大尺度的话语暗指性行为、性器官等的,但如名字中带“鸡”之类疑似性器官的内容,可以忽略;\n" +
+                "2视频文案中下列行为的,标注为“两者问题”,非男女对立行为、贫富对立、父母与宠物对立的,则不需要标注为“两者问题”\n" +
+                "视频文案中出现渲染当今社会特权阶级与普通人的对立情节的,如果为历史上的阶级问题,则不需要标注;\n" +
+                "视频文案中出现对比男女不平等行为,旨在制造男女对立的,如为什么大街上很少看到男的在逛街?男人女人在一起,都是女人占便宜?等\n" +
+                "3视频开头前50个文字中精准命中以下案例词汇的,标注为“文案问题”,如有开头词汇语义与下列案例词汇相近的,需要忽略且不进行判定:\n" +
+                "案例词汇:紧急通知、紧急提醒、全网刷屏、刚刚传来、刚刚发生、事关所有人、千万不要、出大事了、大事发生、再忙也要看、关系你我、突然传出、重要通知、后果很严重、爆炸性消息、全网落泪、全民必看\n" +
+                "4视频标题或者文案中,如果出现重度血腥暴力场景的描述,如引人不适的杀人或刑罚细节描述,则标注为“暴恐血腥”,如出现成语,可以忽略;\n" +
+                "5视频文案中全部篇幅都在讲述下列话题的,均标注为“品类问题”,如只是相似品类,则不需要标注“品类问题”,需要忽略且不进行判定;\n" +
+                "话题:老人养老金,治疗疾病的方法,食补食疗的养生妙招,食物相克论、中国食品安全问题\n" +
+                "6如内容不包含上述标签,则标注为“正常内容”,标注为“正常内容”的话,不能再标注其他标签\n" +
+                "\n" +
+                "除了无法分析的情况,尽量保证每一项都有结果,且严格按照以下Schema输出一个有效的JSON对象,不要包含任何额外的解释、注释或非JSON文本:\n" +
+                "{\n" +
+                "    \"一、基础信息\": {\n" +
+                "        \"关键维度\": \"\",\n" +
+                "        \"内容选题\": \"\",\n" +
+                "        \"视频主题\": \"\",\n" +
+                "        \"视频关键词\":\"\"\n" +
+                "    },\n" +
+                "    \"二、主体和场景\": {\n" +
+                "        \"视频主体\": \"\",\n" +
+                "        \"视频场景\": []\n" +
+                "    },\n" +
+                "    \"三、情感与风格\": {\n" +
+                "        \"情感倾向\":\"\",\n" +
+                "        \"视频风格\":\"\"\n" +
+                "    },\n" +
+                "    \"四、视频传播性与画像\": {\n" +
+                "        \"片尾引导\": {},\n" +
+                "        \"传播性判断\": \"\",\n" +
+                "        \"视频用户画像\": {}\n" +
+                "    },\n" +
+                "    \"五、音画细节\": {\n" +
+                "        \"音频细节\": {},\n" +
+                "        \"视频水印\": {},\n" +
+                "        \"视频字幕\": {},\n" +
+                "        \"视频口播\": \"\",\n" +
+                "        \"AI生成可能性评分\":\"\"\n" +
+                "    },\n" +
+                "    \"六、封面信息\": {\n" +
+                "        \"封面主体\": \"\",\n" +
+                "        \"人物个数\": \"\",\n" +
+                "        \"文字数量\": \"\",\n" +
+                "        \"文字关键字\":[],\n" +
+                "        \"封面主题\":\"\"\n" +
+                "    },\n" +
+                "    \"七、人物与场景\": {\n" +
+                "        \"知名人物\":\"\",\n" +
+                "        \"人物年龄段\":\"\",\n" +
+                "        \"场景描述\": \"\"\n" +
+                "    },\n" +
+                "    \"八、时效性与分类\": {\n" +
+                "        \"时效性\":\"\",\n" +
+                "        \"节日时效性\": {\n" +
+                "            \"是否节日视频\": \"\",\n" +
+                "            \"节日名称\": \"\",\n" +
+                "            \"具体时效\": \"\"\n" +
+                "        },\n" +
+                "        \"视频一级分类\": \"\",\n" +
+                "        \"二级分类\": [\"品类- 、分数-\", \"品类- 、分数-\", \"品类- 、分数-\"]\n" +
+                "    },\n" +
+                "    \"九、热点信息\": {\n" +
+                "        \"是否存在热点\":\"\",\n" +
+                "        \"该热点的特征\":\"\",\n" +
+                "        \"热点内容概括\": \"\",\n" +
+                "        \"判断是热点的原因\": \"\"\n" +
+                "    },\n" +
+                "    \"十、低俗信息\": {\n" +
+                "        \"是否低俗\":\"\",\n" +
+                "        \"低俗原因\":\"\",\n" +
+                "        \"低俗画面时间\": \"\"\n" +
+                "    },\n" +
+                "    \"十一、AI画面\": {\n" +
+                "        \"是否有AI人物\":\"\",\n" +
+                "        \"是否标注由AI生成\":\"\",\n" +
+                "        \"AI人物时间\": \"\"\n" +
+                "    },\n" +
+                "    \"十二、风险判断\": {\n" +
+                "        \"是否有风险\":\"\",\n" +
+                "        \"标签\":[]\n" +
+                "    }\n" +
+                "}\n" +
+                "\n" +
+                "请确保输出是且仅是一个合法的JSON字符串。");
+        actionParam.setInput("http://temp.yishihui.com/longvideo/transcode/video/vpc/20260506/ca7a892a999bcf4145f63e13606917ce.mp4");
+        log.info("actionParam = {}", JSON.toJSONString(actionParam));
+        String result = qwenGenerateContentAction.execute(actionParam);
+        log.info("result = {}", result);
+    }
+}