lh 3 тижнів тому
батько
коміт
31a9173e2b
1 змінених файлів з 36 додано та 1 видалено
  1. 36 1
      app/Services/DeepSeek/DeepSeekService.php

+ 36 - 1
app/Services/DeepSeek/DeepSeekService.php

@@ -12477,8 +12477,29 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
         $user_prompt .= $reference_content;
         // $user_prompt .= $roles_ref;
         // $user_prompt .= $scenes_ref;
+
+        // 输出格式铁律(用户消息侧再次强制,避免模型自由发挥)
+        $user_prompt .= "\n\n【输出格式铁律-必须严格遵守】\n";
+        if ($act_id > 0) {
+            $user_prompt .= "请直接以“##片段1”开头,紧跟“时长:X s”行,然后输出本片段的完整分镜内容(分镜序号、出场角色、场景、出场道具、画面、运镜、配音台词、背景音效),分镜从1开始连续编号。\n";
+        } else {
+            $user_prompt .= "请以“###分段剧本”开头,依次输出“片段数量:N”、“旁白音色:...”,然后按“##片段N”逐段输出,每段必须紧跟“时长:X s”行,再输出该片段的完整分镜内容(分镜序号、出场角色、场景、出场道具、画面、运镜、配音台词、背景音效),分镜从1开始连续编号。\n";
+        }
+        $user_prompt .= "缺少“##片段N”标题或“时长:”行即为格式错误;输出前必须检查格式,不得输出其他任何内容。\n";
+        $user_prompt .= "片段时长必须在4秒到15秒之间(4s≤时长≤15s),超过15秒必须拆分为多个片段,不得输出低于4秒或超过15秒的片段。\n";
         
-        $system_prompt = "\n\n【强制要求】\n";
+        $system_prompt = "\n\n【输出格式铁律-最高优先级】\n";
+        if ($act_id > 0) {
+            $system_prompt .= "- 直接以“##片段1”开头,紧跟“时长:X s”行,然后输出本片段分镜内容\n";
+        } else {
+            $system_prompt .= "- 以“###分段剧本”开头,输出“片段数量:N”、“旁白音色:...”\n";
+            $system_prompt .= "- 然后按“##片段N”逐段输出,每段紧跟“时长:X s”行\n";
+        }
+        $system_prompt .= "- 每个片段必须严格以“##片段N”开头(N从1开始连续),并且必须包含“时长:X s”行,缺少即为格式错误\n";
+        $system_prompt .= "- 片段时长必须在4~15秒之间(4s≤时长≤15s),超过15秒必须拆分为多个片段,禁止输出低于4秒或超过15秒的片段\n";
+        $system_prompt .= "- 输出前检查:若缺少##片段N标题或时长行,视为输出无效,必须修正后输出\n\n";
+
+        $system_prompt .= "【强制要求】\n";
         $system_prompt .= "- 请仅生成<分段剧本>部分,不要生成其他任何内容:";
         $system_prompt .= "- 第一优先级:片段时长上限(单个片段不超过15秒,超过必须切为新片段)";
         $system_prompt .= "- 每个分镜包含:分镜序号、出场角色、场景、出场道具、画面、运镜、配音台词、背景音效\n";
@@ -12620,6 +12641,13 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
                         $actDuration = (float)$numMatch[1];
                     }
                 }
+                // 时长范围约束:4~15秒,超限兜底修正(0=未知按最低4秒)
+                if ($actDuration > 15) {
+                    $actDuration = 15;
+                }
+                if ($actDuration < 4) {
+                    $actDuration = 4;
+                }
                 
                 // 清理act_content:去除时长、旁白音色等非分镜内容行,只保留分镜内容
                 $cleaned_content = $this->cleanSegmentContent($actContent);
@@ -12645,6 +12673,13 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
                     if ($fallbackDuration <= 0 && $act_id > 0 && !empty($segment->act_duration)) {
                         $fallbackDuration = (float)$segment->act_duration;
                     }
+                    // 时长范围约束:4~15秒,超限兜底修正(0=未知按最低4秒)
+                    if ($fallbackDuration > 15) {
+                        $fallbackDuration = 15;
+                    }
+                    if ($fallbackDuration < 4) {
+                        $fallbackDuration = 4;
+                    }
                     $parsed_segments[] = [
                         'act_number' => 1,
                         'act_title' => '片段1',