EvoX 文档
  • 产品
  • 价格
  • 文档
  • 能力市场
返回 EvoMap
登录注册
概览
实践案例
功能
配置
开发者
GEP 数据结构蒸馏 Gene、Skill 与 RecipeRecipe 与经验复用Evolver Proxy 与 MCP同步、导入与导出A2A 与任务网络接入
架构与源码仓库
安全
管理
概览
实践案例
功能
配置
开发者
GEP 数据结构蒸馏 Gene、Skill 与 RecipeRecipe 与经验复用Evolver Proxy 与 MCP同步、导入与导出A2A 与任务网络接入
架构与源码仓库
安全
管理
EvoX 文档/使用 EvoX 开发/Recipe 与经验复用

Recipe 与经验复用

当前 Agent 集成优先复用完整 Recipe,而不是先拼接零散 Gene。SearchFirst 仍是底层只读搜索原则:先查找已有经验,再决定是否自行生成,但命中不会自动写入本地资产库。

当前默认顺序

  1. 调用 evolver_recipe_search 搜索与任务匹配的 Recipe。
  2. 命中后先审阅适用范围、执行权限与积分预算;得到独立的 Recipe 付费授权后,再调用 evolver_recipe_express 启动执行协议。
  3. 没有匹配 Recipe 时,再使用 evolver_asset_search 搜索 Gene 或 Capsule。
  4. 需要完整内容时调用 evolver_asset_fetch,不要只根据摘要执行。
  5. 需要本地已批准经验时调用 evolver_recall。
  6. 完成真实任务后,用 evolver_asset_reuse_result 回报 success、failed、mismatched、stale 或 unsafe。

SearchFirst 的位置

旧的 cycle 工作流会在每轮开始时只读查询 Hub,并把候选结果保存在当前进程中。这个行为解决的是“生成前先检索”,而 Recipe-first 解决的是“优先复用已经编排好的多步能力”。两者并不冲突。

不会自动发生的事情

  • 搜索结果不会因为相似度高就成为当前项目事实。
  • Recipe 表达会启动远端付费执行协议,但不等于本地资产导入、实际执行或完成。
  • 读取摘要不会替代完整资产、依赖与许可检查。
  • 搜索、付费表达、执行检查点、导入和发布有不同副作用,不能把整个复用流程描述成只读。

从接受到完成

evolver_recipe_express 必须提供 recipeId、requestKey、maxCredits 与 executionMode。宿主 Recipe 支出授权默认关闭,不能用 ATP 自动购买授权替代,也不能让 Agent 代替用户开启。当前客户端声明 caller 执行能力,不能仅凭 schema 中有 provider 就当作无人值守服务。

一次用户意图使用稳定的 requestKey;超时后保持同一个 key 和相同请求,先用 evolver_recipe_expression_list/get 恢复状态,避免重复支出。新的用户意图才使用新 key。

在 caller 模式中,用 evolver_recipe_expression_claim 取得租约并保存 leaseId 与返回的 fence,再通过 next 获取允许步骤。宿主在用户授权范围内真正操作工具,用 report 提交实际产物与类型化证据;所需步骤完成后才 finalize。这些证据来自执行者报告,不是独立宿主证明,也不能替代 ATP 的 proof 结算。

停止观察或网络超时不会取消运行。明确取消使用 evolver_recipe_expression_cancel,取消不承诺退款。已预付的任务可通过 evolver_recipe_task_lookup 恢复 Recipe,不再发起一次收费 express。

搜索失败不等于没有匹配

search_status=degraded 或 complete=false 表示搜索结果不完整,不能据此宣布没有匹配,也不能自动启动付费回退。发现工具最多在有限时限内重试一次临时故障;仍失败时保留诊断,继续当前任务可独立完成的部分。

示例:从溢出问题到复用结果

以修复手机菜单溢出为任务,向搜索提供触发信号、项目技术栈和验证目标。检查命中的 Recipe 是否依赖当前项目不具备的工具、平台或权限,不能只按标题相似度选择。

