|
|
@@ -2463,16 +2463,64 @@ class DeepSeekService
|
|
|
}
|
|
|
|
|
|
dLog('deepseek')->info('完整内容: '.$fullContent);
|
|
|
+ logDB('deepseek', 'info', '完整内容', ['content' => $fullContent, 'anime_id' => $anime_id]);
|
|
|
|
|
|
// 处理完整内容并返回最终结果
|
|
|
$script_arr = [];
|
|
|
if ($fullContent) {
|
|
|
$script_arr = handleScriptContent($fullContent);
|
|
|
dLog('deepseek')->info('解析内容', $script_arr);
|
|
|
+ logDB('deepseek', 'info', '解析内容', $script_arr);
|
|
|
}
|
|
|
|
|
|
if (empty($script_arr['roles'])) {
|
|
|
- Utils::throwError('20003:未生成剧本相关的内容');
|
|
|
+ // 未生成剧本相关内容,保存对话记录并返回提示
|
|
|
+ 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' => "用户问题:\n
|
|
|
+ {$prompt}\n\n
|
|
|
+ 以下是文档内容:\n
|
|
|
+ {$content}",
|
|
|
+ 'created_at' => $now,
|
|
|
+ 'updated_at' => $now
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ 'uid' => $uid,
|
|
|
+ 'anime_id' => $anime_id,
|
|
|
+ 'sequence' => 0,
|
|
|
+ 'role' => 'assistant',
|
|
|
+ 'content' => $fullContent,
|
|
|
+ '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;
|
|
|
}
|
|
|
|
|
|
// 如果需要生成原文内容,从script_arr中提取
|
|
|
@@ -2491,15 +2539,53 @@ class DeepSeekService
|
|
|
// 新建动漫
|
|
|
$anime_name = getProp($script_arr, 'script_name');
|
|
|
if (!$anime_name) {
|
|
|
- Utils::throwError('20003:未能识别到剧本名称,请确认内容是否符合要求');
|
|
|
- // yield [
|
|
|
- // 'type' => 'done',
|
|
|
- // 'answer' => $fullContent,
|
|
|
- // 'reasoning' => $fullReasoningContent,
|
|
|
- // 'usage' => $usage,
|
|
|
- // 'error' => '未能识别到剧本名称,请确认内容是否符合要求'
|
|
|
- // ];
|
|
|
- // return;
|
|
|
+ // 未识别到剧本名,保存对话记录并返回提示
|
|
|
+ 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' => "用户问题:\n
|
|
|
+ {$prompt}\n\n
|
|
|
+ 以下是文档内容:\n
|
|
|
+ {$content}",
|
|
|
+ 'created_at' => $now,
|
|
|
+ 'updated_at' => $now
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ 'uid' => $uid,
|
|
|
+ 'anime_id' => $anime_id,
|
|
|
+ 'sequence' => 0,
|
|
|
+ 'role' => 'assistant',
|
|
|
+ 'content' => $fullContent,
|
|
|
+ '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;
|
|
|
}
|
|
|
|
|
|
// 确认对话名称唯一性
|
|
|
@@ -3062,24 +3148,58 @@ class DeepSeekService
|
|
|
}
|
|
|
|
|
|
dLog('deepseek')->info('完整内容: '.$fullContent);
|
|
|
+ logDB('deepseek', 'info', '完整内容', ['content' => $fullContent, 'anime_id' => $anime_id]);
|
|
|
|
|
|
// 处理完整内容并返回最终结果
|
|
|
$script_arr = [];
|
|
|
if ($fullContent) {
|
|
|
$script_arr = handleScriptContent($fullContent);
|
|
|
+ dLog('deepseek')->info('解析内容', $script_arr);
|
|
|
+ logDB('deepseek', 'info', '解析内容', $script_arr);
|
|
|
}
|
|
|
|
|
|
if (empty($script_arr['roles'])) {
|
|
|
- Utils::throwError('20003:未生成剧本相关的内容');
|
|
|
- // dLog('deepseek')->info('未生成剧本相关的内容');
|
|
|
- // yield [
|
|
|
- // 'type' => 'error',
|
|
|
- // 'episode' => [],
|
|
|
- // 'answer' => $fullContent,
|
|
|
- // 'reasoning' => $fullReasoningContent,
|
|
|
- // 'usage' => $usage
|
|
|
- // ];
|
|
|
- // return;
|
|
|
+ // 未生成剧本相关内容,保存对话记录并返回提示
|
|
|
+ dLog('deepseek')->info('未生成剧本相关的内容');
|
|
|
+ try {
|
|
|
+ $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' => $fullContent,
|
|
|
+ 'created_at' => $now,
|
|
|
+ 'updated_at' => $now
|
|
|
+ ]
|
|
|
+ ];
|
|
|
+ DB::table('mp_anime_records')->insert($records);
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ dLog('deepseek')->error('保存对话记录失败', ['error' => $e->getMessage()]);
|
|
|
+ }
|
|
|
+
|
|
|
+ yield [
|
|
|
+ 'type' => 'done',
|
|
|
+ 'script' => [],
|
|
|
+ 'episode' => [],
|
|
|
+ 'answer' => $fullContent,
|
|
|
+ 'reasoning' => $fullReasoningContent,
|
|
|
+ 'usage' => $usage,
|
|
|
+ 'error' => '未生成剧本相关的内容,请调整提示词再试'
|
|
|
+ ];
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
// 替换美术风格
|
|
|
@@ -3557,19 +3677,51 @@ class DeepSeekService
|
|
|
}
|
|
|
|
|
|
dLog('deepseek')->info('完整内容: '.$fullContent);
|
|
|
+ logDB('deepseek', 'info', '完整内容', ['content' => $fullContent, 'anime_id' => $anime_id]);
|
|
|
// 处理完整内容并返回最终结果
|
|
|
$episode_arr = handleEpisodeContent($fullContent);
|
|
|
+ logDB('deepseek', 'info', '解析内容', $episode_arr);
|
|
|
if (empty($episode_arr['acts'])) {
|
|
|
- Utils::throwError('20003:未生成分镜剧本相关的内容!');
|
|
|
- // dLog('deepseek')->info('未生成分镜剧本相关的内容');
|
|
|
- // yield [
|
|
|
- // 'type' => 'done',
|
|
|
- // 'episode' => [],
|
|
|
- // 'answer' => $fullContent,
|
|
|
- // 'reasoning' => $fullReasoningContent,
|
|
|
- // 'usage' => $usage
|
|
|
- // ];
|
|
|
- // return;
|
|
|
+ // 未生成剧本相关内容,保存对话记录并返回提示
|
|
|
+ dLog('deepseek')->info('未生成分镜剧本相关的内容');
|
|
|
+ try {
|
|
|
+ $now = date('Y-m-d H:i:s');
|
|
|
+
|
|
|
+ // 保存对话记录
|
|
|
+ $records = [
|
|
|
+ [
|
|
|
+ 'uid' => $uid,
|
|
|
+ 'anime_id' => $anime_id,
|
|
|
+ 'sequence' => $episode_number,
|
|
|
+ 'role' => 'user',
|
|
|
+ 'content' => $prompt,
|
|
|
+ 'created_at' => $now,
|
|
|
+ 'updated_at' => $now
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ 'uid' => $uid,
|
|
|
+ 'anime_id' => $anime_id,
|
|
|
+ 'sequence' => $episode_number,
|
|
|
+ 'role' => 'assistant',
|
|
|
+ 'content' => $fullContent,
|
|
|
+ 'created_at' => $now,
|
|
|
+ 'updated_at' => $now
|
|
|
+ ]
|
|
|
+ ];
|
|
|
+ DB::table('mp_anime_records')->insert($records);
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ dLog('deepseek')->error('保存对话记录失败', ['error' => $e->getMessage()]);
|
|
|
+ }
|
|
|
+
|
|
|
+ yield [
|
|
|
+ 'type' => 'done',
|
|
|
+ 'episode' => [],
|
|
|
+ 'answer' => $fullContent,
|
|
|
+ 'reasoning' => $fullReasoningContent,
|
|
|
+ 'usage' => $usage,
|
|
|
+ 'error' => '未生成分镜剧本相关的内容,请调整提示词再试'
|
|
|
+ ];
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
$existing_roles = $base_episode ? json_decode((string)getProp($base_episode, 'roles'), true) : [];
|