Files
AI-Proxy-Worker/docs/Contributing.md

278 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 贡献指南
<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 改进
- 🔧 基础设施
- 🌍 翻译
## ❓ 获取帮助
### 社区支持
- [💡 Discussions](https://github.com/qinfuyao/AI-Proxy-Worker/discussions) - 一般问题
- [📋 Issues](https://github.com/qinfuyao/AI-Proxy-Worker/issues) - Bug 报告和功能请求
- [Discord/Slack] - 实时聊天(如果可用)
### 代码审查流程
1. 所有 PR 需要至少一次审查
2. 维护者将在 48 小时内审查
3. 及时处理反馈
4. 合并前压缩提交
## 📋 贡献清单
提交 PR 前,确保:
- [ ] 代码遵循项目风格指南
- [ ] 所有测试通过
- [ ] 如需要已更新文档
- [ ] 提交消息具有描述性
- [ ] PR 描述解释了更改
- [ ] 代码中没有敏感信息
- [ ] 功能在生产环境中正常工作
---
**感谢你为 AI Proxy Worker 做出贡献!** 🎉
你的贡献让这个项目对每个人都更好。