共计 1421 个字符,预计需要花费 4 分钟才能阅读完成。
背景与痛点
最近在 Edge 浏览器环境中调用 ChatGPT API 时,经常遇到访问失败的问题。经过排查,主要痛点集中在以下几个方面:

- 网络限制 :很多企业网络会屏蔽 OpenAI 的 API 域名
- 跨域问题 :前端直接调用 API 时经常遇到 CORS 错误
- 认证复杂 :API 密钥在前端暴露存在安全隐患
- 稳定性差 :直连国际 API 容易受网络波动影响
技术选型对比
针对这些问题,我调研了几种常见解决方案:
- 直接调用
- 优点:实现简单
-
缺点:面临所有上述痛点
-
传统反向代理 (Nginx)
- 优点:性能好
-
缺点:需要维护服务器,配置复杂
-
Azure Functions 代理
- 优点:无服务器架构,自动扩容
- 缺点:冷启动延迟
综合考虑开发和维护成本,最终选择了 Azure Functions 方案。
核心实现
以下是基于 Node.js 的 Azure Functions 实现代码:
const axios = require('axios');
const jwt = require('jsonwebtoken');
module.exports = async function (context, req) {
// JWT 验证
const token = req.headers.authorization?.split(' ')[1];
try {jwt.verify(token, process.env.JWT_SECRET);
} catch (err) {
context.res = {
status: 401,
body: 'Unauthorized'
};
return;
}
// 请求转发
try {
const response = await axios({
method: req.method,
url: 'https://api.openai.com/v1/chat/completions',
headers: {'Authorization': `Bearer ${process.env.OPENAI_KEY}`,
'Content-Type': 'application/json'
},
data: req.body,
timeout: 15000
});
context.res = {
status: response.status,
body: response.data
};
} catch (error) {
// 错误处理
context.res = {
status: error.response?.status || 500,
body: error.response?.data || {error: 'Proxy Error'}
};
}
}
性能优化
在实际部署时,我采取了以下优化措施:
- 缓存策略
- 对常见查询结果缓存 5 分钟
-
使用 Redis 作为缓存层
-
连接池配置
- 保持与 OpenAI API 的长连接
-
设置合理的 maxSockets 数量
-
超时设置
- API 调用超时设为 15 秒
- 重试机制最多 3 次
安全考量
安全方面需要注意以下几点:
- 永远不要在前端暴露 API 密钥
- 实现请求限流 (如每分钟 60 次)
- 日志中脱敏处理敏感信息
- 使用 HTTPS 加密所有通信
避坑指南
在实施过程中,我遇到了这些问题:
- CORS 配置错误
-
解决方案:确保 Function App 正确配置 CORS
-
冷启动延迟
-
解决方案:设置定时 ping 保持实例活跃
-
JWT 过期问题
-
解决方案:实现 token 自动刷新机制
-
网络超时
- 解决方案:调整 Azure Functions 超时设置
总结与扩展
这个方案不仅适用于 Edge 环境,还可以推广到:
- 企业内部系统集成
- 移动端应用
- 物联网设备
未来可以考虑加入请求批处理、智能路由等高级功能。希望这个方案能帮助大家解决类似问题。
正文完
发表至: 技术分享
近一天内
