chengjie 4 meses atrás
pai
commit
ef5017d72d
2 arquivos alterados com 83 adições e 11 exclusões
  1. 78 7
      src/api/yjbdc/aiController.js
  2. 5 4
      src/util/constant/index.js

+ 78 - 7
src/api/yjbdc/aiController.js

@@ -65,6 +65,10 @@ class VolcesAIProvider extends AIProvider {
65 65
     constructor(version = 'doubao-1-5-pro-32k-250115') {
66 66
         super();
67 67
         
68
+        if (version.indexOf("deepseek")>0){
69
+            version=version.substring(7);
70
+        }
71
+
68 72
         // 获取当前版本的配置,如果版本不存在则使用1.5版本
69 73
         const currentConfig = {
70 74
                 apikey: config.huoshancloud.apikeyHLR,
@@ -295,9 +299,8 @@ class TencentHunyuanAIProvider extends AIProvider {
295 299
 }
296 300
 
297 301
 /**
298
- * 百度文心一言平台实现
302
+ * 百度千帆平台实现
299 303
  */
300
-
301 304
 class BaiduAIProvider extends AIProvider {
302 305
     constructor(model = 'deepseek-v3') {
303 306
         super();
@@ -317,15 +320,81 @@ class BaiduAIProvider extends AIProvider {
317 320
                     "role": "user",
318 321
                     "content": content,
319 322
                 }
320
-            ]
323
+            ],
324
+            "temperature": 0.8,
325
+            "top_p": 0.8,
326
+            "penalty_score": 1
321 327
         };
322 328
 
323 329
         try {
324
-            console.log(`百度云${this.model}`);
325
-            const response = await axios.post(this.url, postJSON, { headers: this.headers });
326
-            return response.data.choices[0].message.content;
330
+            // 增加重试机制
331
+            let retries = 3;
332
+            let lastError = null;
333
+            let backoffTime = 1000; // 初始等待时间1秒
334
+            
335
+            while (retries > 0) {
336
+                try {
337
+                    console.log(`百度千帆 ${this.model}`);
338
+                    const response = await axios.post(this.url, postJSON, { 
339
+                        headers: this.headers,
340
+                        timeout: 60000 // 60秒超时
341
+                    });
342
+                    
343
+                    // 处理响应格式
344
+                    if (response.data?.choices?.[0]?.message?.content) {
345
+                        return response.data.choices[0].message.content;
346
+                    } else if (response.data?.result) {
347
+                        return response.data.result;
348
+                    } else {
349
+                        console.error("百度千帆API响应格式异常:", response.data);
350
+                        throw new Error("Unexpected response format from Baidu API");
351
+                    }
352
+                } catch (error) {
353
+                    lastError = error;
354
+                    
355
+                    // 特别处理429错误(请求过多)
356
+                    if (error.response && error.response.status === 429) {
357
+                        console.warn(`百度千帆API限流,等待${backoffTime/1000}秒后重试...`);
358
+                        await new Promise(resolve => setTimeout(resolve, backoffTime));
359
+                        backoffTime *= 2; // 指数退避策略
360
+                        retries--;
361
+                        continue;
362
+                    }
363
+                    
364
+                    // 处理其他错误
365
+                    retries--;
366
+                    if (retries > 0) {
367
+                        console.warn(`API请求失败,剩余重试次数: ${retries},等待${backoffTime/1000}秒后重试...`);
368
+                        await new Promise(resolve => setTimeout(resolve, backoffTime));
369
+                        backoffTime *= 2; // 指数退避策略
370
+                        continue;
371
+                    }
372
+                    
373
+                    // 详细记录错误信息
374
+                    if (error.response) {
375
+                        console.error("百度千帆API错误响应:", {
376
+                            status: error.response.status,
377
+                            data: error.response.data,
378
+                            headers: error.response.headers
379
+                        });
380
+                    } else if (error.request) {
381
+                        console.error("百度千帆API请求错误:", {
382
+                            method: error.config.method,
383
+                            url: error.config.url,
384
+                            headers: error.config.headers,
385
+                            data: error.config.data
386
+                        });
387
+                    } else {
388
+                        console.error("百度千帆API设置错误:", error.message);
389
+                    }
390
+                    
391
+                    throw error;
392
+                }
393
+            }
394
+            
395
+            throw lastError || new Error("百度千帆API请求失败,已达到最大重试次数");
327 396
         } catch (error) {
328
-            console.error("OpenAI API error:", error);
397
+            console.error("Baidu API error:", error);
329 398
             throw error;
330 399
         }
331 400
     }
@@ -365,6 +434,8 @@ class AIProviderFactory {
365 434
                 return new BaiduAIProvider();
366 435
             case 'baidu-deepseek-r1':
367 436
                 return new BaiduAIProvider("deepseek-r1");
437
+            case 'baidu-ernie-4.5-turbo-vl-32k-preview':
438
+                return new BaiduAIProvider("ernie-4.5-turbo-vl-32k-preview");
368 439
             default:
369 440
                 return new VolcesAIProvider(providerLower); // 默认使用火山云1.5
370 441
         }

+ 5 - 4
src/util/constant/index.js

@@ -26,11 +26,12 @@ export default {
26 26
             {Version:"1.0",BuildSecond:30,Model:"doubao-1-5-pro-32k-250115",Content:"词句丰富,结构简明\n平均30秒生成",CSS:"Selected"},
27 27
             {Version:"1.5",BuildSecond:60,Model:"doubao-seed-1-6-250615",Content:"深度表达,更多要素\n平均60秒生成",CSS:""},
28 28
             {Version:"x1",BuildSecond:60,Model:"xf-yun-spark-x1",Content:"讯飞sparkX1\n平均60秒生成",CSS:""},
29
-            {Version:"qwp",BuildSecond:30,Model:"ali-qwen-plus",Content:"通义千问plus\n平均30秒生成",CSS:""},
30
-            {Version:"qwm",BuildSecond:45,Model:"ali-qwen-plus",Content:"通义千问Max\n平均45秒生成",CSS:""},
29
+            {Version:"qwp",BuildSecond:30,Model:"ali-qwen-plus",Content:"阿里千问plus\n平均30秒生成",CSS:""},
30
+            {Version:"qwm",BuildSecond:45,Model:"ali-qwen-plus",Content:"阿里千问Max\n平均45秒生成",CSS:""},
31 31
             {Version:"hyt",BuildSecond:30,Model:"tencent-hunyuan-turbos",Content:"腾讯混元turbos\n平均30秒生成",CSS:""},
32
-            {Version:"bd3",BuildSecond:30,Model:"baidu-deepseek-v3",Content:"百度deepseek_v3\n平均30秒生成",CSS:""},
33
-            {Version:"bdr",BuildSecond:60,Model:"baidu-deepseek-r1",Content:"百度deepseek_r1\n平均60秒生成",CSS:""},
32
+            {Version:"dp3",BuildSecond:30,Model:"doubao-deepseek-v3-250324",Content:"字节deepseek_v3\n平均30秒生成",CSS:""},
33
+            {Version:"dpr",BuildSecond:60,Model:"doubao-deepseek-r1-250528",Content:"字节deepseek_r1\n平均60秒生成",CSS:""},
34
+            // {Version:"bde",BuildSecond:60,Model:"baidu-ernie-4.5-turbo-vl-32k-preview",Content:"百度ernie4.5turbo\n平均60秒生成",CSS:""},
34 35
         ];
35 36
 
36 37
         return result;