Ver Fonte

重新生成分镜剧本接口针对单片段也加上差异点逻辑

lh há 3 semanas atrás
pai
commit
7662360054
2 ficheiros alterados com 37 adições e 10 exclusões
  1. 2 2
      app/Consts/BaseConst.php
  2. 35 8
      app/Services/DeepSeek/DeepSeekService.php

+ 2 - 2
app/Consts/BaseConst.php

@@ -92,9 +92,9 @@ class BaseConst
      * 需要调整时直接改这里的模型名即可(放在最前面的优先被重试使用)。
      */
     const ANIME_CHAT_RETRY_MODELS = [
-        'gpt-5.6-terra',
+        'baidu-gpt-5.6-terra',
         'deepseek-v4-flash',
-        'doubao-seed-2-0-pro-260215',
+        'gpt-5.6-terra',
     ];
 
     /**

+ 35 - 8
app/Services/DeepSeek/DeepSeekService.php

@@ -14775,7 +14775,7 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
             $user_prompt .= "- 本集原有{$originSegmentCount}个片段,必须严格生成{$originSegmentCount}个片段(##片段1 到 ##片段{$originSegmentCount}),不得多不得少。\n";
         }
 
-        // 整集模式(episode_id>0):在原提示词后追加独立的“本集改动点”模块。
+        // 改动点模块:整集模式(episode_id>0)输出“本集改动点”,单片段模式(act_id)输出“本片段改动点”。
         // 该模块自身格式独立,不影响上面【分段剧本】的既有格式要求;
         // 生成后由解析阶段抽出写入 check_points 字段,不参与分段剧本解析。
         if ($episode_id > 0) {
@@ -14801,6 +14801,29 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
             $user_prompt .= "- 缺原稿时,模块内仅写“无法对比:未提供【原分段剧本】。”;无实质改动时仅写“无实质性改动。”,均保留分隔行。\n";
             $user_prompt .= "- 输出前核验差异、位置、引用及对应关系,避免重复、遗漏或虚构。仅输出剧本正文与改动点模块,不输出分析、前言或总结。\n";
             $user_prompt .= "- 除【分段剧本】与该【本集改动点】模块外,不得输出任何其它内容;两者缺一视为输出无效。\n";
+        } elseif ($isActIdMode) {
+            $user_prompt .= "\n\n【本片段改动点模块-必须输出】\n";
+            $user_prompt .= "- 在完整输出【分段剧本】(从“##片段1”开始,到该片段最后一个分镜结束)之后,必须再输出一个独立模块,严格按下列格式(两条分隔行必须原样输出,不得增删或改写任何字符):\n";
+            $user_prompt .= "#####本片段改动点#####\n";
+            $user_prompt .= "1.镜头Y:<标题>\n";
+            $user_prompt .= "· 原描述:<原文或忠实概括>。\n";
+            $user_prompt .= "· 修改为:<新稿原文或忠实概括>。\n";
+            $user_prompt .= "· 改动说明:<实际调整及文本可确认的影响>。\n";
+            $user_prompt .= "\n";
+            $user_prompt .= "2.镜头Y:<标题>\n";
+            $user_prompt .= "· 原描述:<原文或忠实概括>。\n";
+            $user_prompt .= "· 修改为:<新稿原文或忠实概括>。\n";
+            $user_prompt .= "· 改动说明:<实际调整及文本可确认的影响>。\n";
+            $user_prompt .= "#####本片段改动点结束#####\n";
+            $user_prompt .= "- 规则:\n";
+            $user_prompt .= "  1.“镜头Y”对应新稿中该片段的分镜编号(分镜Y 即 镜头Y);修改、新增、合并、拆分按新稿定位,删除按原稿定位并标“删除”。编号不同须注明原稿位置;无编号用可核实位置,禁止编造。\n";
+            $user_prompt .= "  2.一项一主题;连续镜头可用Y-Z,非连续位置逐一列明。只列实质改动,不单列标点、空格或不改含义的措辞。\n";
+            $user_prompt .= "  3.保留核验所需关键信息;引号内须为对应原文,概括不加引号、不增信息。不强认原稿有错或猜测创作意图。\n";
+            $user_prompt .= "  4.新增的原描述写“原稿无此内容”;删除的修改为写“已删除”;合并、拆分列明两版对应位置和关系。\n";
+            $user_prompt .= "  5.相邻改动点之间用一个空行分隔;分隔行与各改动点之间不空行。\n";
+            $user_prompt .= "- 缺原稿时,模块内仅写“无法对比:未提供【原分段剧本】。”;无实质改动时仅写“无实质性改动。”,均保留分隔行。\n";
+            $user_prompt .= "- 输出前核验差异、位置、引用及对应关系,避免重复、遗漏或虚构。仅输出剧本正文与改动点模块,不输出分析、前言或总结。\n";
+            $user_prompt .= "- 除【分段剧本】与该【本片段改动点】模块外,不得输出任何其它内容;两者缺一视为输出无效。\n";
         }
         
         $system_prompt = "\n\n【输出格式铁律-最高优先级】\n";
@@ -14821,6 +14844,8 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
         $system_prompt .= "- 请仅生成<分段剧本>部分,不要生成其他任何内容:\n";
         if ($episode_id > 0) {
             $system_prompt .= "- 【整集模式唯一例外】必须在【分段剧本】之后追加【本集改动点】模块(含固定的起止分隔行“#####本集改动点##### / #####本集改动点结束#####”,格式见用户消息的【本集改动点模块-必须输出】);除该模块外不得输出其它任何内容。\n";
+        } elseif ($isActIdMode) {
+            $system_prompt .= "- 【单片段模式唯一例外】必须在【分段剧本】之后追加【本片段改动点】模块(含固定的起止分隔行“#####本片段改动点##### / #####本片段改动点结束#####”,格式见用户消息的【本片段改动点模块-必须输出】);除该模块外不得输出其它任何内容。\n";
         }
         $system_prompt .= "- 第一优先级:片段时长上限(单个片段不超过15秒,超过必须切为新片段)\n";
         $system_prompt .= "- 每个分镜包含:分镜序号、出场角色、场景、出场道具、画面、运镜、配音台词、背景音效\n";
@@ -14926,15 +14951,16 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
             
             $generated_content = $fullContent;
             
-            // 整集模式:先抽出【本集改动点】模块写入 check_points,并从生成正文中剥离该模块,
-            // 避免其内容干扰后续分段剧本的解析
+            // 先抽出【改动点】模块写入 check_points,并从生成正文中剥离该模块,
+            // 避免其内容干扰后续分段剧本的解析(整集模式为“本集改动点”,单片段模式为“本片段改动点”)
             $check_points = '';
-            if ($episode_id > 0) {
-                if (preg_match('/#####\s*本集改动点\s*#####(.*?)(?:#####\s*本集改动点结束\s*#####|$)/su', $generated_content, $cpMatch)) {
+            if ($episode_id > 0 || $isActIdMode) {
+                if (preg_match('/#####\s*本(?:集|片段)改动点\s*#####(.*?)(?:#####\s*本(?:集|片段)改动点结束\s*#####|$)/su', $generated_content, $cpMatch)) {
                     $check_points = trim($cpMatch[1]);
                     $generated_content = trim(str_replace($cpMatch[0], '', $generated_content));
                 } else {
-                    dLog('deepseek')->warning('regenerateSegmentScript 未找到【本集改动点】模块', [
+                    dLog('deepseek')->warning('regenerateSegmentScript 未找到【改动点】模块', [
+                        'act_id'         => $act_id,
                         'episode_id'     => $episode_id,
                         'content_length' => mb_strlen($generated_content),
                         'content_tail'   => mb_substr($generated_content, -300),
@@ -15213,6 +15239,7 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
                             'act_title'    => getProp($new_segment, 'act_title', ''),
                             'act_duration' => getProp($new_segment, 'act_duration', 0),
                             'act_content'  => getProp($new_segment, 'act_show_content', ''),
+                            'check_points' => $check_points,
                         ];
                     }
 
@@ -15400,8 +15427,8 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
                 'is_generated' => getProp($episode, 'is_generated', 0),
                 'acts' => $saved_acts,
             ];
-            // 整集模式(episode_id>0):附带本集改动点 (从生成结果中抽出的独立模块)
-            if ($episode_id > 0) {
+            // 附带改动点(从生成结果中抽出的独立模块):整集模式为“本集改动点”,单片段模式为“本片段改动点”
+            if ($episode_id > 0 || $isActIdMode) {
                 $result['check_points'] = $check_points;
             }
             return $result;