跳转至

base.py — 定义了所有奖励管理器的抽象基类 RewardManagerBase

文件路径: verl/experimental/reward_loop/reward_manager/base.py

文件概述

定义了所有奖励管理器的抽象基类 RewardManagerBase。它规定了奖励管理器必须实现的接口,并提供了一个工厂方法 init_class 用于从配置创建实例。

关键代码

抽象基类定义

class RewardManagerBase(ABC):
    """所有奖励管理器的基类"""

    @classmethod
    def init_class(cls, config, tokenizer, ...):
        """工厂方法:从配置创建实例

        子类可以覆盖此方法来接收额外的初始化参数。
        """
        return cls(config, tokenizer, ...)

    @abstractmethod
    def run_single(self, data, compute_score_fn, ...):
        """处理单个样本的奖励计算

        这是子类必须实现的核心方法。
        """
        raise NotImplementedError

设计要点

  1. init_class 类方法:这是一个工厂方法(Factory Method),允许统一的创建接口。调用者不需要知道每个子类的构造函数签名差异,统一通过 SomeManager.init_class(config, tokenizer) 创建实例。

  2. run_single 抽象方法:定义了奖励计算的核心接口。每个具体的管理器实现(Naive、DAPO 等)需要实现这个方法来定义如何计算单个样本的奖励。

核心类/函数列表

名称 类型 说明
RewardManagerBase 抽象基类 定义奖励管理器接口
init_class 类方法 工厂方法,从配置创建实例
run_single 抽象方法 计算单个样本奖励的核心接口

与其他模块的关系

  • NaiveRewardManager、DAPORewardManager 等都继承自此基类
  • registry.py 中的 @register 装饰器会注册继承自此基类的子类
  • reward_loop.py 通过 init_class 创建管理器实例

小结

RewardManagerBase 是典型的模板方法模式(Template Method Pattern),通过抽象基类定义接口契约,让不同的奖励计算策略可以互相替换。