OpaceDigitalAgency/task-smasher
GitHub: OpaceDigitalAgency/task-smasher
该项目基于 Netlify Functions 实现 OpenAI API 的安全代理,解决前端直接调用时 API Key 泄露和请求滥用的问题。
Stars: 1 | Forks: 0
# 使用 Netlify Functions 的 OpenAI 代理
本项目使用 Netlify Functions 实现了一个安全的 OpenAI API 代理,并带有速率限制(每个 IP 每小时 5 次请求)。
## 功能
- ✅ 安全地将请求代理到 OpenAI API
- 🔒 在服务器端保护您的 API key 安全
- ⏱️ 速率限制:每个 IP 地址每小时 5 次请求
- 📊 在响应 header 中返回速率限制信息
- 🛡️ 错误处理与验证
## 项目结构
```
├── netlify/
│ └── functions/
│ ├── openai-proxy.ts # Netlify function that proxies OpenAI requests
│ └── README.md # Detailed function documentation
├── src/
│ ├── components/
│ │ └── OpenAIExample.tsx # Example React component using the proxy
│ └── utils/
│ └── openaiService.ts # Client utility for interacting with the proxy
├── netlify.toml # Netlify configuration
└── .env.example # Template for environment variables
```
## 设置说明
### 1. 环境变量
基于 `.env.example` 模板创建一个 `.env` 文件:
```
OPENAI_API_KEY=your_openai_api_key_here
```
在生产环境部署时,请将您的 OpenAI API key 添加到您的 Netlify 环境变量中:
1. 进入您的 Netlify 站点仪表板
2. 导航至 Site settings > Environment variables
3. 添加一个新变量:
- Key:`OPENAI_API_KEY`
- Value:您的 OpenAI API key
### 2. 本地开发
安装依赖:
```
npm install
```
启动开发服务器:
```
npm run dev
```
这将同时启动 Vite 开发服务器和 Netlify Functions 开发服务器。
### 3. 部署
部署到 Netlify:
```
npm run build
netlify deploy --prod
```
## 用法
### 客户端集成
在您的组件中导入 OpenAIService 工具:
```
import OpenAIService from '../utils/openaiService';
// Simple completion
const response = await OpenAIService.getCompletion('Your prompt here');
// Advanced usage
const { data, rateLimit } = await OpenAIService.createChatCompletion({
model: 'gpt-3.5-turbo',
messages: [{ role: 'user', content: 'Your prompt here' }],
});
```
### 示例组件
本项目包含一个 `OpenAIExample` 组件,用于演示如何使用 OpenAI 代理。您可以在您的应用程序中导入并使用该组件:
```
import OpenAIExample from './components/OpenAIExample';
function App() {
return (
);
}
```
## 速率限制
该代理实现了每个 IP 地址每小时 5 次请求的速率限制。这是通过 Netlify 函数中的内存存储来实现的。
速率限制信息会在响应 header 中返回:
- `X-RateLimit-Limit`:每小时允许的最大请求数 (5)
- `X-RateLimit-Remaining`:当前时间窗口内剩余的请求数
- `X-RateLimit-Reset`:速率限制重置的 ISO 时间戳
了解更多详情,请参阅 [函数文档](netlify/functions/README.md)。
## 安全注意事项
- 您的 OpenAI API key 作为环境变量被安全存储,绝不会暴露给客户端
- 所有请求在转发到 OpenAI 之前都会进行验证
- 速率限制有助于防止滥用和产生过高的费用
## 自定义
要修改速率限制设置,请编辑 `netlify/functions/openai-proxy.ts` 中的常量:
```
const RATE_LIMIT = 5; // Number of requests per window
const RATE_LIMIT_WINDOW = 60 * 60 * 1000; // Window size in milliseconds (1 hour)
```
对于具有大流量的生产环境,建议考虑使用 Redis 或 DynamoDB 来实现更持久的速率限制解决方案。
### 我们的服务
- **网页设计与开发** - 专业、响应式的网站
- **Next.js 与 React 开发** - 现代化的 Web 应用程序
- **前端开发** - 前沿的用户界面
- **WordPress 开发** - 定制主题与插件
- **电子商务解决方案** - 可扩展的在线商店
### 联系我们
- 🌐 网站:[opace.agency](https://opace.agency)
- 📧 服务:[网页设计与开发](https://opace.agency/services/web-design)
- 💼 GitHub:[@OpaceDigitalAgency](https://github.com/OpaceDigitalAgency)
- 📍 位置:英国,伯明翰
标签:API网关, Netlify Functions, OpenAI, React, Syscall, Syscalls, TypeScript, Web开发, 代理服务, 内存规避, 安全插件, 自动化攻击, 限流