TL;DR: 使用 axios 和 dotenv 解决 APIConnectionError 问题。
问题描述:
在本地服务器运行 Next.js 项目时,调用 OpenAI API 或 Hugging face API 会报错 APIConnectionError: Connection error
。调用 Hugging Face 的其他模型 API 时,同样报错。然而,部署在 Vercel 上可以正常运行。
项目环境:
- 编程语言:JavaScript 和 TypeScript
- 框架:Next.js 和 React
- 地理位置:中国大陆
错误原因分析
错误原因分析:
通过谷歌查询,初步判断是 Node.js 的代理问题。附 OpenAI 官方文档:APIConnectionError
尝试过的解决方案(无效):
在 powershell 上配置代理
1 2 3
| $env:HTTP_PROXY="http://127.0.0.1:33210" $env:HTTPS_PROXY="http://127.0.0.1:33210" $env:ALL_PROXY="socks5://127.0.0.1:33211"
|
但发现这样配置了之后,仍然出现APIConnectionError: Connection error报错。
很多解决方案通过修改 openai 的 Python 库来解决,但是无法用在JavaScript 和 Next.js上。
解决方案概述:
使用axios 和dotenv即可解决问题,以下是具体步骤:
1.在 Next.js 项目中安装 axios 和 dotenv:
1
| npm install axios dotenv
|
2.在需要调用API的场景,使用axios进行API请求,并同时配置代理。
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| import * as fs from 'fs'; import * as path from 'path'; import axios from 'axios'; import * as dotenv from 'dotenv';
dotenv.config();
async function query(filePath: string) { try { const data = fs.readFileSync(filePath); // 读取文件内容 const response = await axios.post( 'https://api-inference.huggingface.co/models/openai/whisper-tiny', data, // 文件内容作为请求体 { headers: { "Accept":"application/json", Authorization: `Bearer hf_xxxxxxxxxxxxxxxxxxxxxxxxxx`, 'Content-Type': 'audio/wav', // 确保内容类型是音频文件 }, proxy: { protocol: 'http', host: '127.0.0.1', port: 33210,// 这里应该根据使用的代理,修改成相应的port }, timeout: 10000, // 设置超时时间为10秒 } ); return response.data; } catch (error) { if (axios.isAxiosError(error)) { console.error('Axios error:', error.response?.data); } else { console.error('Unexpected error:', error); } throw error; } }
// 调用函数并传入文件路径 query(path.resolve(__dirname, "C:\\Users\\caoca\\Music\\sample1.wav")) .then((response) => { console.log(JSON.stringify(response)); }) .catch((error) => { console.error(error); });
|
结论:
通过使用 axios 和 dotenv,可以有效解决 Next.js 项目中调用 OpenAI API 或 Hugging face API 报错的问题,提升开发体验和项目的稳定性。