贡献指南
感谢您对 AISBench 评测工具的关注!我们欢迎所有形式的贡献,包括但不限于代码、文档、问题报告和建议。
目录
任务看板
我们使用 GitHub Issues 来跟踪任务和问题。在开始贡献之前,建议您:
查看现有的 Issues 以了解当前的工作重点
如果是新功能或重大变更,建议先创建一个 Issue 进行讨论
对于 bug 修复,可以直接提交 Pull Request
许可证
AISBench 使用 Apache License 2.0 许可证。通过向本项目贡献代码,您同意您的贡献将在相同的许可证下发布。
所有贡献者必须确保:
您拥有或有权许可您提交的代码
您的贡献不侵犯任何第三方的知识产权
您同意将您的贡献授权给项目维护者
开发
环境设置
Python 版本要求:仅支持 Python 3.10、3.11 或 3.12
克隆仓库:
git clone https://github.com/AISBench/benchmark.git
cd benchmark/
创建开发环境(推荐使用 Conda):
conda create --name ais_bench_dev python=3.10 -y
conda activate ais_bench_dev
安装开发依赖:
# 安装核心依赖
pip3 install -e ./ --use-pep517
# 安装开发依赖(如需要)
pip3 install -r requirements/api.txt
pip3 install -r requirements/extra.txt
代码结构
AISBench 采用基于注册器(Registry)的插件化架构:
核心插件模块:位于
ais_bench/benchmark/目录下models/:模型运行类datasets/:数据集加载器openicl/icl_evaluator: ICL评估器openicl/icl_inferencer: ICL推理器calculators/:性能指标计算器registry.py:注册器定义
配置文件:位于
ais_bench/benchmark/configs/目录下models/:模型配置datasets/:数据集配置summarizers/:结果汇总器配置
插件系统:支持通过 entry_point 机制扩展功能,详见 插件开发指南
开发工作流
创建分支:
git checkout -b feature/your-feature-name
# 或
git checkout -b fix/your-bug-fix
进行开发:编写代码、添加测试、更新文档
提交更改:
git add .
git commit -m "feat: 添加新功能描述"
推送并创建 Pull Request
代码检查(Linting)
在提交代码之前,请确保代码符合项目的代码规范:
Python 代码风格
遵循 PEP 8 代码风格指南
使用 4 个空格进行缩进
行长度建议不超过 120 个字符
使用有意义的变量和函数名
代码格式化工具
建议使用以下工具进行代码格式化:
# 使用 black 进行代码格式化(如果项目配置了)
black ais_bench/
# 使用 isort 进行导入排序(如果项目配置了)
isort ais_bench/
静态检查
在提交前运行基本的 Python 语法检查:
python -m py_compile your_file.py
文档
文档结构
项目文档位于 docs/ 目录下:
source_zh_cn/:中文文档source_en/:英文文档
文档编写规范
Markdown 格式:使用 Markdown 编写文档
中文文档:使用简体中文,语言简洁明了
代码示例:提供完整可运行的代码示例
链接检查:确保所有链接有效
更新文档
添加新功能时,请同步更新相关文档
修改 API 时,请更新对应的文档说明
添加数据集或模型配置时,请提供 README.md 说明
测试
测试结构
测试文件位于 tests/ 目录下:
UT/:单元测试(已集成到CI)
运行测试
安装测试相关依赖
# 运行所有测试
python tests/run_tests.py
# 多进程运行所有测试
python tests/run_tests.py -p 4 # 4个进程
# 运行特定测试文件
pytest tests/UT/test_example.py
编写测试
单元测试:测试单个函数或类的功能
集成测试:测试多个组件的交互
测试命名:使用
test_前缀命名测试函数测试覆盖:新功能应包含相应的测试用例,目标覆盖率不低于 80%
问题(Issues)
报告 Bug
在报告 bug 时,请提供以下信息:
问题描述:清晰描述问题现象
复现步骤:提供可复现的步骤
预期行为:描述期望的行为
实际行为:描述实际发生的行为
环境信息:
Python 版本
操作系统
AISBench 版本
相关依赖版本
日志信息:提供相关的错误日志或堆栈跟踪
功能请求
在提出功能请求时,请说明:
功能描述:详细描述您希望添加的功能
使用场景:说明该功能的使用场景和价值
可能的实现方案:如果有想法,可以提出实现建议
拉取请求(Pull Requests)与代码审查(Code Reviews)
创建 Pull Request
准备工作:
确保代码已通过所有测试
确保代码符合代码规范
更新相关文档
PR 描述:
清晰描述 PR 的目的和变更内容
如果解决了某个 Issue,请使用
Fixes #123格式关联提供测试结果或截图(如适用)
代码审查:
保持 PR 规模适中,便于审查
及时响应审查意见
根据反馈进行修改
审查流程
自动化检查:PR 创建后会自动运行 CI 检查
代码审查:维护者会审查代码
修改反馈:根据审查意见进行修改
合并:审查通过后,维护者会合并 PR
DCO 和 Signed-off-by
AISBench 使用 Developer Certificate of Origin (DCO) 来确保贡献的合法性。
如何签署提交
在提交信息中添加 Signed-off-by 行:
git commit -s -m "feat: 添加新功能"
-s 参数会自动添加 Signed-off-by 行。
Signed-off-by 格式
Signed-off-by: Your Name <your.email@example.com>
含义
通过添加 Signed-off-by,您确认:
贡献是您原创的,或者您有权以开源许可证提交它
您同意贡献在 Apache License 2.0 下发布
PR 标题和分类
标题格式
使用以下格式:
[type][scope]<subject>
其中:
[type]:提交类型,见下方类型说明[scope]:影响范围(可选),如 models、datasets、docs 等<subject>:简短的描述性标题
类型(Type)
[feat]:新功能[fix]:Bug 修复[docs]:文档更新[style]:代码格式调整(不影响功能)[refactor]:代码重构[test]:测试相关[chore]:构建过程或辅助工具的变动[perf]:性能优化
示例
[feat][models]添加新的模型后端支持
[fix][datasets]修复数据集加载错误
[docs][readme]更新安装说明
[test][calculators]添加性能计算器测试
代码质量
代码审查标准
代码审查时会关注以下方面:
功能正确性:代码是否实现了预期功能
代码质量:代码是否清晰、可维护
测试覆盖:是否有足够的测试覆盖
文档完整性:是否更新了相关文档
性能影响:是否对性能有负面影响
向后兼容性:是否破坏了现有功能
最佳实践
单一职责:每个函数/类应该只做一件事
DRY 原则:避免重复代码
注释清晰:为复杂逻辑添加注释
错误处理:妥善处理异常情况
类型提示:建议使用类型提示提高代码可读性
添加或更改组件
添加新的模型后端
参考支持新模型后端
添加新的数据集和精度评估器
添加新的推理器
参考支持新的推理器
重大变更须知
请尽量保持变更简洁。对于重大的架构性变更(>500 行代码,不包括数据/配置/测试),我们期望您:
提前讨论:在 GitHub Issues 中创建讨论,说明变更原因和影响范围
向后兼容:尽量保持向后兼容,或提供迁移指南
文档更新:更新所有相关文档
测试覆盖:确保有充分的测试覆盖
版本说明:在 CHANGELOG 中详细说明变更
重大变更示例
API 接口变更
配置文件格式变更
默认行为变更
移除已弃用的功能
对审查的期望
作为贡献者
耐心等待:审查可能需要一些时间,请耐心等待
积极回应:及时响应审查意见,进行必要的修改
保持礼貌:在讨论中保持专业和礼貌的态度
持续改进:将审查视为学习机会,不断改进代码质量
作为审查者
及时响应:尽快审查 PR,提供建设性反馈
友好沟通:以友好和专业的方式提供反馈
解释原因:解释为什么需要修改,帮助贡献者理解
认可贡献:认可好的贡献,鼓励继续参与
致谢
感谢所有为 AISBench 做出贡献的开发者!您的贡献使这个项目变得更好。
贡献方式
您可以通过以下方式贡献:
🐛 报告 Bug
💡 提出功能建议
📝 改进文档
💻 提交代码
🧪 编写测试
🔍 代码审查
📢 推广项目
贡献者名单
所有贡献者都会在项目中被认可。感谢每一位贡献者的努力!
如有任何问题,请随时在 GitHub Issues 中提出。