2025-08-17 19:59:10 +08:00
|
|
|
|
# 贡献指南
|
|
|
|
|
|
|
|
|
|
|
|
<div align="center">
|
|
|
|
|
|
|
|
|
|
|
|
**🌍 Language / 语言**
|
|
|
|
|
|
|
|
|
|
|
|
[🇺🇸 English](./Contributing.en.md) | [🇨🇳 中文](./Contributing.md)
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
感谢你对 AI Proxy Worker 项目的关注!本指南将帮助你了解如何参与项目开发。
|
|
|
|
|
|
|
|
|
|
|
|
## 🚀 快速开始
|
|
|
|
|
|
|
|
|
|
|
|
### 前置要求
|
|
|
|
|
|
- Node.js 18+ 和 npm
|
|
|
|
|
|
- Git
|
|
|
|
|
|
- Cloudflare 账户(用于测试)
|
|
|
|
|
|
- JavaScript 和 Cloudflare Workers 基础知识
|
|
|
|
|
|
|
|
|
|
|
|
### 开发环境设置
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 克隆仓库
|
|
|
|
|
|
git clone https://github.com/qinfuyao/AI-Proxy-Worker.git
|
|
|
|
|
|
cd ai-proxy-worker
|
|
|
|
|
|
|
|
|
|
|
|
# 安装依赖
|
|
|
|
|
|
npm install -g wrangler
|
|
|
|
|
|
|
|
|
|
|
|
# 登录 Cloudflare
|
|
|
|
|
|
wrangler login
|
|
|
|
|
|
|
|
|
|
|
|
# 设置开发环境
|
|
|
|
|
|
cp wrangler.toml.example wrangler.toml
|
|
|
|
|
|
# 编辑 wrangler.toml 配置你的设置
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🔧 开发流程
|
|
|
|
|
|
|
|
|
|
|
|
### 1. Fork 和 Clone
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 在 GitHub 上 Fork 仓库,然后克隆你的 fork
|
|
|
|
|
|
git clone https://github.com/qinfuyao/AI-Proxy-Worker.git
|
|
|
|
|
|
cd ai-proxy-worker
|
|
|
|
|
|
|
|
|
|
|
|
# 添加上游远程仓库
|
|
|
|
|
|
git remote add upstream https://github.com/original-owner/ai-proxy-worker.git
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 创建功能分支
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 创建并切换到新分支
|
|
|
|
|
|
git checkout -b feature/your-feature-name
|
|
|
|
|
|
|
|
|
|
|
|
# 或者修复 bug
|
|
|
|
|
|
git checkout -b fix/bug-description
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 本地开发
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 启动本地开发服务器
|
|
|
|
|
|
wrangler dev
|
|
|
|
|
|
|
|
|
|
|
|
# 测试你的更改
|
|
|
|
|
|
curl -X POST http://localhost:8787/chat \
|
|
|
|
|
|
-H "Content-Type: application/json" \
|
|
|
|
|
|
-d '{"model": "deepseek-chat", "messages": [{"role": "user", "content": "测试"}]}'
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 4. 测试
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 运行测试(如果可用)
|
|
|
|
|
|
npm test
|
|
|
|
|
|
|
|
|
|
|
|
# 手动测试清单:
|
|
|
|
|
|
# - 基本聊天功能
|
|
|
|
|
|
# - 流式响应
|
|
|
|
|
|
# - 错误处理
|
|
|
|
|
|
# - 身份验证
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 5. 提交和推送
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 添加更改
|
|
|
|
|
|
git add .
|
|
|
|
|
|
|
|
|
|
|
|
# 使用描述性消息提交
|
|
|
|
|
|
git commit -m "feat: 添加新 AI 模型支持"
|
|
|
|
|
|
|
|
|
|
|
|
# 推送到你的 fork
|
|
|
|
|
|
git push origin feature/your-feature-name
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 6. 创建 Pull Request
|
|
|
|
|
|
1. 在 GitHub 上访问你的 fork
|
|
|
|
|
|
2. 点击 "New Pull Request"
|
|
|
|
|
|
3. 填写 PR 模板
|
|
|
|
|
|
4. 等待审查
|
|
|
|
|
|
|
|
|
|
|
|
## 📝 代码规范
|
|
|
|
|
|
|
|
|
|
|
|
### JavaScript 风格
|
|
|
|
|
|
- 使用现代 ES6+ 特性
|
|
|
|
|
|
- 保持一致的缩进(2个空格)
|
|
|
|
|
|
- 使用有意义的变量名
|
|
|
|
|
|
- 为复杂逻辑添加注释
|
|
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
|
// 好的示例
|
|
|
|
|
|
const handleChatRequest = async (request, env) => {
|
|
|
|
|
|
const { messages, model } = await request.json();
|
|
|
|
|
|
|
|
|
|
|
|
// 验证必需字段
|
|
|
|
|
|
if (!messages || !Array.isArray(messages)) {
|
|
|
|
|
|
throw new Error('消息必须是数组格式');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return await processChat(messages, model, env);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// 避免这样写
|
|
|
|
|
|
const h = async (r, e) => {
|
|
|
|
|
|
const d = await r.json();
|
|
|
|
|
|
return await p(d.m, d.mod, e);
|
|
|
|
|
|
};
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 错误处理
|
|
|
|
|
|
始终提供有意义的错误消息:
|
|
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
|
// 好的示例
|
|
|
|
|
|
if (!env.DEEPSEEK_API_KEY) {
|
|
|
|
|
|
return new Response(JSON.stringify({
|
|
|
|
|
|
error: 'configuration_error',
|
|
|
|
|
|
message: '需要设置 DEEPSEEK_API_KEY 环境变量',
|
|
|
|
|
|
timestamp: new Date().toISOString()
|
|
|
|
|
|
}), {
|
|
|
|
|
|
status: 500,
|
|
|
|
|
|
headers: { 'Content-Type': 'application/json' }
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 安全最佳实践
|
|
|
|
|
|
- 永远不要记录敏感信息(API 密钥、用户数据)
|
|
|
|
|
|
- 验证所有输入参数
|
|
|
|
|
|
- 使用适当的 HTTP 状态码
|
|
|
|
|
|
- 在适当的地方实施速率限制
|
|
|
|
|
|
|
|
|
|
|
|
## 🐛 Bug 报告
|
|
|
|
|
|
|
|
|
|
|
|
### 报告前检查
|
|
|
|
|
|
1. 检查现有 issues
|
|
|
|
|
|
2. 使用最新版本测试
|
|
|
|
|
|
3. 能够一致地重现问题
|
|
|
|
|
|
|
|
|
|
|
|
### Bug 报告模板
|
|
|
|
|
|
```markdown
|
|
|
|
|
|
**Bug 描述**
|
|
|
|
|
|
清楚地描述 bug 是什么。
|
|
|
|
|
|
|
|
|
|
|
|
**重现步骤**
|
|
|
|
|
|
1. 使用配置 X 部署 worker
|
|
|
|
|
|
2. 发送载荷 Y 的请求
|
|
|
|
|
|
3. 观察到错误 Z
|
|
|
|
|
|
|
|
|
|
|
|
**预期行为**
|
|
|
|
|
|
应该发生什么。
|
|
|
|
|
|
|
|
|
|
|
|
**环境信息**
|
|
|
|
|
|
- Cloudflare Workers 版本
|
|
|
|
|
|
- 使用的浏览器/客户端
|
|
|
|
|
|
- 任何相关配置
|
|
|
|
|
|
|
|
|
|
|
|
**附加上下文**
|
|
|
|
|
|
日志、截图或其他有用信息。
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 💡 功能请求
|
|
|
|
|
|
|
|
|
|
|
|
### 功能请求模板
|
|
|
|
|
|
```markdown
|
|
|
|
|
|
**功能描述**
|
|
|
|
|
|
清楚地描述你希望看到的功能。
|
|
|
|
|
|
|
|
|
|
|
|
**使用场景**
|
|
|
|
|
|
解释为什么这个功能有用。
|
|
|
|
|
|
|
|
|
|
|
|
**建议实现**
|
|
|
|
|
|
如果你对如何实现有想法。
|
|
|
|
|
|
|
|
|
|
|
|
**考虑的替代方案**
|
|
|
|
|
|
你考虑过的其他解决方案。
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 📖 文档
|
|
|
|
|
|
|
|
|
|
|
|
### 写作指南
|
|
|
|
|
|
- 使用清晰、简洁的语言
|
|
|
|
|
|
- 提供实用示例
|
|
|
|
|
|
- 包含中英文版本
|
|
|
|
|
|
- 测试所有代码示例
|
|
|
|
|
|
|
|
|
|
|
|
### 文档结构
|
|
|
|
|
|
```
|
|
|
|
|
|
docs/
|
|
|
|
|
|
├── Installation.md/en.md # 安装指南
|
|
|
|
|
|
├── Configuration.md/en.md # 配置选项
|
|
|
|
|
|
├── API-Reference.md/en.md # API 文档
|
|
|
|
|
|
├── Examples.md/en.md # 使用示例
|
|
|
|
|
|
├── Troubleshooting.md/en.md # 常见问题
|
|
|
|
|
|
└── Contributing.md/en.md # 本文件
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🔄 发布流程
|
|
|
|
|
|
|
|
|
|
|
|
### 版本编号
|
|
|
|
|
|
我们遵循 [语义化版本](https://semver.org/lang/zh-CN/):
|
|
|
|
|
|
- `主版本.次版本.修订版本`
|
|
|
|
|
|
- 主版本:不兼容的 API 修改
|
|
|
|
|
|
- 次版本:向下兼容的功能性新增
|
|
|
|
|
|
- 修订版本:向下兼容的问题修正
|
|
|
|
|
|
|
|
|
|
|
|
### 发布清单
|
|
|
|
|
|
- [ ] 更新 `wrangler.toml` 中的版本
|
|
|
|
|
|
- [ ] 更新 CHANGELOG.md
|
|
|
|
|
|
- [ ] 测试所有功能
|
|
|
|
|
|
- [ ] 更新文档
|
|
|
|
|
|
- [ ] 创建发布说明
|
|
|
|
|
|
- [ ] 标记发布
|
|
|
|
|
|
|
|
|
|
|
|
## 🏆 致谢
|
|
|
|
|
|
|
|
|
|
|
|
### 贡献者
|
|
|
|
|
|
所有贡献者将在以下地方得到认可:
|
|
|
|
|
|
- README.md 贡献者部分
|
|
|
|
|
|
- 发布说明
|
|
|
|
|
|
- GitHub 贡献者页面
|
|
|
|
|
|
|
|
|
|
|
|
### 贡献类型
|
|
|
|
|
|
- 🐛 Bug 修复
|
|
|
|
|
|
- ✨ 新功能
|
|
|
|
|
|
- 📝 文档
|
|
|
|
|
|
- 🎨 UI/UX 改进
|
|
|
|
|
|
- 🔧 基础设施
|
|
|
|
|
|
- 🌍 翻译
|
|
|
|
|
|
|
|
|
|
|
|
## ❓ 获取帮助
|
|
|
|
|
|
|
|
|
|
|
|
### 社区支持
|
2025-08-17 20:17:13 +08:00
|
|
|
|
- [💡 Discussions](https://github.com/qinfuyao/AI-Proxy-Worker/discussions) - 一般问题
|
|
|
|
|
|
- [📋 Issues](https://github.com/qinfuyao/AI-Proxy-Worker/issues) - Bug 报告和功能请求
|
2025-08-17 19:59:10 +08:00
|
|
|
|
- [Discord/Slack] - 实时聊天(如果可用)
|
|
|
|
|
|
|
|
|
|
|
|
### 代码审查流程
|
|
|
|
|
|
1. 所有 PR 需要至少一次审查
|
|
|
|
|
|
2. 维护者将在 48 小时内审查
|
|
|
|
|
|
3. 及时处理反馈
|
|
|
|
|
|
4. 合并前压缩提交
|
|
|
|
|
|
|
|
|
|
|
|
## 📋 贡献清单
|
|
|
|
|
|
|
|
|
|
|
|
提交 PR 前,确保:
|
|
|
|
|
|
- [ ] 代码遵循项目风格指南
|
|
|
|
|
|
- [ ] 所有测试通过
|
|
|
|
|
|
- [ ] 如需要已更新文档
|
|
|
|
|
|
- [ ] 提交消息具有描述性
|
|
|
|
|
|
- [ ] PR 描述解释了更改
|
|
|
|
|
|
- [ ] 代码中没有敏感信息
|
|
|
|
|
|
- [ ] 功能在生产环境中正常工作
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
**感谢你为 AI Proxy Worker 做出贡献!** 🎉
|
|
|
|
|
|
|
|
|
|
|
|
你的贡献让这个项目对每个人都更好。
|