lh 2 місяців тому
батько
коміт
ee1fb77247
1 змінених файлів з 57 додано та 57 видалено
  1. 57 57
      app/Services/DeepSeek/DeepSeekService.php

+ 57 - 57
app/Services/DeepSeek/DeepSeekService.php

@@ -2750,7 +2750,7 @@ class DeepSeekService
         }
         
         $systemPrompt = $is_single
-            ? "你是一个专业的文档分析助手及资深编剧,请根据用户提供的文档内容输出单剧集完整策划稿。单剧集模式下,必须一次性输出可直接保存的大纲与完整分镜,不允许只输出大纲。
+            ? "你是一个专业的文档分析助手及资深编剧,请根据用户提供的文档内容输出单剧集完整策划稿(剧本大纲包括: <故事梗概><剧本亮点><人物关系><核心矛盾><主体列表><美术风格><场景列表><分镜剧本>,每个板块之间必须使用###分隔,#不能多也不能少)。单剧集模式下,必须一次性输出可直接保存的大纲与完整分镜,不允许只输出大纲。
             强制要求:
             1.你只负责与剧本相关的内容,如果用户输入与剧本无关的内容,请告知用户并拒绝继续回答,此为第一优先原则,不满足此原则就忽略其他要求并停止继续输出
             2.如果用户输入修改美术风格、修改画风这类内容,请告知用户不可修改美术风格,并拒绝继续回答
@@ -2758,7 +2758,7 @@ class DeepSeekService
             4.用户如果要求你帮忙写一个故事或者剧本,此类要求不属于与剧本无关,请帮助用户完成请求{$content_generation_requirement}
             5.强制按照示例格式返回内容,不要更改格式或随意增加符号\n
             普通要求:
-            1.剧集标题必须与文档内容高度相关,剧集序号是1。
+            1.剧本名(必须生成)和剧集标题必须与文档内容高度相关,(其中剧集序号是1)
             2.{$mappedArtStyle_prompt}
             2.<主体列表>中出现的主体必须尽可能统一,只允许同一个角色年龄段相差较大的情况下可重复,比如角色-少年、角色-青年、角色-中年、角色-老年这种情况,不得出现角色-愤怒、角色-隐忍、角色-求生等情绪和状态变化的同一角色;并且角色的样貌、形体及穿着描述尽可能详细
             2.1<主体列表>的音色必须在以下音色中($timbres_content)选择,需要角色描述的年纪和性别选择,比如角色是青年男性就只能在北京小爷、阳光青年、傲娇霸总、优柔公子、解说小明、青涩小生、低音沉郁、亲切青年中选择,选好的音色放在描述的最后用{{}}框起来。
@@ -2870,9 +2870,10 @@ class DeepSeekService
                 4.用户如果要求你帮忙写一个故事或者剧本,此类要求不属于与剧本无关,请帮助用户完成请求{$content_generation_requirement}
                 5.强制按照示例格式返回内容,不要更改格式或随意增加符号\n
                 普通要求:\n
-                1.<主体列表>中出现的主体必须尽可能统一,只允许同一个角色年龄段相差较大的情况下可重复,比如梁萧-少年、梁萧-青年、梁萧-中年、梁萧-老年这种情况,不得出现梁萧-愤怒、梁萧-隐忍、梁萧-求生等情绪和状态变化的同一角色;并且角色的样貌、形体及穿着描述尽可能详细\n
-                2.{$mappedArtStyle_prompt}
-                2.<场景列表>与主体列表同理,需尽可能的对场景环境进行详细描述\n\n
+                1.剧本名(必须生成)必须与文档内容高度相关
+                2.<主体列表>中出现的主体必须尽可能统一,只允许同一个角色年龄段相差较大的情况下可重复,比如梁萧-少年、梁萧-青年、梁萧-中年、梁萧-老年这种情况,不得出现梁萧-愤怒、梁萧-隐忍、梁萧-求生等情绪和状态变化的同一角色;并且角色的样貌、形体及穿着描述尽可能详细
+                3.{$mappedArtStyle_prompt}
+                4.<场景列表>与主体列表同理,需尽可能的对场景环境进行详细描述\n\n
                 示例如下:\n
 ###剧本名:西昆仑
 
