跳转至

base.py — verl/interactions/base.py

文件路径

verl/interactions/base.py

文件概述

BaseInteraction 是 verl 交互系统的抽象基类,定义了 LLM 与外部交互环境进行多轮对话的标准接口。与工具系统不同,交互系统模拟的是一个对话伙伴——它可以根据 LLM 的回答给出反馈,指导 LLM 改进。

工具 vs 交互的区别: - 工具(Tool):LLM 主动调用,执行具体操作(如搜索、执行代码),返回结果。 - 交互(Interaction):环境主动评判 LLM 的回答,返回反馈和分数,决定对话是否继续。

关键代码讲解

1. 构造函数

class BaseInteraction:
    def __init__(self, config: dict[str, Any]):
        self.config = config
        self.name: str = config.get("name", "interaction_agent")
  • config:配置字典。
  • name:交互代理的名称,默认为 "interaction_agent"。

2. 开始交互

async def start_interaction(self, instance_id: Optional[str] = None, **kwargs) -> str:
    if instance_id is None:
        return str(uuid4())
    else:
        return instance_id

为一条轨迹创建交互会话。类似于 BaseTool.create,返回唯一的实例 ID。

3. 生成响应(核心方法)

async def generate_response(
    self, instance_id: str, messages: list[dict[str, Any]], **kwargs
) -> tuple[bool, str, float, dict[str, Any]]:
    should_terminate_sequence: bool = False
    response_content: str = "Your current result seems acceptable."
    current_turn_score: float = 0.8
    additional_data: dict[str, Any] = {}
    return should_terminate_sequence, response_content, current_turn_score, additional_data

这是交互系统的核心方法,接收当前的对话历史 messages,返回四个值: - should_terminate_sequence:是否结束对话。如果为 True,rollout 会停止。 - response_content:交互代理返回给 LLM 的文字反馈。 - current_turn_score:本轮的分数。 - additional_data:额外的元数据。

4. 计算分数

async def calculate_score(self) -> float:
    score = 0.0
    return score

在轮次级别计算分数,可以考虑部分暴露和上下文任务切换等因素。

5. 结束交互

async def finalize_interaction(self) -> None:
    pass

释放交互会话的资源。

交互的完整生命周期

┌───────────────────────┐
│  start_interaction()  │  创建交互会话
└──────────┬────────────┘
           │
           v
┌───────────────────────┐
│  generate_response()  │  LLM 说话 → 环境评判并反馈(多轮循环)
│  (多次调用)            │
└──────────┬────────────┘
           │  should_terminate = True
           v
┌───────────────────────┐
│  calculate_score()    │  计算最终分数
└──────────┬────────────┘
           │
           v
┌───────────────────────────┐
│  finalize_interaction()   │  释放资源
└───────────────────────────┘

核心类/函数列表

类/方法 作用
BaseInteraction 交互抽象基类
start_interaction 创建交互会话
generate_response 生成反馈响应(核心)
calculate_score 计算轮次分数
finalize_interaction 结束并释放资源

与其他模块的关系

  • 被具体交互类继承:Gsm8kInteraction、WeatherInteraction 等。
  • 被 interaction_registry.py 使用:从配置文件创建交互实例。
  • 与 BaseTool 对比:接口设计类似,但语义不同——工具是被 LLM 调用,交互是主动评判 LLM。

小结

BaseInteraction 定义了 verl 交互系统的标准接口。它使 RL 训练中的 LLM 能够与外部环境进行多轮对话,接收反馈并不断改进。这种设计支持了"自我反思"和"迭代改进"等高级训练范式。