|
|
@@ -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
|
}
|