lh 4 ay önce
ebeveyn
işleme
28a169bf79
3 değiştirilmiş dosya ile 27 ekleme ve 31 silme
  1. 18 24
      app/Libs/Helpers.php
  2. 7 6
      app/Services/DeepSeek/DeepSeekService.php
  3. 2 1
      routes/api.php

+ 18 - 24
app/Libs/Helpers.php

@@ -2527,22 +2527,14 @@ function parseRolesFromText(string $rolesText): array
             continue;
         }
         
-        // 匹配格式:角色名-描述:详细信息
-        // 例如:许芸-重生者:18岁少女,原许家假千金...
-        if (preg_match('/^([^::]+)[::]/', $line, $matches)) {
-            $roleName = trim($matches[1]);
-            
-            // 如果角色名包含"-",取"-"前面的部分作为主要角色名
-            if (strpos($roleName, '-') !== false) {
-                $parts = explode('-', $roleName);
-                $mainRole = trim($parts[0]);
-                if (!empty($mainRole) && !in_array($mainRole, $roles)) {
-                    $roles[] = $mainRole;
-                }
-            } else {
-                if (!in_array($roleName, $roles)) {
-                    $roles[] = $roleName;
-                }
+        $line = str_replace(':', ':', $line);
+        if (strstr($line, ':')) {
+            $line_arr = explode(':', $line);
+            if (count($line_arr) == 2) {
+                $roles[] = [
+                    'role' => $line_arr[0],
+                    'description' => $line_arr[1],
+                ];
             }
         }
     }
@@ -2551,9 +2543,9 @@ function parseRolesFromText(string $rolesText): array
 }
 
 /**
- * 将场景列表文本拆分为场景数组
+ * 将场景列表文本拆分为主体数组
  * 
- * @param string $scenesText 场景列表文本内容
+ * @param string $rolesText 场景列表列表文本内容
  * @return array 场景名称数组
  */
 function parseScenesFromText(string $scenesText): array
@@ -2573,12 +2565,14 @@ function parseScenesFromText(string $scenesText): array
             continue;
         }
         
-        // 匹配格式:场景名:描述信息
-        // 例如:徐家馄饨店:老旧街边小店,锅炉、案板杂乱...
-        if (preg_match('/^([^::]+)[::]/', $line, $matches)) {
-            $sceneName = trim($matches[1]);
-            if (!empty($sceneName) && !in_array($sceneName, $scenes)) {
-                $scenes[] = $sceneName;
+        $line = str_replace(':', ':', $line);
+        if (strstr($line, ':')) {
+            $line_arr = explode(':', $line);
+            if (count($line_arr) == 2) {
+                $scenes[] = [
+                    'scene' => $line_arr[0],
+                    'description' => $line_arr[1],
+                ];
             }
         }
     }

+ 7 - 6
app/Services/DeepSeek/DeepSeekService.php

@@ -1001,7 +1001,7 @@ class DeepSeekService
                     continue;
                 }
                 
-                Log::info('收到原始行数据', ['line' => $line]);
+                // Log::info('收到原始行数据', ['line' => $line]);
                 
                 // 检查是否是 SSE 数据行
                 if (strpos($line, 'data: ') !== 0) {
@@ -1024,7 +1024,7 @@ class DeepSeekService
                         continue;
                     }
                     
-                    Log::info('成功解析 JSON', ['has_choices' => isset($json['choices'])]);
+                    // Log::info('成功解析 JSON', ['has_choices' => isset($json['choices'])]);
                     
                     if (isset($json['choices'][0]['delta'])) {
                         $delta = $json['choices'][0]['delta'];
@@ -1033,7 +1033,7 @@ class DeepSeekService
                         // 注释掉以下内容则不返回d思维链内容
                         if (isset($delta['reasoning_content'])) {
                             $fullReasoningContent .= $delta['reasoning_content'];
-                            Log::info('输出思维链内容', ['length' => strlen($delta['reasoning_content'])]);
+                            // Log::info('输出思维链内容', ['length' => strlen($delta['reasoning_content'])]);
                             yield [
                                 'type' => 'reasoning',
                                 'content' => $delta['reasoning_content'],
@@ -1044,7 +1044,7 @@ class DeepSeekService
                         // 处理最终回答内容
                         if (isset($delta['content'])) {
                             $fullContent .= $delta['content'];
-                            Log::info('输出回答内容', ['length' => strlen($delta['content'])]);
+                            // Log::info('输出回答内容', ['length' => strlen($delta['content'])]);
                             yield [
                                 'type' => 'content',
                                 'content' => $delta['content'],
@@ -1221,6 +1221,7 @@ class DeepSeekService
             $usage = isset($response_arr['usage']) ? $response_arr['usage'] : [];
         }
 
+        $script_arr = [];
         // 处理结果
         if ($content) {
             $script_arr = handleScriptContent($content);
@@ -1246,9 +1247,9 @@ class DeepSeekService
                 'highlights' => isset($script_arr['highlights']) ? $script_arr['highlights'] : '',
                 'role_relationship' => isset($script_arr['role_relationship']) ? $script_arr['role_relationship'] : '',
                 'core_contradiction' => isset($script_arr['core_contradiction']) ? $script_arr['core_contradiction'] : '',
-                'roles' => isset($script_arr['roles']) ? json_encode($script_arr['roles'], true) : '',
+                'roles' => isset($script_arr['roles']) ? json_encode($script_arr['roles'], 256) : '',
                 'art_style' => isset($script_arr['art_style']) ? $script_arr['art_style'] : '',
-                'scenes' => isset($script_arr['scenes']) ? json_encode($script_arr['scenes'], true) : '',
+                'scenes' => isset($script_arr['scenes']) ? json_encode($script_arr['scenes'], 256) : '',
                 'status' => 3,
                 'start_episode_sequence' => $start_episode_sequence,
                 'end_episode_sequence' => $start_episode_sequence + count($script_arr['episodes']) - 1,

+ 2 - 1
routes/api.php

@@ -91,6 +91,7 @@ Route::group(['middleware' => ['bindToken', 'bindExportToken', 'checkLogin']], f
         Route::get('scriptInfo', [DeepSeekController::class, 'scriptInfo']);
         Route::get('createScript', [DeepSeekController::class, 'createScript']);
         Route::post('chatWithFile', [DeepSeekController::class, 'chatWithFile']);
+        Route::post('chatWithFileStream', [DeepSeekController::class, 'chatWithFileStream']);
         Route::post('saveScript', [DeepSeekController::class, 'saveScript']);
     });
 
@@ -112,7 +113,7 @@ Route::group(['middleware' => ['bindToken', 'bindExportToken', 'checkLogin']], f
     });
     
 });
-Route::post('chatWithFileStream', [DeepSeekController::class, 'chatWithFileStream']);
+
 Route::get('login', [AccountController::class, 'login']); // 登录
 Route::get('logout', [AccountController::class, 'logout']); // 退出
 Route::get('sseLink', [DeepSeekController::class, 'sseLink']); // sseLink