Просмотр исходного кода

新增非预设错误信息AI翻译功能

lh 1 месяц назад
Родитель
Сommit
49b2c8ab00
3 измененных файлов с 64 добавлено и 14 удалено
  1. 11 6
      app/Libs/Helpers.php
  2. 52 3
      app/Services/DeepSeek/DeepSeekService.php
  3. 1 5
      routes/api.php

+ 11 - 6
app/Libs/Helpers.php

@@ -3,6 +3,7 @@
 use App\Consts\BaseConst;
 use GuzzleHttp\Client;
 use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\Log;
 use Monolog\Handler\StreamHandler;
 use Monolog\Logger;
@@ -5233,15 +5234,19 @@ function mapErrorMessage($errorMessage)
     }
 
     if (stripos($errorMessage, 'The request failed because the output video may be related to copyright restrictions') !== false) {
-        return '涉及到版权问题无法生成,请调整后重试';
+        return '输出视频可能涉及版权限制,请更换内容或降低相似度后重试。';
     }
 
-    if (stripos($errorMessage, 'sensitive') !== false) {
-        return '含有敏感词,请调整后重试';
+    // 未命中预设错误:调用模型生成友好翻译并缓存,避免轮询场景重复消耗
+    try {
+        $cacheKey = 'unknown_error_translate_' . md5((string)$errorMessage);
+        return Cache::remember($cacheKey, 600, function () use ($errorMessage) {
+            $friendlyError = app(\App\Services\DeepSeek\DeepSeekService::class)->analyzeErrorMessage($errorMessage);
+            return $friendlyError ?: '未知异常,请重试';
+        });
+    } catch (\Throwable $e) {
+        return '未知异常,请重试';
     }
-
-    // 默认返回
-    return '未知异常,请重试';
 }
 
 /**

+ 52 - 3
app/Services/DeepSeek/DeepSeekService.php

@@ -13012,10 +13012,16 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
         
     }
 
-    // 仅调用deepseek对话接口
-    private function chatOnly($post_data) {
+    /**
+     * 仅调用 deepseek 对话接口(非流式)
+     *
+     * @param array $post_data
+     * @param int $timeout
+     * @return array
+     */
+    private function chatOnly($post_data, $timeout = 1800) {
         $post_data['max_tokens'] = 300000;
-        $client = new Client(['timeout' => 1800, 'verify' => false]);
+        $client = new Client(['timeout' => $timeout, 'verify' => false]);
         $result = $client->post($this->url, ['json' => $post_data, 'headers' => $this->headers]);
         $response = $result->getBody()->getContents();
         $response_arr = json_decode($response, true);
@@ -13035,6 +13041,49 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
         ];
     }
 
+    /**
+     * 用 deepseek-v4-flash 非流式分析报错,返回不超过50字的用户友好提示
+     *
+     * @param string $errorMessage
+     * @return string|null
+     */
+    public function analyzeErrorMessage($errorMessage)
+    {
+        try {
+            $post_data = [
+                'model'             => 'deepseek-v4-flash',
+                'messages'          => [
+                    [
+                        'role'    => 'system',
+                        'content' => '你是视频生成任务的报错分析助手。请根据用户给出的原始报错,用一句中文提示告诉用户问题原因和下一步怎么做,不超过50个字,直接输出提示内容,不要解释、不要输出代码。',
+                    ],
+                    [
+                        'role'    => 'user',
+                        'content' => (string)$errorMessage,
+                    ],
+                ],
+                'temperature'       => 0.3,
+                'frequency_penalty' => 0,
+                'presence_penalty'  => 0,
+                'response_format'   => ['type' => 'text'],
+                'stream'            => false,
+            ];
+
+            $result = $this->chatOnly($post_data, 8);
+            $content = trim((string)($result['fullContent'] ?? ''));
+            if ($content === '') {
+                return null;
+            }
+
+            return mb_substr($content, 0, 50);
+        } catch (\Exception $e) {
+            dLog('deepseek')->error('视频任务报错分析失败: ' . $e->getMessage(), [
+                'error_message' => $errorMessage
+            ]);
+            return null;
+        }
+    }
+
     // 仅调用 GPT-5.4 对话接口(非流式)
     private function gpt54ChatOnly($post_data) {
         $apiKey = env('GPT_54_API_KEY');

+ 1 - 5
routes/api.php

@@ -23,7 +23,7 @@ use Illuminate\Support\Facades\Route;
 */
 
 Route::group(['middleware' => ['bindToken', 'bindExportToken', 'checkLogin']], function () {
-    Route::get('userInfo', [AccountController::class, 'userInfo']); // 登录
+    Route::get('userInfo', [AccountController::class, 'userInfo']); // 获取用户信息
 
     Route::group(['prefix' => 'book'], function () {
         // 书籍管理
@@ -276,10 +276,6 @@ Route::group(['middleware' => ['bindToken', 'bindExportToken', 'checkLogin']], f
 // Route::post('testChat', [DeepSeekController::class, 'testChat']);
 Route::get('login', [AccountController::class, 'login']); // 登录
 Route::get('logout', [AccountController::class, 'logout']); // 退出
-Route::get('sseLink', [DeepSeekController::class, 'sseLink']); // sseLink
-Route::get('testLink', function () {
-    return 'Hello, World!';
-});
 
 // seedance回调
 Route::any('video/seedanceCallback', [VideoGenerationController::class, 'seedanceCallback']);