打包之前 百度 “ERNIE-Speed-128K” 和阿里云 "qwen-turbo"都能正常提问,打包以后只有 阿里云 "qwen-turbo"能正常提问, 百度 "ERNIE-Speed-128K"则抛出错误: “Error: Cannot find module ‘dotenv’”,经查 ‘dotenv’ 是安装了的,而且卸载,再安装几次仍是不行,追踪发现问题来自百度 QianfanProvider 实例初始化时,获取默认参数对象出错,要调用’dotenv’,总是找不的,造成 QianfanProvider 初始化失败,无法发出请求,我注意到您课上的 @baiducloud/qianfan 是 ^0.1.6,我现在的 @baiducloud/qianfan 是 ^0.2.3。向AI提问,试了几种方法都不行,请问老师,打包以后问题怎么解决?
constructor(accessKey: string, secretKey: string) {
super();
const config = {
QIANFAN_ACCESS_KEY: accessKey,
QIANFAN_SECRET_KEY: secretKey,
ENABLE_OAUTH: true,
};
try {
console.log("Initializing QianfanProvider with config:", config);
// 就是这里,打包以后初始化不能完成,开发模式下运行没问题
this.client = new ChatCompletion(config);
console.log("QianfanProvider initialized successfully");
} catch (error) {
console.error("Detailed error:", {
message: error.message,
stack: error.stack,
config: config,
});
throw error;
}
}
配置的3个是关键参数,QIANFAN_ACCESS_KEY QIANFAN_SECRET_KEY ENABLE_OAUTH,打印出来 ChatCompletion的默认参数很多,如下代码,是获取默认参数获取不到,初始化失败。
provider==> QianfanProvider {
client: ChatCompletion {
headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
access_token: '',
bearer_token: '',
expires_in: 0,
version: undefined,
qianfanAk: '',
qianfanSk: '',
appid: '',
qianfanAccessKey: 'xxxxxxxxxxxxxxx',
qianfanSecretKey: 'xxxxxxxxxxxxxxxxxxxxxxx',
Endpoint: undefined,
qianfanBaseUrl: 'https://aip.baidubce.com',
qianfanConsoleApiBaseUrl: 'https://qianfan.baidubce.com',
qianfanV2BaseUrl: 'https://qianfan.baidubce.com/v2/chat/completions',
qianfanLlmApiRetryTimeout: '600000',
qianfanLlmApiRetryBackoffFactor: '0',
qianfanLlmApiRetryCount: '1',
enableOauth: true,
controller: AbortController { signal: AbortSignal { aborted: false } },
fetchInstance: Fetch$2 {
maxRetries: 1,
timeout: 600000,
backoffFactor: 0,
retryMaxWaitInterval: NaN,
rateLimiter: [RateLimiter],
tokenLimiter: [TokenLimiter]
}
}
@baiducloud/qianfan包里面 getDefaultConfig 需要依赖 dotenv
// node_modules\@baiducloud\qianfan\src\utils.ts
export function getDefaultConfig(): DefaultConfig {
const envVariables = Object.keys(DEFAULT_CONFIG);
if (getCurrentEnvironment() === 'browser') {
return {...DEFAULT_CONFIG};
}
require('dotenv').config();
const obj: Record<string, string> = {};
for (const key of envVariables) {
const value = process.env[key];
if (value !== undefined) {
obj[key] = value;
}
}
return Object.assign({}, DEFAULT_CONFIG, obj);
}
文心一言/通义千问/Deepseek/ Claude/Cursor与Vue3、Electron
了解课程