lh hace 3 semanas
padre
commit
c17a7f130e
Se han modificado 1 ficheros con 15 adiciones y 4 borrados
  1. 15 4
      app/Services/DeepSeek/DeepSeekService.php

+ 15 - 4
app/Services/DeepSeek/DeepSeekService.php

@@ -12481,16 +12481,18 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
         // 输出格式铁律(用户消息侧再次强制,避免模型自由发挥)
         $user_prompt .= "\n\n【输出格式铁律-必须严格遵守】\n";
         if ($act_id > 0) {
-            $user_prompt .= "请直接以“##片段1”开头,紧跟“时长:X s”行,然后输出本片段的完整分镜内容(分镜序号、出场角色、场景、出场道具、画面、运镜、配音台词、背景音效),分镜从1开始连续编号。\n";
+            $user_prompt .= "- 请直接以“##片段1”开头,紧跟“时长:X s”行,然后输出本片段的完整分镜内容(分镜序号、出场角色、场景、出场道具、画面、运镜、配音台词、背景音效),分镜从1开始连续编号。\n";
+            $user_prompt .= "- 只允许根据【原分段剧本内容】生成一个片段(即“##片段1”),禁止生成多个片段。\n";
         } else {
-            $user_prompt .= "请以“###分段剧本”开头,依次输出“片段数量:N”、“旁白音色:...”,然后按“##片段N”逐段输出,每段必须紧跟“时长:X s”行,再输出该片段的完整分镜内容(分镜序号、出场角色、场景、出场道具、画面、运镜、配音台词、背景音效),分镜从1开始连续编号。\n";
+            $user_prompt .= "- 请以“###分段剧本”开头,依次输出“片段数量:N”、“旁白音色:...”,然后按“##片段N”逐段输出,每段必须紧跟“时长:X s”行,再输出该片段的完整分镜内容(分镜序号、出场角色、场景、出场道具、画面、运镜、配音台词、背景音效),分镜从1开始连续编号。\n";
         }
-        $user_prompt .= "缺少“##片段N”标题或“时长:”行即为格式错误;输出前必须检查格式,不得输出其他任何内容。\n";
-        $user_prompt .= "片段时长必须在4秒到15秒之间(4s≤时长≤15s),超过15秒必须拆分为多个片段,不得输出低于4秒或超过15秒的片段。\n";
+        $user_prompt .= "- 缺少“##片段N”标题或“时长:”行即为格式错误;输出前必须检查格式,不得输出其他任何内容。\n";
+        $user_prompt .= "- 片段时长必须在4秒到15秒之间(4s≤时长≤15s),超过15秒必须拆分为多个片段,不得输出低于4秒或超过15秒的片段。\n";
         
         $system_prompt = "\n\n【输出格式铁律-最高优先级】\n";
         if ($act_id > 0) {
             $system_prompt .= "- 直接以“##片段1”开头,紧跟“时长:X s”行,然后输出本片段分镜内容\n";
+            $system_prompt .= "- 只允许根据【原分段剧本内容】生成一个片段(即“##片段1”),禁止生成多个片段。\n";
         } else {
             $system_prompt .= "- 以“###分段剧本”开头,输出“片段数量:N”、“旁白音色:...”\n";
             $system_prompt .= "- 然后按“##片段N”逐段输出,每段紧跟“时长:X s”行\n";
@@ -12689,6 +12691,15 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
                 }
             }
 
+            // act_id 单片段模式:只允许一个片段,多余片段丢弃,仅保留第一个
+            if ($act_id > 0 && count($parsed_segments) > 1) {
+                dLog('deepseek')->info('regenerateSegmentScript act_id 模式仅保留第一个片段', [
+                    'act_id' => $act_id,
+                    'original_count' => count($parsed_segments),
+                ]);
+                $parsed_segments = array_slice($parsed_segments, 0, 1);
+            }
+
             dLog('deepseek')->info('regenerateSegmentScript 解析结果', [
                 'act_id' => $act_id,
                 'episode_id' => $episode_id,