news 2026/7/22 9:44:10

强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (7)--- Policy Serving

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (7)--- Policy Serving

0x00 概要
本系列的目的是:借着对 OpenClaw-RL 源码的学习,来梳理强化学习的一些相关概念和思想。所以,会有一些基础知识、扩展和发散,OpenClaw-RL 只是一个切入点。而且,因为整篇系列是一个整体,所以有些概念的解读/学习会在不同的文章中出现,还请大家谅解。

OpenClaw-RL 是一个用于在线强化学习(Online RL)的框架,专门针对智能体工具使用场景。它通过从环境反馈中提取过程奖励信号来训练语言模型,支持三种主要模式:

openclaw-rl:基于二元奖励的强化学习(Binary RL / GRPO)
openclaw-opd:基于后见之明提示的在线策略蒸馏(On-Policy Distillation, OPD)
openclaw-combine:联合方法,在同一 PPO 更新中同时利用 RL reward 和 OPD teacher signal
framework

OpenClawAPIServer是OpenClaw-RL系统中的核心组件,它充当OpenClaw环境与 SGLang推理服务之间的代理服务器,负责收集训练数据、计算奖励并提交样本给强化学习训练流程。当然,也可以认为OpenClawAPIServer即是 Proxy Server,也是 Policy Serving。

0x01 基础
1.1 架构
我们回顾 OpenClaw-RL 的系统架构图如下:

整体架构

1.2 OpenClawAPIServer 的定位
OpenClawAPIServer 这个名字其实不准确,更准确的命名应该是:OpenClawProxyServer 或OpenClawTrainingPipeline—它是连接Policy Serving、Reward Judging 和Policy Training 三个功能层的协调器(Orchestrator),而非其中任何一层的实现体。

职责
以 OpenClawAPIServer 为例,它独自承担了几个职责:

职责 属于哪个组件 具体代码
HTTP 代理(转发用户请求) Policy Serving(接口层) httpx.post(sglang_chat_url)
拦截 response + logprobs Policy Serving(数据采集) _extract_logprobs_from_chat_response()
PRM 评分 Reward Judging _fire_prm_scoring() / _opd_evaluate()
构造训练 Sample 训练数据管道 _submit_turn_sample()
开关控制(503) 训练-服务调度 submission_enabled.is_set()
类比
OpenClawAPIServer = “前台+服务员+数据记录员",不是“厨房"(Policy)本身。

类比 对应组件
餐厅服务员(接单、传菜) OpenClawAPIServer
厨房(真正做菜) SGLang GPU 4-5(Policy 推理)
食品检验员(给菜打分) SGLang GPU 6-7(PRM/Judge)
餐厅管理系统(记录点单数据) output_queue → Slime
1.3 继承关系 & 方法覆盖
OpenClawAPIServer、OpenClawOPDAPIServer 和 OpenClawCombineAPIServer 的关系如下:

OpenClawAPIServer (Binary RL 基类, 独立)
├─ _submit_turn_sample() score->loss_mask, at-least-one
├─ _maybe_submit_ready_samples() 检查 PRM task done
└─ _fire_prm_scoring() 触发 PRM 异步

OpenClawOPDAPIServer (独立类, 不继承 OpenClawAPIServer)
├─ _submit_turn_sample() 独立实现
├─ _maybe_submit_ready_samples() 改用 opd_evaluate task
├─ _opd_evaluate() hint judge + teacher lp 计算
├─ _fire_opd_task() 触发 OPD 异步评估
└─ _compute_teacher_log_probs() / _compute_teacher_topk_logprobs()

OpenClawCombineAPIServer extends OpenClawOPDAPIServer
├─ _submit_turn_sample() ← 覆盖: OPD/OPD+RL 路径
├─ _submit_rl_turn_sample() ← 新增: RL-only 路径 (teacher=rollout)
└─ _maybe_submit_ready_samples() ← 覆盖: 3路分发逻辑
1.4 真实策略服务器
OpenClawAPIServer 的技术栈:

FastAPI:Web框架(异步)
Uvicorn:ASGI 服务器(基于uvloop,高并发)
httpx/aiohttp:异步 HTTP 客户端(调用 SGLang和PRM)
真正的Policy Server是SGLang(GPU4-5)

Policy=Qwen3-4B模型权重 (注: RL server 默认 SERVED_MODEL_NAME=“qwen3-8b”, OPD server 默认=“qwen3-4b”, 实际部署可通过环境变量覆盖)
Policy Server=SGLang推理引擎(监听sglang_router_ip:sglang_router_port)
OpenClawAPIServer不运行模型推理,它只是SGLang前面的一层拦截代理。

用户 → OpenClawAPIServer(FastAPI, Proxy) → SGLang(GPU4-5)← 真正的Policy Server
↓ 拦截
SGLang PRM (GPU 6-7) ← Reward Judge(评分)

output_queue