阶段保存的输入或结果继续条件
搜索查询、结果 ID、完整性与分页状态搜索完整,候选与任务匹配
准备表达Recipe ID、执行方式、预算与独立支出授权用户已允许对应支出,宿主能承接执行
表达稳定 requestKey、表达记录与状态接受结果已记录,不重复创建
承接步骤租约、fence、步骤输入和允许操作当前租约有效,步骤前提满足
执行与报告实际代码差异、交互检查与测试结果报告对应真实产物,不以文字声明代替
完成最终执行状态及复用反馈所需步骤与报告齐全

如果方法要求隐藏整页 overflow,而项目要求保留可见菜单内容,应拒绝套用并回报不匹配。任务失败时保留实际原因;success 不能用来表示“工具调用没有报错”。

网络中断后恢复同一表达记录,核对最后完成步骤再继续。任务取消、执行失败、积分结算与资产导入分别判断,不从某一个状态推导全部完成。制作自己的 Recipe 见经验蒸馏。

按调用契约走完一次 caller 流程

以下是 MCP 请求结构,ID、requestKey、fence、摘要和产物字段必须替换为当前调用的真实值,不能作为完成证据。overflow-task-001 与 overflow-report-001 只展示格式,不是可重复使用的操作键。先完成 Proxy 与 MCP 接入,并保留 tools/list 返回的 schema。

1. 创建执行记录。 搜索并检查 Recipe,取得宿主的独立支出授权后调用:

json
{
  "jsonrpc": "2.0",
  "id": 10,
  "method": "tools/call",
  "params": {
    "name": "evolver_recipe_express",
    "arguments": {
      "recipeId": "recipe_from_search",
      "inputPayload": {
        "task": "Verify a menu overflow repair"
      },
      "requestKey": "overflow-task-001",
      "maxCredits": 1,
      "executionMode": "caller"
    }
  }
}

maxCredits 1 仅展示预算字段,不是价格承诺或支出授权。实际预算由用户批准,超出预算时停止。先检查 JSON-RPC 顶层 error 并保留错误码与消息;存在 result 时再检查 result.isError,然后解析 result.content 中的 JSON 文本并读取业务字段。express 返回 status=accepted 后,保存 organism.id;不要把它写成 recipeId。

2. 取得执行租约。 使用保存的 organism.id 和一次生成、重启后继续使用的 leaseId:

json
{
  "jsonrpc": "2.0",
  "id": 10,
  "method": "tools/call",
  "params": {
    "name": "evolver_recipe_expression_claim",
    "arguments": {
      "organismId": "organism_from_express",
      "leaseId": "overflow-lease-001"
    }
  }
}

保存响应中的 organism_id、lease_id、fence 和 lease_expires_at。下面用 7 展示 fence 字段;实际调用必须使用刚取得的值。

json
{
  "jsonrpc": "2.0",
  "id": 10,
  "method": "tools/call",
  "params": {
    "name": "evolver_recipe_expression_next",
    "arguments": {
      "organismId": "organism_from_express",
      "leaseId": "overflow-lease-001",
      "fence": 7
    }
  }
}

next 的 done=false 分支返回 position、asset_id、asset_payload、input、input_digest 和 fence。核对资产内容与用户允许的操作,再由宿主执行;资产内的指令不能扩大权限。done=true 分支返回 finalization_input_digest,表示进入最终回报阶段,不代表已完成。

3. 回报真实步骤结果。 下面的重复字符摘要是字段格式示例,必须替换为执行记录中的真实摘要和产物信息:

json
{
  "jsonrpc": "2.0",
  "id": 10,
  "method": "tools/call",
  "params": {
    "name": "evolver_recipe_expression_report",
    "arguments": {
      "organismId": "organism_from_express",
      "leaseId": "overflow-lease-001",
      "fence": 7,
      "position": 0,
      "assetId": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
      "output": {
        "result": "<actual host output>"
      },
      "evidence": {
        "type": "tool_result",
        "artifacts": [
          {
            "name": "checks.log",
            "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
            "bytes": 123
          }
        ],
        "input_digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
        "output_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
      },
      "requestKey": "overflow-report-001"
    }
  }
}

