|
|
@@ -2945,32 +2945,75 @@ class DeepSeekService
|
|
|
$fullReasoningContent = '';
|
|
|
$usage = [];
|
|
|
|
|
|
- if (in_array($model, ['deepseek-reasoner', 'deepseek-chat', 'deepseek-v4-flash', 'deepseek-v4-pro'])) {
|
|
|
- // DeepSeek 官方模型使用 DeepSeek API
|
|
|
- $streamGenerator = $this->deepSeekStreamResponse($post_data);
|
|
|
- } else {
|
|
|
- // 其他模型使用火山引擎API
|
|
|
- $streamGenerator = $this->volcEngineChatCompletion($post_data);
|
|
|
- }
|
|
|
+ try {
|
|
|
+ if (in_array($model, ['deepseek-reasoner', 'deepseek-chat', 'deepseek-v4-flash', 'deepseek-v4-pro'])) {
|
|
|
+ // DeepSeek 官方模型使用 DeepSeek API
|
|
|
+ $streamGenerator = $this->deepSeekStreamResponse($post_data);
|
|
|
+ } else {
|
|
|
+ // 其他模型使用火山引擎API
|
|
|
+ $streamGenerator = $this->volcEngineChatCompletion($post_data);
|
|
|
+ }
|
|
|
|
|
|
- // 处理流式输出
|
|
|
- if (!is_iterable($streamGenerator)) {
|
|
|
- dLog('deepseek')->error('addChat流式生成器无效', ['generator_type' => gettype($streamGenerator)]);
|
|
|
- Utils::throwError('20003:接口返回数据异常,请重新请求');
|
|
|
- }
|
|
|
-
|
|
|
- foreach ($streamGenerator as $chunk) {
|
|
|
- if (isset($chunk['type'])) {
|
|
|
- if ($chunk['type'] === 'done') {
|
|
|
- // 最终结果
|
|
|
- $fullContent = $chunk['full_content'];
|
|
|
- $fullReasoningContent = $chunk['full_reasoning'];
|
|
|
- $usage = isset($chunk['usage']) ? $chunk['usage'] : [];
|
|
|
- } else {
|
|
|
- // 逐块yield数据
|
|
|
- yield $chunk;
|
|
|
+ // 验证返回值类型
|
|
|
+ if (!is_iterable($streamGenerator)) {
|
|
|
+ $errorType = is_object($streamGenerator) ? get_class($streamGenerator) : gettype($streamGenerator);
|
|
|
+ dLog('deepseek')->error('addChat流式生成器无效', [
|
|
|
+ 'generator_type' => $errorType,
|
|
|
+ 'model' => $model,
|
|
|
+ 'anime_id' => $anime_id
|
|
|
+ ]);
|
|
|
+ logDB('deepseek', 'error', 'addChat流式生成器类型错误', [
|
|
|
+ 'type' => $errorType,
|
|
|
+ 'model' => $model
|
|
|
+ ]);
|
|
|
+
|
|
|
+ yield [
|
|
|
+ 'type' => 'error',
|
|
|
+ 'script' => [],
|
|
|
+ 'episode' => [],
|
|
|
+ 'answer' => '',
|
|
|
+ 'reasoning' => '',
|
|
|
+ 'usage' => [],
|
|
|
+ 'error' => '接口返回数据异常,请重新请求'
|
|
|
+ ];
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理流式输出
|
|
|
+ foreach ($streamGenerator as $chunk) {
|
|
|
+ if (isset($chunk['type'])) {
|
|
|
+ if ($chunk['type'] === 'done') {
|
|
|
+ // 最终结果
|
|
|
+ $fullContent = $chunk['full_content'];
|
|
|
+ $fullReasoningContent = $chunk['full_reasoning'];
|
|
|
+ $usage = isset($chunk['usage']) ? $chunk['usage'] : [];
|
|
|
+ } else {
|
|
|
+ // 逐块yield数据
|
|
|
+ yield $chunk;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ dLog('deepseek')->error('addChat流式处理异常: ' . $e->getMessage(), [
|
|
|
+ 'model' => $model,
|
|
|
+ 'anime_id' => $anime_id,
|
|
|
+ 'trace' => $e->getTraceAsString()
|
|
|
+ ]);
|
|
|
+ logDB('deepseek', 'error', 'addChat流式处理失败', [
|
|
|
+ 'error' => $e->getMessage(),
|
|
|
+ 'model' => $model
|
|
|
+ ]);
|
|
|
+
|
|
|
+ yield [
|
|
|
+ 'type' => 'error',
|
|
|
+ 'script' => [],
|
|
|
+ 'episode' => [],
|
|
|
+ 'answer' => '',
|
|
|
+ 'reasoning' => '',
|
|
|
+ 'usage' => [],
|
|
|
+ 'error' => '处理请求时发生异常: ' . $e->getMessage()
|
|
|
+ ];
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
dLog('deepseek')->info('完整内容: '.$fullContent);
|
|
|
@@ -3674,27 +3717,68 @@ class DeepSeekService
|
|
|
|
|
|
// dd($post_data);
|
|
|
// dLog('deepseek')->info('请求参数: '.json_encode($post_data, 256));
|
|
|
- if (in_array($model, ['deepseek-reasoner', 'deepseek-chat', 'deepseek-v4-flash', 'deepseek-v4-pro'])) {
|
|
|
- // DeepSeek 官方模型使用 DeepSeek API
|
|
|
- $streamGenerator = $this->deepSeekStreamResponse($post_data);
|
|
|
- } else {
|
|
|
- // 其他模型使用火山引擎API
|
|
|
- $streamGenerator = $this->volcEngineChatCompletion($post_data);
|
|
|
- }
|
|
|
+ try {
|
|
|
+ if (in_array($model, ['deepseek-reasoner', 'deepseek-chat', 'deepseek-v4-flash', 'deepseek-v4-pro'])) {
|
|
|
+ $streamGenerator = $this->deepSeekStreamResponse($post_data);
|
|
|
+ } else {
|
|
|
+ $streamGenerator = $this->volcEngineChatCompletion($post_data);
|
|
|
+ }
|
|
|
|
|
|
- // 处理流式输出
|
|
|
- foreach ($streamGenerator as $chunk) {
|
|
|
- if (isset($chunk['type'])) {
|
|
|
- if ($chunk['type'] === 'done') {
|
|
|
- // 最终结果
|
|
|
- $fullContent = $chunk['full_content'];
|
|
|
- $fullReasoningContent = $chunk['full_reasoning'];
|
|
|
- $usage = isset($chunk['usage']) ? $chunk['usage'] : [];
|
|
|
- } else {
|
|
|
- // 逐块yield数据
|
|
|
- yield $chunk;
|
|
|
+ // 验证返回值类型
|
|
|
+ if (!is_iterable($streamGenerator)) {
|
|
|
+ $errorType = is_object($streamGenerator) ? get_class($streamGenerator) : gettype($streamGenerator);
|
|
|
+ dLog('deepseek')->error('方法名流式生成器无效', [
|
|
|
+ 'generator_type' => $errorType,
|
|
|
+ 'model' => $model,
|
|
|
+ // 添加其他上下文信息
|
|
|
+ ]);
|
|
|
+ logDB('deepseek', 'error', '方法名流式生成器类型错误', [
|
|
|
+ 'type' => $errorType,
|
|
|
+ 'model' => $model
|
|
|
+ ]);
|
|
|
+
|
|
|
+ yield [
|
|
|
+ 'type' => 'error',
|
|
|
+ // 根据方法返回相应的空数据结构
|
|
|
+ 'answer' => '',
|
|
|
+ 'reasoning' => '',
|
|
|
+ 'usage' => [],
|
|
|
+ 'error' => '接口返回数据异常,请重新请求'
|
|
|
+ ];
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理流式输出
|
|
|
+ foreach ($streamGenerator as $chunk) {
|
|
|
+ if (isset($chunk['type'])) {
|
|
|
+ if ($chunk['type'] === 'done') {
|
|
|
+ $fullContent = $chunk['full_content'];
|
|
|
+ $fullReasoningContent = $chunk['full_reasoning'];
|
|
|
+ $usage = isset($chunk['usage']) ? $chunk['usage'] : [];
|
|
|
+ } else {
|
|
|
+ yield $chunk;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ dLog('deepseek')->error('方法名流式处理异常: ' . $e->getMessage(), [
|
|
|
+ 'model' => $model,
|
|
|
+ 'trace' => $e->getTraceAsString()
|
|
|
+ ]);
|
|
|
+ logDB('deepseek', 'error', '方法名流式处理失败', [
|
|
|
+ 'error' => $e->getMessage(),
|
|
|
+ 'model' => $model
|
|
|
+ ]);
|
|
|
+
|
|
|
+ yield [
|
|
|
+ 'type' => 'error',
|
|
|
+ // 根据方法返回相应的空数据结构
|
|
|
+ 'answer' => '',
|
|
|
+ 'reasoning' => '',
|
|
|
+ 'usage' => [],
|
|
|
+ 'error' => '处理请求时发生异常: ' . $e->getMessage()
|
|
|
+ ];
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
dLog('deepseek')->info('完整内容: '.$fullContent);
|
|
|
@@ -4241,32 +4325,75 @@ class DeepSeekService
|
|
|
$fullReasoningContent = '';
|
|
|
$usage = [];
|
|
|
|
|
|
- if (in_array($model, ['deepseek-reasoner', 'deepseek-chat', 'deepseek-v4-flash', 'deepseek-v4-pro'])) {
|
|
|
- // DeepSeek 官方模型使用 DeepSeek API
|
|
|
- $streamGenerator = $this->deepSeekStreamResponse($post_data);
|
|
|
- } else {
|
|
|
- // 其他模型使用火山引擎API
|
|
|
- $streamGenerator = $this->volcEngineChatCompletion($post_data);
|
|
|
- }
|
|
|
+ try {
|
|
|
+ if (in_array($model, ['deepseek-reasoner', 'deepseek-chat', 'deepseek-v4-flash', 'deepseek-v4-pro'])) {
|
|
|
+ // DeepSeek 官方模型使用 DeepSeek API
|
|
|
+ $streamGenerator = $this->deepSeekStreamResponse($post_data);
|
|
|
+ } else {
|
|
|
+ // 其他模型使用火山引擎API
|
|
|
+ $streamGenerator = $this->volcEngineChatCompletion($post_data);
|
|
|
+ }
|
|
|
|
|
|
- // 处理流式输出
|
|
|
- if (!is_iterable($streamGenerator)) {
|
|
|
- dLog('deepseek')->error('chat流式生成器无效', ['generator_type' => gettype($streamGenerator)]);
|
|
|
- Utils::throwError('20003:接口返回数据异常,请重新请求');
|
|
|
- }
|
|
|
-
|
|
|
- foreach ($streamGenerator as $chunk) {
|
|
|
- if (isset($chunk['type'])) {
|
|
|
- if ($chunk['type'] === 'done') {
|
|
|
- // 最终结果
|
|
|
- $fullContent = $chunk['full_content'];
|
|
|
- $fullReasoningContent = $chunk['full_reasoning'];
|
|
|
- $usage = isset($chunk['usage']) ? $chunk['usage'] : [];
|
|
|
- } else {
|
|
|
- // 逐块yield数据
|
|
|
- yield $chunk;
|
|
|
+ // 验证返回值类型
|
|
|
+ if (!is_iterable($streamGenerator)) {
|
|
|
+ $errorType = is_object($streamGenerator) ? get_class($streamGenerator) : gettype($streamGenerator);
|
|
|
+ dLog('deepseek')->error('chat流式生成器无效', [
|
|
|
+ 'generator_type' => $errorType,
|
|
|
+ 'model' => $model,
|
|
|
+ 'anime_id' => $anime_id,
|
|
|
+ 'episode_number' => $episode_number
|
|
|
+ ]);
|
|
|
+ logDB('deepseek', 'error', 'chat流式生成器类型错误', [
|
|
|
+ 'type' => $errorType,
|
|
|
+ 'model' => $model
|
|
|
+ ]);
|
|
|
+
|
|
|
+ yield [
|
|
|
+ 'type' => 'error',
|
|
|
+ 'episode' => [],
|
|
|
+ 'answer' => '',
|
|
|
+ 'reasoning' => '',
|
|
|
+ 'usage' => [],
|
|
|
+ 'error' => '接口返回数据异常,请重新请求'
|
|
|
+ ];
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理流式输出
|
|
|
+ foreach ($streamGenerator as $chunk) {
|
|
|
+ if (isset($chunk['type'])) {
|
|
|
+ if ($chunk['type'] === 'done') {
|
|
|
+ // 最终结果
|
|
|
+ $fullContent = $chunk['full_content'];
|
|
|
+ $fullReasoningContent = $chunk['full_reasoning'];
|
|
|
+ $usage = isset($chunk['usage']) ? $chunk['usage'] : [];
|
|
|
+ } else {
|
|
|
+ // 逐块yield数据
|
|
|
+ yield $chunk;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ dLog('deepseek')->error('chat流式处理异常: ' . $e->getMessage(), [
|
|
|
+ 'model' => $model,
|
|
|
+ 'anime_id' => $anime_id,
|
|
|
+ 'episode_number' => $episode_number,
|
|
|
+ 'trace' => $e->getTraceAsString()
|
|
|
+ ]);
|
|
|
+ logDB('deepseek', 'error', 'chat流式处理失败', [
|
|
|
+ 'error' => $e->getMessage(),
|
|
|
+ 'model' => $model
|
|
|
+ ]);
|
|
|
+
|
|
|
+ yield [
|
|
|
+ 'type' => 'error',
|
|
|
+ 'episode' => [],
|
|
|
+ 'answer' => '',
|
|
|
+ 'reasoning' => '',
|
|
|
+ 'usage' => [],
|
|
|
+ 'error' => '处理请求时发生异常: ' . $e->getMessage()
|
|
|
+ ];
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
dLog('deepseek')->info('完整内容: '.$fullContent);
|