代码补全在线强化学习#
代码补全在线强化学习(Online Coding RL)是 RLinf 框架中的一个重要应用场景。 通过与 Continue 等代码编辑器的集成,获取用户对代码补全的偏好反馈,可以实现近乎实时的代码生成和反馈学习,快速提高代码补全的质量,和对齐用户的偏好。 本示例展示了如何使用 RLinf 框架训练一个能够进行在线代码补全任务的模型。
相关阅读:智能体落地“最后一公里”初探之Cursor在线强化学习。
概述#
代码补全在线强化学习系统通过以下方式工作:
实时交互:系统接收来自 Continue 等编辑器的代码补全请求
模型推理:使用训练好的模型生成代码补全建议
用户反馈:收集用户对生成代码的接受/拒绝反馈
在线学习:基于用户反馈实时更新模型参数
这种实时学习机制使得模型能够快速适应用户的编程习惯和偏好。
我们同时提供了针对在线强化学习及离线验证的示例。其中离线验证示例使用大模型模拟人类偏好进行打分,不需要也不支持部署 Continue 在线使用。
运行脚本#
环境准备
首先确保您已经安装了 RLinf 框架及其依赖:
# 安装额外依赖
pip install httpx asyncio
如果使用离线验证示例,需要下载数据集:
# 安装额外依赖
modelscope download --dataset "paxionfruit/code-fim-v2-python-filtered" --local_dir code-fim-v2-python-filtered
配置 Continue 集成
安装 Continue 扩展
由于当前 Continue 未支持上传用户对代码补全的偏好反馈,因此我们修改了 Continue 的源码,支持上传用户对代码补全的偏好反馈。 用户可从 这里 获取编译好的修改后的 Continue 插件,或自行构建。
下载编译好的 Continue 插件后,在 VS Code 中安装。
方法1: code --install-extension /path/to/continue-1.3.9.vsix"
方法2: 在 VSCode 中按 Cmd+Shift+P ,输入 'Extensions: Install from VSIX',选择上述文件
配置 Continue 设置
Continue 的配置文件路径为:
~/.continue/config.yaml
在 Continue 的配置文件中添加以下设置:
# 请将 http://xxx:xx/ 替换为实际的 RLinf 在线代码补全服务地址 # 添加一个模型,用于代码补全 models: - name: my-autocomplete provider: openai model: Qwen2.5-Coder-1.5B apiBase: http://xxx:8081/v1 apiKey: xxx roles: - autocomplete # 添加发送用户是否接受代码补全的反馈 tabAutocompleteOptions: enableCompletionTracking: true completionTrackingUrl: http://xxx:8082/api/training/submit completionTrackingHeaders: Authorization: Bearer test-token X-Project-ID: test-project maxPromptTokens: 1024 debounceDelay: 350 multilineCompletions: auto
修改并保存完成后,从左侧面板打开 Continue 扩展,点击右上角的 "设置" 齿轮按钮,在 "Models" 页面确保 "Autocomplete 模型" 选用 my-autocomplete。
启动训练服务
准备模型和配置
确保您有预训练的模型权重,并修改配置文件,匹配模型路径、需要使用的端口等
- 对于在线强化学习,修改并使用 examples/agent/coding_online_rl/config/qwen2.5-1.5b-ppo.yaml 文件:
runner: output_dir: /path/to/your/logs rollout: model: model_path: /path/to/your/model
- 对于离线验证,修改并使用 examples/agent/coding_online_rl/config/qwen2.5-1.5b-grpo-llm_judge.yaml 文件:
runner: output_dir: /path/to/your/logs rollout: model: model_path: /path/to/your/model data: train_data_paths: ["/path/to/your/dataset/code-fim-v2-python-filtered_formatted_train_3k.jsonl"] val_data_paths: ["/path/to/your/dataset/code-fim-v2-python-filtered_formatted_test_1k.jsonl"]
同时,还需要设置用于模拟反馈的大模型的调用 api_url 及 api_key:
export LLMASJUDGE_API_URL=your_api_url export LLMASJUDGE_API_KEY=your_api_key export LLMASJUDGE_MODEL=your_model # not recommended. should fit prompt for your model.
启动 RLinf 训练服务
- 对于在线强化学习:
# 进入项目目录 cd /path/to/rlinf_online_rl # 启动训练服务 bash examples/agent/coding_online_rl/run_main_coding_online_rl.sh
这将启动以下服务:
推理服务:在端口 8081 提供代码补全 API
训练服务:在端口 8082 接收用户反馈数据
- 对于离线验证:
# 进入项目目录 cd /path/to/rlinf_online_rl # 启动训练服务 bash examples/agent/coding_online_rl/run_main_coding_rl_llm_judge.sh
与 Continue 联动
启动 Continue
在 VS Code 中启动 Continue 扩展,确保它连接到正确的 API 端点。
开始编程
在 Continue 中开始编写代码,系统将: - 自动发送代码补全请求到推理服务 - 接收模型生成的代码建议 - 收集您对建议的接受/拒绝反馈
实时学习
系统会实时处理您的反馈: - 接受的建议被标记为正面反馈 - 拒绝的建议被标记为负面反馈 - 模型参数根据反馈进行在线更新
监控训练过程
您可以通过以下方式监控训练过程:
查看日志输出
# 查看训练日志 tail -f results/ppo-1.5b/train.log
使用 TensorBoard
# 启动 TensorBoard tensorboard --logdir results/grpo-1.5b
检查模型检查点
训练过程中会定期保存模型检查点到
results/grpo-1.5b/checkpoints/目录。
测试客户端
您可以使用提供的测试客户端来验证系统功能:
# 运行测试客户端
python examples/agent/coding_online_rl/simple_test_client.py
测试客户端会模拟 Continue 的行为,发送代码补全请求并提交反馈数据。
故障排除
常见问题及解决方案:
端口冲突
如果端口 8081 或 8082 被占用,请修改配置文件中的端口设置。
模型加载失败
检查模型路径是否正确,确保模型文件存在且可访问。
Continue 连接失败
确保 Continue 配置中的 API 端点地址正确,检查网络连接。还可使用 simple_test_client 测试是否能正常收到反馈数据。
通过以上步骤,您就可以成功运行代码补全在线强化学习系统,并实现与 Continue 编辑器的无缝集成。