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
设计要点¶
-
init_class类方法:这是一个工厂方法(Factory Method),允许统一的创建接口。调用者不需要知道每个子类的构造函数签名差异,统一通过SomeManager.init_class(config, tokenizer)创建实例。 -
run_single抽象方法:定义了奖励计算的核心接口。每个具体的管理器实现(Naive、DAPO 等)需要实现这个方法来定义如何计算单个样本的奖励。
核心类/函数列表¶
| 名称 | 类型 | 说明 |
|---|---|---|
RewardManagerBase |
抽象基类 | 定义奖励管理器接口 |
init_class |
类方法 | 工厂方法,从配置创建实例 |
run_single |
抽象方法 | 计算单个样本奖励的核心接口 |
与其他模块的关系¶
NaiveRewardManager、DAPORewardManager等都继承自此基类registry.py中的@register装饰器会注册继承自此基类的子类reward_loop.py通过init_class创建管理器实例
小结¶
RewardManagerBase 是典型的模板方法模式(Template Method Pattern),通过抽象基类定义接口契约,让不同的奖励计算策略可以互相替换。