日前我们基于 RLinf 框架实现了一个 Onlin RL 的示例支持以组件的形式直接接入已部署的 Agent 服务中做在线强化学习可帮助针对用户偏好在线调优 Agent 的服务效果获得了许多伙伴的关注和反馈今天我们将分享一些背后的思考并为大家提供一个复现教程。代码地址https://github.com/RLinf/RLinf项目链接https://rlinf.readthedocs.io/zh-cn/latest/rst_source/examples/coding_online_rl.html使用文档链接https://rlinf.readthedocs.io/en/latest/rst_source/examples/coding_online_rl.html01写在前面在线强化学习技术浅谈随着大模型能力持续突破许多智能体已迈过“60分可用”的门槛但我们仍需将其效果提升至80分乃至更高水准使其真正深度融入多样化场景。强化学习教父 Sutton 预言更高的智能将从智能体的经验中涌现。我们深深认同强化学习是推动智能体实现能力跃升的关键技术路径而在线强化学习的意义在于针对生产环境进行持续的自进化成为智能体进一步发挥能力的利器。Cursor 近期推出的 Tab 模型就是对在线强化学习有效性的有力印证之一。该模型将用户的每一次交互如接受或拒绝建议视作强化信号直接参与模型的在线优化。在每日超过 4 亿次请求的真实反馈驱动下模型能够以极高频率持续学习与改进模型的建议接受率提升了28%也为我们在智能体优化中引入在线强化学习提供了重要参考。与此同时随着越来越多智能体( Agent ) 服务进入实际部署阶段如何为已上线的系统高效、低成本地引入在线强化学习能力成为另一亟待解决的问题。我们认为在线强化学习训练不应该以服务的形式与 Agent 系统耦合并持续运行而是应该以模块插件的形式与 Agent 系统解耦并且由Agent系统按需调用从而实现系统的模块化设计与部署使 Agent 服务组件与在线强化学习组件在功能上解耦实现两部分组件独立迭代优化而不增加整体系统复杂度。比如在线清洗数据的逻辑完全位于在线强化学习功能组件中而不影响Agent服务组件。当在线强化学习将模型优化到理想状态后即可暂停训练并将优化后的模型部署至所有线上环境。未来若出现新的调优需求——例如用户偏好变化或工作流更新——Agent 系统可再次触发在线强化学习模块启动新一轮训练。因此定义 Agent 系统与在线强化学习之间的标准化交互接口使其成为 Agent 系统的“可选项”甚至“标配能力”将是推动技术普及的关键。此外如何通过在线强化学习也是实现 Agent 服务的降本增效也是一个关键议题。面对用户增长带来的成本压力厂商常寻求用小模型替代大模型但必须保证效果不降级。我们认为可以通过在线强化学习将小模型能力在特定场景下拉齐甚至超过大模型。具体而言可通过分流部分用户请求对一个已离线 SFT 或者强化学习训练过的小模型进行在线强化训练一旦效果达标即可全量替换若未达标则可升级模型规模继续实验继而实现一种用小模型替代大模型的成本可控的 Agent 优化路径在一些 Agent 场景中可以获得 10 倍以上的成本下降。02从思考到实践RLinf-Online及其实现路径详解沿着上述思考我们日前推出了首个开源的 Agent 在线强化学习框架 RLinf-Online它基于大规模强化学习框架 RLinf 对 Cursor 的在线强化学习方案进行了复现实验验证了在线强化学习进一步提升模型的代码补全能力更重要的是它支持以组件的形式直接接入已部署的 Agent 服务中做在线强化学习实现了 Agent 持续的自我优化与成本效益的提升。我们也将其全面开源以期能够赋能更多的 Agent 优化与落地。RLinf是今年9月份无问芯穹联合清华大学、北京中关村学院共同打造并开源的大规模强化学习框架这一灵活、高效、可扩展的框架不仅能够支持众多具身强化学习场景也适用于推理任务中的强化学习应用甚至可用于构建各类Agent。具体而言我们采用Continue作为代码编辑器端用户可直接在 VSCode 中安装 Continue 插件 https://github.com/RLinf/continue进行开发RLinf则作为后端系统既负责大模型的 Serving也承担在线强化学习的训练。值得注意的是大模型的 Serving 后端也可以替换为已部署的 Agent 服务而RLinf可灵活作为提供在线强化学习能力的通用组件接入系统。接下来我们将详细阐述这一成果背后的技术路径和实现过程。1. 前情提要代码补全功能简介对于像Cursor这样的智能编程编辑器核心功能之一就是高效、上下文感知的代码补全。在典型的代码补全任务中当光标停留在某个位置时编程助手会根据上下文给出插入内容的建议。实现这一能力的常见方式是FIMFill-In-the-Middle任务模型接收光标位置的上文和下文预测中间应填充的内容。目前大多数大语言模型LLM在预训练阶段已针对 FIM 任务进行过优化只需按照以下格式组织输入|fim_prefix|上文|fim_suffix|下文|fim_middle|模型即可生成合理的中间补全内容。这种设计使得 LLM 能够自然地适应编辑器中的代码补全场景。Continue 插件的代码补全逻辑在我们的实验中我们基于开源 AI 编程IDE Continue 实现了完整的在线强化学习Online RL代码补全案例。Continue 默认支持基于 FIM 格式的补全任务但原生版本并不具备人类反馈Human Feedback上报功能。为此我们对插件进行了轻量级改造当用户按下 Tab 键接受补全建议时插件上报 acceptedTrue当用户在 10 秒内未按下 Tab 或进行了其他编辑操作时上报 acceptedFalse。通过这种方式我们能够直接从真实用户交互中获得强化信号reward无需额外训练一个 reward 模型去拟合人类偏好实现了从人类到模型的直接强化学习闭环。2. 系统搭建流程概览整个在线强化学习的流程可以概括为三个核心步骤1交互与反馈采集Coding Agent 向用户提供代码补全建议用户的“接受”或“拒绝”操作构成明确的强化信号。2即时在线更新用户反馈传到 RLinf 的后端系统用于训练该生成模型模型基于 On-policy 策略实时更新并同步回线上 Agent以获取新的交互反馈。3效果验证与部署在线训练结束后通过 A/B 测试 评估新模型的接受率是否优于原模型若效果提升则统一部署至线上环境。RLinf-Online搭建下面介绍如何基于RLinf快速搭建该流程1RLinf Worker抽象RLinf 框架提供了 Worker 的编程接口这是 RLinf 构建整个框架的基本组件。Worker 表示一个可执行的组件大的组件可以是推理实例、训练框架小的组件可以是数据加载器等。通过继承 Worker 类可以将一个具体的执行组件进行抽象并提供和其他 Worker 交互、以及被 RLinf 调度、分配和管理的能力。2RLinf Channel通信RLinf 框架提供了高性能、易用的异步通信抽象 Channel自适应使用优化过的点对点后端如 CUDA IPC 和 NCCL并封装为生产者-消费者队列的通信模式。因此 Worker1 - Worker2 的通信可以如下实现self.comm_channel Channel.create(Comm) #创建一个 channel Handle1 self.worker1.rollout( output_channelself.comm_channel, ) # 执行数据生成 Handle2 self.worker2.run_inference( input_channelself.comm_channel, )# 执行inference流程仅需3行代码即可实现 Worker1 - Worker2 的通信逻辑大大简化了代码逻辑。3基于RLinf构建在线强化学习训练流程有了 Worker 和 Channel 这两个基本元素我们便可以搭建在线强化学习的整套训练流程。整体系统架构如下图所示。假设代码补全 Agent 已经作为一个完整的在线服务部署由用户前端User Frontend与服务后端Service Backend组成。为了让这一线上系统具备在线强化学习Online RL能力我们在其plugin层 引入了一个独立组件——RLinf Runner。与长期运行的后台服务不同RLinf Runner 并不是一个常驻进程而是一个可以由线上系统的Controller按需调用的轻量级模块。我们为 RLinf Runner 设计了与线上 Agent 的交互接口用于1. 获取在线数据包括请求request、响应response内容以及用户交互反馈accept/reject2. 接收并更新模型权重从而实现 Agent 策略的实时优化。在 RLinf Runner 内部我们将整个强化学习过程分解为三个核心 WorkerData Receiver负责接收并缓存来自线上系统的交互数据Compute Reward根据用户反馈计算即时奖励信号PPO Loss Actor Trainer执行策略优化与模型更新。这些 Worker 之间的通信通过RLinf Channel实现它提供高性能、异步的数据传递机制使整个在线训练流程能够以流式方式持续进行。当 Service Backend 的 Controller 启动 RLinf Runner 后在线强化学习过程便会自动运行系统从线上服务中接收数据、计算奖励、更新策略模型并将改进后的模型权重实时回传至服务后端。为保障线上服务的稳定性在线强化学习可首先在部分愿意参与新模型试验的用户群体中进行部署与验证。注更加详细的系统部署与测试可以参照中文版文档https://rlinf.readthedocs.io/zh-cn/latest/rst_source/examples/coding_online_rl.html或者英文版文档https://rlinf.readthedocs.io/en/latest/rst_source/examples/coding_online_rl.html。3. 算法设计除了模块化的系统设计之外我们也在在线强化学习Online RL算法设计上进行了深入探索。在 Online RL 场景中每个请求request通常只对应一次响应与一次用户反馈accept/reject因此GRPO不再适用因为它依赖于对同一输入的多样化响应组来计算相对偏好。为此我们采用了改进后的PPO 算法主要改动包括去掉 critic 模型优势估计advantage estimation退化为蒙特卡洛回报Monte Carlo return的简化版只使用当前的reward。虽然这种方法可能带来较大的训练方差但依靠 PPO 的clip 机制可以有效限制策略更新幅度防止训练崩溃从而实现一种高效且稳定的简化策略。在代码补全的 Online RL 训练过程中reward 来源于用户反馈信号即用户的接受或拒绝操作。由于目前缺乏足够规模的真实 Online 使用场景我们采用LLM 模拟用户打分LLM-as-a-Judge的方式对模型生成的补全结果进行评分。具体地我们使用 LLMDeepSeek-V3.1对模型生成的补全结果进行 0–10 分打分平均得分作为模型在测试集上的综合表现指标。4. 性能一览训练配置数据集构建我们选用 code-fim-v2 数据集该数据集包含多种编程语言的代码补全样本。我们从中筛选出 Python 样本并进一步过滤掉补全内容过短的样本最终保留约4000 条高质量数据。其中3000 条用于训练1000 条用于测试。每个样本包含上文prefix与下文suffix代码片段模型需根据上下文生成中间补全内容。主要参数实验基模型为Qwen2.5-Coder-1.5B。由于未加入 KL regularization过高学习率可能导致模型遗忘原有分布因此我们选择较低学习率(2e-6)以保持稳定收敛。同时采用bf16 训练精度相较于 fp16 在训练早期的梯度范数更稳定。此外为了快速验证强化学习在该任务上的有效性我们还采用了GRPOgroup size 8进行离线训练对比实验以评估不同训练范式下模型在代码补全任务上的性能变化。实验结果如图1所示可以看到通过强化学习模型性能持续增长。测试集结果如表1所示Qwen2.5-Coder-1.5B-RLinf 在测试集上提升效果明显(4.532 - 6.897)涨幅超50%甚至超过同系列 32B 模型。这表明通过在线强化学习可以有效提升模型部署性能并且小模型具有巨大潜力。使用强化学习性能持续增长测试集指标对比03未来展望在线强化学习为 Agent 的持续进化指明了方向但同时也还存在诸多系统性挑战包括在线数据的高效清洗与处理、模型动态更新过程中的性能稳定性保障以及如何在多元用户偏好下实现个性化策略优化等关键问题。这些不仅是系统与算法上值得思考的问题更是智能体最终落地所亟需解决的根本性难题。尽管如此我们相信随着智能体应用生态的逐步成熟与相关技术的持续突破这些挑战终将被逐步克服。智能体也将由此实现从“从经验中学习”到“在交互中涌现”的根本性跨越。RLinf-Online 是我们团队在智能体在线优化方案上的初步探索与实践当前版本仅采用人类代理的形式进行性能模拟但其结果已经清晰展现出在线强化学习的无限潜力。目前我们正将该流程上线生产环境在实际业务中进行测试。同时我们也期待与广大开发者、团队与合作伙伴展开深入协作共同拓展大模型时代下强化学习的应用边界赋能更智能、更高效的 Agent 未来。