
如何快速为 Reef 编写自定义 Recipepropose/evaluate 契约与反馈处理器开发者指南【免费下载链接】reefContinual learning infra for self-improving agents项目地址: https://gitcode.com/gh_mirrors/reef7/reefReef 是面向自我改进 Agent 的持续学习基础设施Continual learning infra for self-improving agents。本文将带你编写一个 Reef 自定义 Recipe掌握propose/evaluate 契约harness 进化方法与反馈处理器feedback processor把线上流量变成训练批次两大核心几分钟内看懂契约签名直接上手扩展。先搞懂Recipe 是 Reef 的方法单元在 Reef 中Recipe 决定部署如何学习记录下的流量如何被处理、如何组成一个批次、批次携带什么信号、产出的候选是否替换当前服务版本。而接收记录、断点续训、提交算法状态、运行后端、发布新版本——这些脏活累活全部由 Reef 框架负责你只需聚焦方法本身。Reef 的 Recipe 分两大族契约完全不同动手前先对号入座类型学习对象核心契约典型入口权重配方weight recipe模型权重training_spec() 反馈处理器 训练目标reef/recipe/base.pyHarness 配方harness recipe工具/技能/提示词等外挂proposeevaluate 选择策略docs/developer-guide/write-a-harness-method.rst 动手前先检查如果某个内置 Recipe 的处理器、目标、评估门禁、服务面已经匹配你的方法改配置比写新 Recipe 更快。Harness 配方的核心propose/evaluate 契约Harness 方法harness method只需提供两个函数Reef 就会负责把变更应用到候选 harness、跑评测、记录结果并按选择与发布策略执行。契约签名如下def propose(nodes, samples, models) - Mutation | Sequence[Mutation] | StepProposal | None: ... def evaluate(task, result) - float: ...propose提出一次变更propose接收三个位置参数nodes当前 harness 树按树序排列的(kind, config)对samples一批 ATIFTrajectoryItem样本轨迹在item.trajectory奖励与反馈在item.metadatamodels可调用的模型绑定。models.served就是被测模型models[teacher]等命名绑定来自evolution.models配置调用方式为binding.chat(messages) - str。返回值有讲究返回一个Mutationcreate/update/remove即一次变更提案多个 Mutation 组成一个提案、对应一次评测返回None表示跳过本步StepProposal(mutations, notes)还能附带 JSON 备注记入 commit 指标proposal_notes。需要更多上下文时按名字声明可选关键字参数即可manifest上一步失败清单、rejected最近被拒提案、entries树的 id/name/config 视图、agent_host配置了提议 Agent 时提供。例如requests参数在manual/hybrid训练模式下必须显式声明**kwargs不算数否则启动即报RecipeConfigError。evaluate给一个评测回合打分evaluate(task, result)为一个跑完的评测回合打分result包含退出码、stdout、stderr 和解析后的trajectory跑不起来的回合不会进入evaluate。选择策略如默认的score_comparison、floor、always读取各任务分数列表后决定候选去留你也可以按 选择策略文档 实现自定义CandidateEvaluationPlugin。一个最小的方法示例完整可运行版本见 tutorials/evolve-your-harness/harness/evolution.pydef propose(nodes, samples, models): # 整批都成功就不动出现过失败且规则尚未入库时才追加一条规则节点 if all((s.score or 0.0) 0.0 for s in samples): return None return Mutation(create, final-line-rule, {name: rules, config: {text: RULE}}) def evaluate(task, result) - float: # 最终助手文本以期望答案结尾记 1.0否则 0.0 return 1.0 if _final_text(result.trajectory).endswith(EXPECTED[task]) else 0.0在配置里用点分路径注册即可详见 write-a-harness-methodrecipe: implementation: reef.recipe.cordis:CordisRecipe config: evolution: propose: methods.mine:propose evaluate: methods.mine:evaluate tasks: [[fib] Compute fib(90) exactly. ...]反馈处理器把流量变成训练批次权重配方的心脏是反馈处理器feedback processor。它实现记录进、类型化批次出的四个生命周期方法在训练线程上加锁驱动任何方法都不允许阻塞ingest(record)一条记录到达ready()是否有批次可用build_batch()产出批次会按output_schema校验acknowledge(batch_id)该批次已被训练消费返回被消费的记录 id。契约定义在 reef/train/processors/base.py。关键原则处理器里不出现任何数值计算——优势值与损失族属于训练目标objective的职责。两条反馈路径按需选择路径基类适用场景你要实现报告反馈reportedReportedFeedbackProcessor评分器/测试/用户动作已给出分数make_samplemake_batch计算反馈computedComputedFeedbackProcessor需从流量中派生信号可跨记录关联、模型异步评判ingest用catch_up/dispatch/track/retire关联 异步judgemake_samplemake_batchexpire报告反馈走同步路径引擎在ingest内调用你的make_sample组装 ATIF 轨迹样本引用校验失败直接报错不会静默丢弃报告低分/负分是有效反馈不能拒绝训练。计算反馈走异步路径judge是async def由引擎的私有工作线程等待因此可以调模型、耗时数分钟而不阻塞服务。一个批次就绪后auto模式攒够batch_size个单元引擎负责去重、保留、消费与重启重放——这些机制全部由引擎托管你的代码只需关心样本长什么样、批次长什么样。权重配方的组装点training_spec()一个权重配方 四类静态件 一个绑定它们的类定义见 reef/recipe/base.py训练目标声明损失族并实现prepare(batch, state) - StepSignal步调度StepSchedulingrollout 单元、步长、epochs、shuffle 等由配方而非目标选择处理器上一节讲的反馈处理器报告类型Reef 在入口校验的ReportBase子类畸形报告直接 HTTP 400候选评估每个配方都带一个默认BackendAlwaysSelectPlugin选后端产出的一切。配置项用config_field声明一次即可同时充当 YAML 键、环境变量回退和类型解析器例如batch_size: int config_field(4, envMY_BATCH_SIZE)。 最小样板recipes/sao/ 是官方推荐对照阅读的最小 cookbook 实现recipe.py、processor.py、objective.py加slime/损失族四个文件不到 200 行。发布门禁候选如何被选或拒训练完成后后端导出候选Reef 在步骤与发布之间调用评估插件的evaluate再decide权重配方在部署配置的evaluation段声明工厂CandidateEvaluationPluginFactory子类build每场景调用一次构造函数不得分配模型资源被拒的候选直接丢弃上一版本继续服务决策需按candidate.candidate_id保持幂等且遵循 fail-closed 规则。契约细节见 Python API 参考配置字段见 Configuration。上线前检查清单 ✅模块可导入方法包必须同时能被 Reef 服务与训练驱动导入先跑python -c from my_pkg.my_method import MyMethodRecipe验证点分路径注册recipe.implementation指向my_pkg.my_method:MyMethodRecipe驱动从同一配置读取实现与损失族不要在环境变量里重复声明配置对齐把training.config.global_batch_size设为与配方batch-size相同的值并按损失族文档补齐驱动标志契约失败要抛出缺 token/logprob、不支持的轨迹组装都应 raise而不是丢弃报告安全把样本当作客户端可控数据嵌入提示前用untrusted_text加围栏树条目中严禁存放凭据字段任务列表保持精简Reef 每个评测步骤都会完整跑一遍tasks。延伸阅读权重配方全流程write-a-recipeHarness 方法与选择策略write-a-harness-method处理器两引擎详解processors可运行教程tutorials/evolve-your-harness/、recipes/README.md内置参考实现reef/train/cordis_backend/、reef/recipe/reefine/【免费下载链接】reefContinual learning infra for self-improving agents项目地址: https://gitcode.com/gh_mirrors/reef7/reef创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考