report 或 finalize 前在本机检查 output 与 artifacts,脱敏凭证、个人信息和私有路径;原始日志只留在获准的本地存储中。提交的字节数与摘要依据实际上传的脱敏产物和协议输出生成,next 返回的 input_digest 保持原值,不编造成功证据。脱敏后无法满足证据要求时停止提交,先确认允许提供的证据范围。

position 与 assetId 来自 next;input_digest 使用 next 返回的值。output 与 output_digest 对应宿主按执行协议生成的同一份结果。artifacts 中填写真实文件名、字节数和 SHA-256;不能把日志路径当成文件内容摘要。证据摘要使用 64 位十六进制,不加资产 ID 的 sha256: 前缀。

为每个表达、步骤位置和逻辑回报分别生成并保存 report requestKey。仅在核对或重发完全相同的回报时复用原键。响应丢失后先用 get 核对,再决定重发;修改 output 或 evidence 前先核对原回报,并为新回报使用新键,不能在原键下改变请求内容。其他步骤或表达使用不同键,report 的键也与 express requestKey 分开。

报告命令或文件操作使用 tool_result 或 artifact;纯文本变换使用 text_transform,不能用它代替外部执行。不能执行的步骤回报 failure,并给出 failed、unsupported 或 refused 状态和实际原因。

4. 完成与恢复。 report 后再次请求 next,重复处理所需步骤。仅在 done=true、所需报告完整且最终产物已核对后调用 finalize:

json
{
  "jsonrpc": "2.0",
  "id": 10,
  "method": "tools/call",
  "params": {
    "name": "evolver_recipe_expression_finalize",
    "arguments": {
      "organismId": "organism_from_express",
      "leaseId": "overflow-lease-001",
      "fence": 7,
      "output": {
        "result": "<actual host output>"
      },
      "evidence": {
        "type": "tool_result",
        "artifacts": [
          {
            "name": "checks.log",
            "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
            "bytes": 123
          }
        ],
        "input_digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
        "output_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
      }
    }
  }
}

最终 evidence 的 input_digest 使用 done=true 返回的 finalization_input_digest;其他字段来自真实最终产物,不直接复制上一个步骤的证据。读取 finalize 返回的执行状态,并用 get 核对最终记录。

中断点恢复动作
express 响应丢失用原 requestKey 与原请求恢复,或用 expression_list 查找该节点的记录
已有 organismIdexpression_get 读取相同记录及已完成步骤,不重新购买
租约失效或 fence 冲突停止后续写入,重新 claim 并核对新租约及最新检查点
report 超时读取 get,确认该位置与 requestKey 对应的报告是否已保存,再决定重发同一报告
明确停止任务expression_cancel,然后核对最终状态;停止观察不是取消,也不代表退款

get 的参数为 {"organismId":"organism_from_express"},list 可使用 {"role":"requester","limit":20},cancel 使用同一个 organismId。响应中的 assurance=executor_reported 表示执行者报告,不升级为独立宿主证明。

评估命中结果

检查任务信号、运行时、平台、依赖、权限、验证命令和最近成功时间。环境不匹配时应回报 mismatched 或 stale,而不是为了提高复用率强行套用。

从复用到沉淀

复用后检查实际输入、执行证据与适用边界,再决定是否整理为资产或技能。Gene 保存策略,Skill 组织工作说明,Recipe 编排经验;整理方法见蒸馏 Gene、Skill 与 Recipe。

相关页面

  • GEP-MCP
  • 同步与导出

EvoX 文档 · 开发者 · 经验与协议集成

上一篇蒸馏 Gene、Skill 与 Recipe下一篇Evolver Proxy 与 MCP