使用Chainlink Functions调用API时出现AbortError问题求助
解决Chainlink Functions调用DALL-E-3出现AbortError的问题
这个AbortError: The signal has been aborted确实是超时导致的——Chainlink Functions默认执行超时时间为5秒,但DALL-E-3生成1024x1024尺寸的图片通常需要10-15秒,超出限制后请求会被强制终止,所以会出现扣费却无有效响应的情况。
下面是具体解决步骤:
1. 延长HTTP请求超时时间
在Functions.makeHttpRequest中显式设置timeout参数,将超时时间调整至15秒(可根据实际生成速度微调):
const openAIResponse = await Functions.makeHttpRequest({ url: "https://api.openai.com/v1/images/generations", method: "POST", headers: { Authorization: `Bearer ${secrets.apiKey}`, "Content-Type": "application/json", }, data: postData, timeout: 15000 // 新增:设置15秒超时阈值 });
2. 优化生成参数缩短耗时
如果延长超时后仍有问题,可以先降低图片尺寸测试,512x512尺寸的生成速度远快于1024x1024:
const postData = { model:"dall-e-3", prompt: _prompt, size:"512x512", // 调整为小尺寸快速验证 n:1, };
3. 增强错误排查逻辑
当前错误处理仅判断openAIResponse.error,建议补充状态码检查和完整响应日志,方便定位问题:
if (openAIResponse.error || openAIResponse.status !== 200) { console.log("完整响应内容:", openAIResponse); // 打印完整响应便于排查 throw new Error(`请求失败:${JSON.stringify(openAIResponse.error || openAIResponse.data)}`); }
修改后的完整脚本
const _prompt = args[0]; const postData = { model:"dall-e-3", prompt: _prompt, size:"512x512", n:1, }; const openAIResponse = await Functions.makeHttpRequest({ url: "https://api.openai.com/v1/images/generations", method: "POST", headers: { Authorization: `Bearer ${secrets.apiKey}`, "Content-Type": "application/json", }, data: postData, timeout: 15000 }); if (openAIResponse.error || openAIResponse.status !== 200) { console.log("完整响应内容:", openAIResponse); throw new Error(`请求失败:${JSON.stringify(openAIResponse.error || openAIResponse.data)}`); } const result = openAIResponse.data.data[0].url; console.log(result); return Functions.encodeString(result);
先按此方案测试,小尺寸+延长超时基本能解决超时问题。若仍报错,查看控制台打印的完整响应,可进一步精准定位问题。
内容的提问来源于stack exchange,提问作者Gianmaria Carnazzi
相关产品推荐
相关产品推荐

