hello
发布于 2026-09-29 / 1 阅读
0
0

Reef:Agent 上线后还能持续学习?这家开源基建在做这件事

线上 Agent 最常见的尴尬是:上线那天表现尚可,之后却几乎不会变聪明。用户纠正过一次,明天还会犯同样的错;测试失败留下一堆轨迹,却只用来排障,很少回流成模型或提示词的更新。多数团队要么停在「换个更大的模型、改几行 Prompt」,要么另起一条离线流水线:导出日志、做数据集、训练、评估、再发版。中间环节多,周期长,线上服务和学习过程是两套系统。

Reef 想把这件事收成一套基础设施。它把自己放在 Agent 的 harness(控制循环、提示词、技能、工具配置)与模型之间:一边承接推理请求,一边把交互与反馈记下来,再按选定的「recipe」(学习配方)产出候选更新,通过评估门控后写入版本链。一句话定位来自官方仓库:面向持续自我进化 Agent 的基础设施(Infrastructure for continually self-improving agents),把推理、反馈、学习与版本化交付串在同一条服务路径上。

谁在做、仓库与许可证

维护组织是 GitHub 上的 Human-Agent-Society。仓库 README 按姓氏字母顺序列出了多位贡献者(如 Ao Qu、Bo Liu、Han Zheng 等),并致谢了推理侧的 SGLang、权重训练侧的 slime、以及 harness 进化侧的 cordis。官网与文档入口为 reefinfra.ai,快速上手见 Quickstart。

项 核实结果(截至 2026-09-29)
仓库 https://github.com/Human-Agent-Society/reef
许可证 Apache-2.0(仓库根目录 LICENSE 为 Apache License 2.0;pyproject.toml 与 PyPI license_expression 同为 Apache-2.0)
语言 / 运行时 Python 3.12+;PyPI 包名 reef-infra,import 名为 reef
近期发布 GitHub / PyPI 最新为 v0.1.1(约 2026-09-26 00:51 CST 发布);此前有 v0.0.1、v0.0.2、v0.1.0
活跃度 仓库创建于 2026-08-31;main 上近期仍有提交(例如约 2026-09-28 有 harness 安装与文档相关修复);公开数据约 6.8k stars、约 600+ forks

项目仍处 0.x,官方文档与 README 都在快速迭代,接入生产前应把版本钉死,并关注破坏性变更。

Continual learning 在 Reef 里怎么落地

文档把 Reef 的学习循环写成四步,对应仓库里的模块划分:

  1. Serve:响应请求,并把交互记成 record。
  2. Observe:把反馈(score、文本或结构化 feedback)匹配到对应交互,判断是否进入训练批次。
  3. Grow:由当前部署绑定的 recipe 基于合格记录产出候选更新。
  4. Commit:按选择策略做评估与发布;通过的写入该 scenario 的 release 链,未通过则继续服务当前版本。

这里有两个对工程读者很重要的概念:

  • Scenario:一类工作负载(例如代码审查、数学解题)。每个 scenario 有独立的记录、训练状态和 release 链;请求头 x-reef-scenario 指定场景名。
  • Receipt:响应头 x-reef-agent-record-id 里的记录 ID。后续 POST /reef/report 用它引用「刚才那次回答」,把分数或反馈挂回去。

可进化的对象不只是权重。官方文档写明两类 surface,由 recipe 决定:

  • 模型权重:训练步骤跑完后,把新权重热更新进服务引擎(权重类 recipe 依赖 GPU 训练栈,如 Slime + SGLang 路径)。
  • Harness 树:提示词、规则、技能、配置等;提出修改、在任务上对比当前版与候选版,留下胜者。笔记本路径上常用内置的 Reefine(只需模型端点,不必本地训练 GPU)。

Recipe 目录按任务类型组织,例如任务流上的 SAO / GEPA、使用数据上的 OpenClaw-RL / SkillClaw / Reefine、科学发现类的 TTT-Discover 等。需要如实说明:随 reef-infra wheel 直接带上的主要是 Reefine 等内置能力;SAO、OpenClaw-RL、SkillClaw 等 cookbook 实现主要在仓库 recipes/ 中,需源码检出并用 dotted class 引用加载,不能默认「pip 一下就全有」。

和「只会调模型」的 Agent 差在哪

很多业务 Agent 的形态是:应用调 OpenAI 兼容接口,Prompt 写死在代码或配置里,失败了靠人改。Reef 不替代你的业务逻辑,而是把「服务」改成「可学习的服务」。对照官方 README 的能力表,可以这样理解差异:

维度 只会调模型 / 业务侧拼接口 纯推理引擎(vLLM、SGLang 等) 纯 RL 训练框架 Reef(官方定位)
承接线上流量 有(应用层) 有 通常没有(偏 rollout) 有(兼容 /v1/chat/completions、/v1/messages)
把每次交互变成可训练记录 一般没有统一协议 不做 有,但面向训练任务 有(receipt + report)
训练权重 无 无 有 有(权重类 recipe)
进化 harness(技能、规则等) 人工改文件 无 通常无 有
版本门控与线上热更新 靠 CI/CD 无统一学习门控 训练与服务分离 评估通过才发布;权重更新可不重启服务进程
反馈从哪来 日志里零散存在 不负责 环境 reward 应用显式上报;信号质量仍由你设计

