ART框架代码风格指南:保持项目一致性的编码规范

ART框架代码风格指南:保持项目一致性的编码规范

【免费下载链接】ART OpenPipe ART (Agent Reinforcement Trainer): train LLM agents 【免费下载链接】ART 项目地址: https://gitcode.com/GitHub_Trending/art32/ART

在开源项目协作中,统一的代码风格是提升开发效率、降低维护成本的关键因素。本文将详细介绍ART(Agent Reinforcement Trainer)框架的代码风格规范,帮助开发者编写符合项目标准的高质量代码。

代码格式化与 linting 工具

ART 项目采用 ruff 作为代码格式化和 linting 的主要工具。ruff 是一个用 Rust 编写的超快 Python 代码检查工具,集成了格式化、静态分析等多种功能。

工具使用方法

项目提供了统一的代码质量检查脚本,开发者在提交代码前必须运行:

# 运行所有代码质量检查(格式化、linting 和依赖同步)
./scripts/run_checks.sh

# 自动修复可修复的问题
./scripts/run_checks.sh --fix

该脚本会执行以下检查:

  1. 使用 ruff 检查代码格式化
  2. 使用 ruff 进行 linting 分析
  3. 验证 uv.lockpyproject.toml 的同步性

这些检查会在 CI 流程中自动运行,任何未通过检查的 PR 将无法合并。

配置文件

ruff 的具体规则配置可以在项目根目录的 pyproject.toml 文件中找到。如需添加自定义规则或修改现有规则,请提交 PR 并说明修改理由。

Python 编码规范

文件结构与命名

ART 项目遵循以下文件结构约定:

  • 源代码放在 src/art/ 目录下
  • 示例代码放在 examples/ 目录下
  • 开发相关工具放在 dev/ 目录下
  • 测试代码放在 tests/ 目录下

文件和目录命名规则:

  • Python 文件:使用小写字母和下划线,如 trajectory_logging.py
  • 目录:使用小写字母和下划线,如 tokenize_trajectory
  • 类名:使用 PascalCase,如 TrajectoryGroup
  • 函数和变量:使用 snake_case,如 tokenize_trajectory

代码组织

函数定义规范

ART 框架中的函数定义遵循以下模式:

def tokenize_trajectory(
    tokenizer: "PreTrainedTokenizerBase",
    history: History,
    advantage: float,
    allow_training_without_logprobs: bool,
) -> TokenizedResult | None:
    # 函数实现
    pass

关键点:

  • 参数每行一个,便于添加注释
  • 明确指定参数和返回值类型
  • 使用类型别名提高可读性,如 TokenizedResult
类定义规范

类定义应遵循以下格式:

class TrajectoryGroup:
    """
    轨迹组,包含多个轨迹对象和异常信息
    
    Attributes:
        trajectories: 轨迹对象列表
        exceptions: 异常列表
    """
    def __init__(
        self,
        trajectories: Iterable[Trajectory | BaseException],
        *,
        exceptions: list[BaseException] = [],
    ) -> None:
        # 初始化代码
        pass
        
    def __len__(self) -> int:
        # 实现代码
        pass

关键点:

  • 类定义前添加文档字符串,说明类的用途
  • 构造函数参数清晰,使用关键字参数(* 之后的参数)
  • 实现必要的魔术方法,如 __len____iter__

错误处理

ART 框架定义了多个自定义异常类,位于 src/art/errors.py 文件中。在开发中应优先使用这些异常类,而不是通用的 Exception

# 正确示例
raise ARTError("模型注册失败", status_code=400)

# 不推荐
raise Exception("模型注册失败")

异步编程规范

ART 框架大量使用异步编程提高性能,特别是在处理网络请求和并发任务时。异步代码应遵循以下规范:

异步函数定义

async def train_model(
    self,
    model: "TrainableModel",
    trajectory_groups: list[TrajectoryGroup],
    config: TrainConfig,
    dev_config: dev.TrainConfig,
    verbose: bool = False,
) -> AsyncIterator[dict[str, float]]:
    # 异步实现代码
    pass

异步任务管理

使用 asyncio 管理异步任务时,应使用项目提供的工具函数,如 src/art/utils/limit_concurrency.py 中的 limit_concurrency 装饰器控制并发数量:

@limit_concurrency(4)  # 限制最大并发数为4
async def process_trajectory(trajectory: Trajectory):
    # 处理轨迹数据
    pass

文档规范

良好的文档是代码可维护性的关键。ART 项目遵循以下文档规范:

文档字符串格式

使用 Google 风格的文档字符串:

def tokenize_trajectory(
    tokenizer: "PreTrainedTokenizerBase",
    history: History,
    advantage: float,
    allow_training_without_logprobs: bool,
) -> TokenizedResult | None:
    """
    将轨迹数据转换为模型训练用的 token 表示
    
    Args:
        tokenizer: 用于 tokenize 的预训练 tokenizer
        history: 轨迹历史数据
        advantage: 优势值
        allow_training_without_logprobs: 是否允许在没有 logprobs 的情况下训练
        
    Returns:
        包含 token 化结果的对象,或 None(如果处理失败)
    """
    # 函数实现
    pass

类型注解

所有函数和方法都必须添加类型注解,包括参数类型和返回值类型。这有助于静态类型检查工具发现潜在问题,并提高代码可读性。

示例和教程

复杂功能应提供示例代码,放在 examples/ 目录下。如 examples/2048/ 目录提供了 2048 游戏 AI 训练的完整示例。

测试规范

为确保代码质量,ART 项目要求所有新功能都必须包含相应的测试。

测试文件位置

测试文件应放在 tests/ 目录下,与源代码保持相同的目录结构。例如,src/art/trajectories.py 的测试应放在 tests/trajectories_test.py

测试类型

测试覆盖率

项目使用 pytest-cov 工具监控测试覆盖率,目标是保持 80% 以上的代码覆盖率。

代码审查规范

为维护代码质量,所有 PR 都必须经过代码审查。审查重点包括:

  1. 代码是否符合本文档中的风格规范
  2. 是否添加了必要的测试
  3. 是否更新了相关文档
  4. 代码逻辑是否正确
  5. 是否存在性能问题

PR 提交信息格式

PR 标题应简洁明了,描述主要变更。PR 描述应包含:

  • 变更目的
  • 实现方法
  • 测试方法
  • 相关文档

项目特有规范

轨迹数据处理

ART 框架的核心是轨迹数据(Trajectory)处理,相关代码应遵循:

模型训练流程

模型训练相关代码应遵循:

可视化工具

训练过程中的数据可视化应使用项目提供的工具函数,如 src/art/preprocessing/pack.py 中的 plot_packed_tensors 函数:

def plot_packed_tensors(
    packed_tensors: PackedTensors, output_dir: str | None = None
) -> None:
    # 可视化 packed tensors
    pass

生成的可视化结果类似下图(项目中的实际可视化示例):

Packed Tensors 可视化

总结

遵循统一的代码风格规范是 ART 项目高效协作的基础。本文档涵盖了代码格式化、命名约定、文档规范、测试要求等方面的内容。随着项目发展,本规范也会不断更新,建议定期回顾最新版本。

如需了解更多项目相关信息,请参考:

通过共同遵守这些规范,我们可以构建一个更加健壮、可维护的 LLM 智能体训练框架。

【免费下载链接】ART OpenPipe ART (Agent Reinforcement Trainer): train LLM agents 【免费下载链接】ART 项目地址: https://gitcode.com/GitHub_Trending/art32/ART

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值