lh 3 месяцев назад
Родитель
Сommit
d096cd223a
2 измененных файлов с 18 добавлено и 3 удалено
  1. 16 1
      app/Services/DeepSeek/DeepSeekService.php
  2. 2 2
      routes/api.php

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

@@ -17,6 +17,7 @@ use OSS\OssClient;
 use Smalot\PdfParser\Parser as PdfParser;
 use TCPDF;
 use PhpOffice\PhpWord\IOFactory as WordIOFactory;
+use Predis\Command\Traits\Get\Get;
 
 class DeepSeekService
 {
@@ -1788,6 +1789,7 @@ class DeepSeekService
         $prompt = getProp($data, 'prompt', '帮我根据给出的内容生成短剧大纲');
         $model = getProp($data, 'model', 'v3');
         $model = $model == 'r1' ? 'deepseek-reasoner' : 'deepseek-chat';
+        $is_multi = getProp($data, 'is_multi', 1);
 
         if (!$file && !$content && !$bid) {
             Utils::throwError('20003:请上传文件或选择书籍或输入内容');
@@ -2029,6 +2031,7 @@ class DeepSeekService
             // 'start_episode_sequence' => 1,
             // 'end_episode_sequence' => count($script_arr['episodes']),
             // 'episode_num' => count($script_arr['episodes']),
+            'is_multi' => $is_multi,
             'generate_status' => '待执行',
             'created_at' => date('Y-m-d H:i:s'),
             'updated_at' => date('Y-m-d H:i:s')
@@ -2186,6 +2189,16 @@ class DeepSeekService
 
         // 如果提示词$prompt有类似于改成N集或调整成N集这类的文字信息,则提取出N这个集数
         $episode_count = $this->extractEpisodeNumber($prompt);
+        if ((int)getProp($anime, 'is_multi') !== 1) {
+            yield [
+                'type'  => 'done',
+                'answer' => '当前剧本是单剧集,不支持修改剧集数',
+                'reasoning' => '',
+                'usage' => []
+            ];
+            return;
+        }
+
         if ($episode_count) {
             $question = "请根据实例格式完成{$episode_count}集剧本大纲";
             $system_message = [
@@ -2508,8 +2521,9 @@ class DeepSeekService
         $bid = getProp($data, 'bid', 0);
         $episode_number = getProp($data, 'episode_number', 1);
         $prompt = trim((string)getProp($data, 'prompt', '确认分镜大纲'));
-        $anime = DB::table('mp_animes')->where('id', $anime_id)->select('content', 'roles', 'scenes')->first();
+        $anime = DB::table('mp_animes')->where('id', $anime_id)->first();
         if (!$anime) Utils::throwError('20003:该对话不存在!');
+        if ((int)getProp($anime, 'is_multi') !== 1 && (int)$episode_number !== 1) Utils::throwError('20003:单剧集不支持其他剧集序号');
         $current_episode = DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->where('is_default', 1)->first();
         $base_episode = $current_episode ?: DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->orderByDesc('id')->first();
         $roles = $base_episode ? json_decode((string)getProp($base_episode, 'roles'), true) : json_decode((string)getProp($anime, 'roles'), true);
@@ -2648,6 +2662,7 @@ class DeepSeekService
 
         if ($prompt == '确认分镜大纲') {
             $content = $uploaded_content ?: $chapter_content;
+            if ((int)getProp($anime, 'is_multi') !== 1) $content = $full_content;   // 单剧集使用全文
             if (!$content) {
                 Utils::throwError('20003:章节内容无法获取,请确认');
             }

+ 2 - 2
routes/api.php

@@ -156,8 +156,8 @@ Route::group(['middleware' => ['bindToken', 'bindExportToken', 'checkLogin']], f
     
 });
 
-Route::post('addChat', [DeepSeekController::class, 'addChat']);
-Route::post('testChat', [DeepSeekController::class, 'testChat']);
+// Route::post('addChat', [DeepSeekController::class, 'addChat']);
+// Route::post('testChat', [DeepSeekController::class, 'testChat']);
 Route::get('exportScript', [DeepSeekController::class, 'exportScript']);
 Route::get('login', [AccountController::class, 'login']); // 登录
 Route::get('logout', [AccountController::class, 'logout']); // 退出