它补的是哪一段

模型训练早就有 MLOps 管,但智能体的持续学习多数还停在脚本级别:拿日志、清洗、训练、人工挑一个 checkpoint 换上,中间没有评估闸门,也没有版本历史。Reef 把这条链路拆成四步并各自落到模块上——Serve(服务请求并记录交互)、Observe(把反馈和已记录的交互对上)、Grow(从够格的记录里产出更新)、Commit(按选择策略评估候选,通过的才写进版本历史)。

和推理引擎、RL 框架的分工

  • 推理引擎(vLLM、SGLang 等):能服务线上流量,但不能训练权重,也不管版本
  • RL 训练框架(Slime、veRL、AReaL 等):能训练权重,但不服务流量、不管版本
  • Reef:服务与训练都做,额外提供版本管理与不停服更新,并且能改进权重之外的东西——提示词、规则、技能这些 harness 层面的配置同样在学习范围内

第一步:装依赖并确认版本

# artifact 与 checkpoint 功能依赖 git-lfs
uv venv && source .venv/bin/activate
uv pip install reef-infra
python3 -c "import reef; print(reef.__version__)"

# 需要跑训练示例时改用源码安装
# git lfs install && git clone https://github.com/Human-Agent-Society/reef.git

要求 Python 3.12 以上。官方在文档里单独提醒 git-lfs 是必须的系统依赖,因为 Reef 要为产物仓库在本地初始化 Git LFS——这一点容易被跳过,等到第一次提交产物时才报错。

第二步:先当纯推理服务跑起来

uv run reef serve --inference.model-path Qwen/Qwen2.5-1.5B-Instruct

先跑纯推理模式的意义在于把链路验证和模型训练解耦:不接任何训练配方也能服务请求,可以先把端到端的可用性、鉴权和观测确认下来,再决定要不要开学习。这一步不需要 GPU 集群,本地一块卡就能跑。

第三步:打开训练配方(权重路线)

uv pip install -e ".[slime]"
uv pip install --no-deps --group runtime

export MODEL_PATH="Qwen/Qwen2.5-1.5B-Instruct"
export REEF_TOKEN="reef-local"

reef serve -c recipes/sao/examples/imo_answerbench/serve.yaml \
  --inference.model-path "$MODEL_PATH" \
  --reef.port "8900"

curl -f http://127.0.0.1:8900/healthz

配方(recipe)决定这次部署学的是哪个面:权重还是 harness。上面这条用官方 SAO 示例,健康检查通过就说明服务已经在跑,并且具备接收反馈的入口。

第四步:把反馈喂回去

推理请求通过 Reef 转发,回传时带上一个分数或判定。Observe 阶段用 processors 把反馈与已记录的交互对上,并判断这条记录是否够格进入训练批次——不是所有交互都会被用来学,这一步过滤的质量直接决定后面产出更新的质量。

第五步:候选更新怎么被接受

Grow 产出的东西不会直接上线:先经评估模块打分,再过配置好的选择策略(selection policy),通过的才写进产物版本历史,再由分发层推给线上。回滚就是把版本指针指回上一个被接受的产物,而不是重新训一遍。

按目标选路线

  • 想要一个为自己场景长出来的权重:需要可训练模型、受支持的 GPU 栈,以及配方能消费的反馈
  • 只想让 harness 自己变好:一个模型 endpoint、一批有代表性的任务、一个评估器即可,本地不需要训练卡
  • 做研究性质的测试时训练:需要执行环境、正确性检查器与可度量的目标

接入前该确认的三件事

  1. 你的反馈信号长什么样、由谁产生:用户点踩、人工打分还是自动评测,形态不同决定管道怎么接
  2. 评估器可不可信:它决定哪些更新能上线,评估器本身有偏差,整套闭环就是在放大偏差
  3. 版本历史与回滚由谁操作:不停服切换是能力,但按下回滚的人必须明确
持续学习最难的部分不是训练,而是决定「哪个更新可以被放出去」,以及放出去之后能不能收回来。