换句话说:Reef 解决的是「部署后如何把反馈闭环成版本化产物」,而不是「帮你自动想出 reward」。官方与第三方评测都反复强调:没有可靠的打分信号,持续学习只会放大噪声。若目标只是「记住用户偏好」,记忆层方案往往更轻;Reef 更适合「有可度量结果、希望权重或 harness 随使用推进」的场景。

上手路径

依赖层面:系统需安装 git-lfs(artifact / checkpoint 依赖);推荐用 uv;Python ≥ 3.12。

1. 安装

# 系统侧先装好 git-lfs,并执行一次
git lfs install

uv venv && source .venv/bin/activate
uv pip install reef-infra
python3 -c "import reef; print(reef.__version__)"

源码开发或跑 cookbook recipe 时:

git clone https://github.com/Human-Agent-Society/reef.git
cd reef
uv venv && source .venv/bin/activate
uv pip install -e .

2. 最小闭环:接上游 API、记交互、报反馈(无需 GPU)

官方 Quickstart 的路径是:Reef 作为兼容层,把请求转给上游 OpenAI 兼容服务,本地只做记录与报告。

export REEF_TOKEN=reef-local
export REEF_UPSTREAM_API_KEY=sk-...   # 换成你的上游密钥

reef serve \
  --inference.upstream-url https://api.openai.com \
  --inference.upstream-model gpt-4o

另开终端检查健康,再发推理并上报:

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

reef = httpx.Client(
    base_url="http://127.0.0.1:8900",
    headers={
        "Authorization": "Bearer reef-local",
        "x-reef-scenario": "hello-reef",
    },
)

response = reef.post(
    "/v1/chat/completions",
    json={
        "model": "gpt-4o",
        "messages": [{"role": "user", "content": "Return exactly: reef is ready"}],
    },
)
response.raise_for_status()
receipt = response.headers["x-reef-agent-record-id"]
matched = response.json()["choices"][0]["message"]["content"].strip() == "reef is ready"

reef.post(
    "/reef/report",
    json={
        "score": float(matched),
        "feedback": "matched" if matched else "wrong answer",
        "references": [receipt],
    },
).raise_for_status()

默认不绑学习 recipe 时,release 链可能只有创建记录、不会前进;要真正「学起来」,需要在配置里选定会学习的 recipe。笔记本上优先试 harness 进化(例如 Reefine / evolve-your-harness 教程);权重类(如 SAO)请按 Evolve your model 准备 GPU 与训练后端,不要把「能 serve」等同于「已在训权重」。

3. 可选:Reefine 走 harness 进化

README 中的示意(需模型端点,例如本机 Ollama):

reef serve --recipe reefine \
  --inference.upstream-url http://127.0.0.1:11434 \
  --inference.upstream-model gemma4:26b

再创建 scenario、安装 harness 适配器,并用自然语言提出规则变更(细节以当前文档与 tutorials/ 为准)。文档写明:默认 Reefine 监听 127.0.0.1:8901,未设 REEF_TOKEN 时不做鉴权,不要裸暴露到公网。

当前文档覆盖:安装、Quickstart(推理 + report)、HTTP API、写 recipe、演化 harness / model、recipe 目录与部分结果页。训练镜像、多 GPU 拓扑、各 recipe 的 reward 设计,需要跟进对应 user-guide;Cookbook 结果页里也写了任务设定与局限,建议直接读原文,而不是只看 star 数。

适合谁,以及要注意什么

比较合适的人:已经有可自动化的结果信号(单测通过率、verifier、任务完成判定)的 Agent 团队;想在同一套 runtime 上对比不同 continual learning 方法的研究者;手头在维护 coding agent 技能库、想先用 Reefine 试「从会话里长出规则/技能」的工程师。对 Spring / Java 读者而言,业务侧通常只需把现有 HTTP 客户端指到 Reef 的 OpenAI 兼容地址,并带上 scenario 头与 receipt 回传,学习循环本身跑在 Python 服务进程里。

不太合适的场景:只想做会话记忆、没有打分意图;本季度需要 API 稳定、不能跟 0.x 一起晃;没有 GPU 预算却一上来就绑权重训练 recipe;把「持续学习」当成免运维黑盒,却不愿设计反馈质量与回滚策略。

额外注意:harness proposer 会改配置树并可能执行变更后的 harness,沙箱能力与平台相关(文档提到 Linux 上 bwrap/pasta 等);权重与 artifact 会占磁盘;鉴权默认偏开发态。生产接入前应核对 token、网络边界与 release 回滚流程。

小结

Reef 不是又一个「对话框架」,而是试图把 线上推理与部署后学习 合成一件基础设施:用 receipt/report 收反馈,用 recipe 决定学什么,用评估门控决定发不发版,并同时覆盖权重与 harness。对习惯 Spring 生态的工程团队,价值在于接口形态熟悉(OpenAI/Anthropic 兼容),闭环边界清楚;成本在于 0.x 的变更速度、权重路径的算力门槛,以及你必须自己定义「什么叫变好了」。

若你正在为「Agent 上线后只会调模型、不会从纠错里长进」发愁,可以从无 GPU 的 Quickstart 与 Reefine 路径摸一遍闭环,再决定要不要上 cookbook 里的权重 recipe。

相关链接


评论