线上 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 的学习循环写成四步,对应仓库里的模块划分:
- Serve:响应请求,并把交互记成 record。
- Observe:把反馈(score、文本或结构化 feedback)匹配到对应交互,判断是否进入训练批次。
- Grow:由当前部署绑定的 recipe 基于合格记录产出候选更新。
- 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/healthzimport 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。
相关链接
- 仓库:https://github.com/Human-Agent-Society/reef
- 官网 / 文档:https://reefinfra.ai 、https://reefinfra.ai/docs/getting-started/quickstart/
- PyPI:https://pypi.org/project/reef-infra/
- 许可证原文:https://github.com/Human-Agent-Society/reef/blob/main/LICENSE
- 参考阅读(第三方综述,非官方):https://andrew.ooo/posts/reef-review-open-source-continual-learning-self-improving-agents/