Slime ← Policy Training的数据入口
请求处理调用链
HTTP 入口:chat_completions()
回合判断:_handle_main_turn()/_handle_side_turn()
SGLang 转发:forward_to_sglang()
PRM 触发:_fire_prm_scoring() →_prm_evaluate()
样本提交:maybe_submit_ready_samples()→output_queue.put()
样本构建调用
数据缓冲:_buffer_record()→存入_pending_records
状态刷新:flush_pending_record()→添加下一状态
样本构建:_submit_turn_sample()→创建Sample 对象
FastAPI Proxy 如何转发到 SGLang
OpenClawAPIServer 通过 FastAPI Proxy 实现了对外的入口,内部通过 SlimeRouter 路由到实际的 SGLang 推理引擎, 实现了接入层与推理层的解耦。完整端口与中间层架构如下图所示。

7-中间层架构

端口关系总结 (run_qwen3_4b_openclaw_rl.sh 配置):

PORT=30000
-> FastAPI Proxy 监听端口 (外部可见, OpenClaw App 连接此处)

args.sglang_router_ip/port
-> Slime 自动分配, 传给 API Server 作为 sglang_chat_url 的目标
-> 指向 SlimeRouter (内部负载均衡层)

args.prm_router_ip/port
-> PRM Engine 的 /generate 地址 (GPU 6-7)
-> API Server 用于发送评分请求

1.5 对比
标准 RL Policy Serving:
rollout时:

SGLang只服务训练系统内部
批量生成→批量打分→批量训练
无外部访问
架构:

[训练系统] ⇆ [SGLang] 内部通信
OpenClaw Policy Serving:
rollout 时,SGLang同时服务:

实用户(通过OpenClawApp)
PRM评分(内部调用)
Teacher forward pass(OPD 时)
架构:

[用户手机] → [FastAPI Proxy] → [SGLang] 外部流量
[PRM judge] → [SGLang] 内部调用
[训练系统] ← [Proxy] 数据管道
工程挑战
这导致了独特的工程挑战:

标准 RL 不需要处理的问题: OpenClaw 需要处理:
───────────────────── ────────────────────────
❌ API 认证 ✅ SGLANG_API_KEY
❌ 并发控制 ✅ semaphore
❌ 503 暂停 ✅ submission_enabled
❌ session 管理 ✅ X-Session-Id
❌ 流式传输 ✅ SSE streaming
❌ 用户体验 ✅ 低延迟响应
❌ 数据筛选 ✅ main vs side turn
❌ 超时处理 ✅ session timeout
总结:OpenClaw 的根本范式转变
标准 RL: 训练系统是 “主人” → 它决定问什么、答几次、怎么评分

OpenClaw: 训练系统是 “寄生者” → 它寄生在真实对话上,被动收集数据

这导致OpenClaw-RL Serving 如下特点:

Rollout = 被动等待(不是主动生成)
Environment = 真实用户(不是模拟器)
PRM = 即用即评(不是预训练 RM)
Policy = 对外服务(不是内部推理)
一切设计选择都源于这个范式转变。

0x02 详细功能梳理
OpenClawAPIServer 本质上是一个智能代理,它不仅转发请求,还负责收集强化学习所需的训练数据,通过PRM评估助手响应质量,并将高质量的数据提交给训练流程。

OpenClawOPDAPIServer 则是OPD模式的专用API服务器。

2.1 OpenClawAPIServer

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 9:43:49

UVa 11669 Non Decreasing Prime Sequence

题目描述 非递减素数序列(NDPS\texttt{NDPS}NDPS)是一个由素数组成的序列,满足第 iii 个元素不小于第 i−1i - 1i−1 个元素(i>1i > 1i>1)。一个 NDPS\texttt{NDPS}NDPS 的权重定义为该序列所有元素的乘积。 …

作者头像 李华
网站建设 2026/7/22 9:43:21

ComfyUI与Hermes Agent:自然语言控制AI绘画工作流

1. 项目概述:当Hermes Agent遇见ComfyUI ComfyUI作为当前最热门的Stable Diffusion可视化工作流工具,其节点式操作方式让AI绘画变得前所未有的灵活可控。而Hermes Agent作为新兴的AI智能体框架,通过集成ComfyUI技能包,实现了用自然…

作者头像 李华
网站建设 2026/7/22 9:39:41

临沂鑫旺2026 耐腐材质告别后期频繁更换

在户外环境中,标识标牌长期经受风吹日晒、雨雪侵蚀,褪色、起皮、变形等问题屡见不鲜。许多企业主或物业管理者往往陷入“年年安装、年年更换”的循环,既耗费预算,又影响形象。随着材料技术的迭代,2026年的户外标识标牌…

作者头像 李华
网站建设 2026/7/22 9:38:51

FTP服务部署与优化:vsftpd实战指南

1. FTP服务基础认知与选型考量 FTP(File Transfer Protocol)作为最古老的文件传输协议之一,至今仍在企业内部文件共享、网站内容更新等场景中广泛应用。我在实际运维工作中发现,虽然云存储方案日益普及,但FTP因其协议简…

作者头像 李华
网站建设 2026/7/22 9:37:56

Seedance3.0本地部署实战:免费AI视频生成与绘画完整指南

Seedance3.0本地部署实战:无需魔法免费生成AI视频与绘画 最近在探索AI视频生成工具时,发现很多在线服务要么收费昂贵,要么需要特殊网络环境。经过多方测试,终于找到了一套完整的本地部署方案,能够免费生成高质量的AI视…

作者头像 李华