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. 计算分数¶
在轮次级别计算分数,可以考虑部分暴露和上下文任务切换等因素。
5. 结束交互¶
释放交互会话的资源。
交互的完整生命周期¶
┌───────────────────────┐
│ 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 能够与外部环境进行多轮对话,接收反馈并不断改进。这种设计支持了"自我反思"和"迭代改进"等高级训练范式。