@@ -3114,60 +3115,59 @@ class DeepSeekService
         // 新建动漫
         if ($user_anime_name == '新剧本策划') {
             $anime_name = getProp($script_arr, 'script_name');
-            $origin_anime_name = $anime_name;
-            if (!$anime_name) {
-                // 未识别到剧本名,保存对话记录并返回提示
-                dLog('deepseek')->info('未能识别到剧本名称');
-                try {
-                    DB::beginTransaction();
-                    $now = date('Y-m-d H:i:s');
+            // if (!$anime_name) {
+            //     // 未识别到剧本名,保存对话记录并返回提示
+            //     dLog('deepseek')->info('未能识别到剧本名称');
+            //     try {
+            //         DB::beginTransaction();
+            //         $now = date('Y-m-d H:i:s');
                     
-                    // 保存对话记录
-                    $records = [
-                        [
-                            'uid'       => $uid,
-                            'anime_id'  => $anime_id,
-                            'sequence'  => 0,
-                            'role'      => 'user',
-                            'content'   => $prompt,
-                            'created_at' => $now,
-                            'updated_at' => $now
-                        ],
-                        [
-                            'uid'       => $uid,
-                            'anime_id'  => $anime_id,
-                            'sequence'  => 0,
-                            'role'      => 'assistant',
-                            'content'   => '未能生成剧本名称,请重试',
-                            'created_at' => $now,
-                            'updated_at' => $now
-                        ]
-                    ];
-                    DB::table('mp_anime_records')->insert($records);
-                    DB::commit();
-                } catch (\Exception $e) {
-                    DB::rollBack();
-                    dLog('deepseek')->error('保存对话记录失败', ['error' => $e->getMessage()]);
-                }
+            //         // 保存对话记录
+            //         $records = [
+            //             [
+            //                 'uid'       => $uid,
+            //                 'anime_id'  => $anime_id,
+            //                 'sequence'  => 0,
+            //                 'role'      => 'user',
+            //                 'content'   => $prompt,
+            //                 'created_at' => $now,
+            //                 'updated_at' => $now
+            //             ],
+            //             [
+            //                 'uid'       => $uid,
+            //                 'anime_id'  => $anime_id,
+            //                 'sequence'  => 0,
+            //                 'role'      => 'assistant',
+            //                 'content'   => '未能生成剧本名称,请重试',
+            //                 'created_at' => $now,
+            //                 'updated_at' => $now
+            //             ]
+            //         ];
+            //         DB::table('mp_anime_records')->insert($records);
+            //         DB::commit();
+            //     } catch (\Exception $e) {
+            //         DB::rollBack();
+            //         dLog('deepseek')->error('保存对话记录失败', ['error' => $e->getMessage()]);
+            //     }
                 
-                yield [
-                    'type'  => 'done',
-                    'script' => [],
-                    'episode' => [],
-                    'answer' => $fullContent,
-                    'reasoning' => $fullReasoningContent,
-                    'usage' => $usage,
-                    'error' => '未能识别到剧本名称,请调整提示词再试'
-                ];
-                return;
-            }
+            //     yield [
+            //         'type'  => 'done',
+            //         'script' => [],
+            //         'episode' => [],
+            //         'answer' => $fullContent,
+            //         'reasoning' => $fullReasoningContent,
+            //         'usage' => $usage,
+            //         'error' => '未能识别到剧本名称,请调整提示词再试'
+            //     ];
+            //     return;
+            // }
 
             // 确认对话名称唯一性
-            if (DB::table('mp_animes')->where('anime_name', $anime_name)->value('id')) {
+            if ($anime_name && DB::table('mp_animes')->where('anime_name', $anime_name)->value('id')) {
                 $anime_name = $anime_name . '_' . date('YmdHis');
             }
         }else {
-            $origin_anime_name = $anime_name = $user_anime_name;
+            $anime_name = $user_anime_name;
         }
 
         $table_data = [
@@ -3199,7 +3199,6 @@ class DeepSeekService
                 Utils::throwError('20003:动漫保存失败');
             }
 
-            // $record_content = '基于您的要求完成了《'.$origin_anime_name.'》大纲。请确认剧本大纲是否符合你的预期,我将根据该大纲开始策划详细剧本。';
             // 保存对话记录
             $records = [
                 [
@@ -3427,7 +3426,7 @@ class DeepSeekService
 萌娃:奶气萌娃";
         
         $system_message = ['role'=>'system', 'content'=>$is_single
-            ? "你是一个专业的文档分析助手及资深编剧,请根据用户提供的文档内容输出单剧集完整策划稿。单剧集模式下,必须一次性输出可直接保存的大纲与完整分镜,不允许只输出大纲。
+            ? "你是一个专业的文档分析助手及资深编剧,请根据用户提供的文档内容输出单剧集完整策划稿(剧本大纲包括: <故事梗概><剧本亮点><人物关系><核心矛盾><主体列表><美术风格><场景列表><分镜剧本>,每个板块之间必须使用###分隔,#不能多也不能少)。单剧集模式下,必须一次性输出可直接保存的大纲与完整分镜,不允许只输出大纲。
             强制要求:
             1.你只负责与剧本相关的内容,如果用户输入与剧本无关的内容,请告知用户并拒绝继续回答,此为第一优先原则,不满足此原则就忽略其他要求并停止继续输出
             2.如果用户输入修改美术风格、修改画风这类内容,请告知用户不可修改美术风格,并拒绝继续回答
@@ -3435,7 +3434,7 @@ class DeepSeekService
             4.用户如果要求你帮忙写一个故事或者剧本,此类要求不属于与剧本无关,请帮助用户完成请求{$content_generation_requirement}
             5.强制按照示例格式返回内容,不要更改格式或随意增加符号\n
             普通要求:
-            1.剧集标题必须与文档内容高度相关,剧集序号是1。
+            1.剧本名(必须生成)和剧集标题必须与文档内容高度相关,(其中剧集序号是1)
             2.<主体列表>中出现的主体必须尽可能统一,只允许同一个角色年龄段相差较大的情况下可重复,比如角色-少年、角色-青年、角色-中年、角色-老年这种情况,不得出现角色-愤怒、角色-隐忍、角色-求生等情绪和状态变化的同一角色;并且角色的样貌、形体及穿着描述尽可能详细
             2.1<主体列表>的音色必须在以下音色中($timbres_content)选择,需要角色描述的年纪和性别选择,比如角色是青年男性就只能在北京小爷、阳光青年、傲娇霸总、优柔公子、解说小明、青涩小生、低音沉郁、亲切青年中选择,选好的音色放在描述的最后用{{}}框起来。
             3.2.<场景列表>与主体列表同理,需尽可能的对场景环境进行详细描述
@@ -3546,8 +3545,9 @@ class DeepSeekService
                 4.用户如果要求你帮忙写一个故事或者剧本,此类要求不属于与剧本无关,请帮助用户完成请求{$content_generation_requirement}
                 5.强制按照示例格式返回内容,不要更改格式或随意增加符号\n
                 普通要求:\n
-                1.<主体列表>中出现的主体必须尽可能统一,只允许同一个角色年龄段相差较大的情况下可重复,比如梁萧-少年、梁萧-青年、梁萧-中年、梁萧-老年这种情况,不得出现梁萧-愤怒、梁萧-隐忍、梁萧-求生等情绪和状态变化的同一角色;并且角色的样貌、形体及穿着描述尽可能详细\n
-                2.<场景列表>与主体列表同理,需尽可能的对场景环境进行详细描述\n\n
+                1.剧本名(必须生成)必须与文档内容高度相关
+                2.<主体列表>中出现的主体必须尽可能统一,只允许同一个角色年龄段相差较大的情况下可重复,比如梁萧-少年、梁萧-青年、梁萧-中年、梁萧-老年这种情况,不得出现梁萧-愤怒、梁萧-隐忍、梁萧-求生等情绪和状态变化的同一角色;并且角色的样貌、形体及穿着描述尽可能详细\n
+                3.<场景列表>与主体列表同理,需尽可能的对场景环境进行详细描述\n\n
                 示例如下:\n
 ###剧本名:西昆仑