Evolver的Selector是怎么工作的:信号匹配与Gene选择的深度解析
2026/9/17 14:49:03 网站建设 项目流程

Evolver的Selector是怎么工作的:信号匹配与Gene选择的深度解析

【免费下载链接】evolverThe GEP-powered self-evolving engine for AI agents. Auditable evolution with Genes, Capsules, and Events. | evomap.ai项目地址: https://gitcode.com/GitHub_Trending/evolv/evolver

Evolver 是一个由 GEP 协议驱动的 AI 智能体自我进化引擎,它的 Selector(选择器)负责最关键的一步:把检测到的信号(Signals)与基因(Gene)库进行匹配,选出最合适的一条 Gene 来驱动本轮进化。本文面向新手,带你完整看懂 Evolver Selector 的信号匹配流程、Gene 选择打分机制和可审计的决策输出,无需阅读源码也能建立清晰的心智模型。

进化闭环中的 Selector:一个"调度员"

先建立一个整体图景。Evolver 的每次进化都沿一条流水线运行,大致分为五个阶段:

collect(收集日志) → signals(提取信号) → select(选择 Gene)→ enrich(组装上下文)→ dispatch(输出 GEP 提示词)

Selector 就站在流水线的中间位置,它不自己"发明"策略,而是像调度员一样:拿着当前问题(信号),去基因池里找最对症的那条 Gene

对应的源码模块:

  • 信号提取:src/gep/signals.js
  • 选择器本体:src/gep/selector.js
  • 流水线中的选择环节:src/evolve/pipeline/select.js
  • 种子基因池:assets/gep/genes.seed.json

第一步:信号从哪来

Selector 的输入是一组"信号",由extractSignals从日志、会话和运行历史中抽取。典型信号分两类:

信号类型例子含义
故障类errorlog_errortest_failure系统出了问题,需要修复
机会类user_feature_requestperf_bottleneckcapability_gapstable_success_plateau一切稳定,适合做创新

一个设计亮点是:信号模式是多语言正则。种子基因里的匹配词写成error|错误|异常|エラー|오류这样的形式,也就是说中文、日文、韩文的错误描述同样能命中同一条修复类 Gene。这让 Evolver 对使用不同语言记录日志的智能体都能"听懂"。

第二步:信号匹配的三层漏斗

拿到信号后,Selector 对每条 Gene 计算匹配分数,匹配分三层递进:

1️⃣ 直接关键词匹配

每条 Gene 都声明了自己的signals_match列表。比如修复类 Gene 声明了errorfailedunstable等关键词,信号里每命中一个词就加分。

2️⃣ 结构化信号匹配

信号可以是baseName:snippet的格式,例如user_feature_request:给设置页加一个暗色开关。Selector 会只用 baseName 部分(冒号前)去匹配 Gene,冒号后的具体描述不影响命中——这保证了"信号类型决定走哪条 Gene",而不是被描述细节带偏。

3️⃣ 语义相似度匹配

当字面匹配不够精确时,Selector 会做语义兜底:把信号文本和 Gene 的描述分别分词(tokenize,过滤 this、but、also 等无信息量词),计算两组词的余弦相似度,再乘以一个权重(默认 0.4)计入总分。也就是说,"perf_bottleneck" 这类学习标签即使没有写进某条性能优化 Gene 的signals_match,也能靠语义被关联上。

第三步:打分修正——记忆与经验如何影响选择

原始匹配分不是最终分。Selector 会用多类"修正项"调整每条 Gene 的得分:

  • 学习历史加分learning_history中 outcome 为success的 Gene 得分上调,失败则下调;
  • 反模式降权:如果某条 Gene 反复踩中同一个 anti_pattern(硬失败),会被明显降权,避免"同一块石头绊倒两次";
  • 表观遗传抑制:被标记抑制的 Gene(isEpigeneticallySuppressed)直接排除在候选之外;
  • 记忆建议(memoryAdvice):记忆图会给出偏好 Gene(preferred,得分乘以一个小于 1 的系数——只能锦上添花,不能翻盘)、强制 Gene(forced,无视分数直接选中,但会被封禁名单拦截)、以及封禁 Gene 名单(banned,连强制选择都救不回来)。

这套机制的设计意图是:经验可以倾斜选择,但信号匹配仍然是主导——一个高分 Gene 不会因为记忆偏好而输掉给明显更匹配的另一条 Gene。

第四步:Gene 选定后,Capsule 如何搭配

选出 Gene 后,Selector 还会从胶囊池(Capsules)里挑出触发器(trigger)与当前信号匹配的胶囊,作为"历史成功案例"注入上下文。Capsule 本质是"某次成功进化的打包记录",让本轮进化能参考过去真实跑通过的方案,而不是空谈策略。

此外还有一个driftIntensity(漂移强度)参数:在基因池较大或连续多轮成功时,Selector 允许一定概率地随机挑选 Gene,充当进化算法里的"变异",防止系统在局部最优上打转。

可审计的决策输出:为什么这件事重要

Selector 的输出不是一个简单的 Gene ID,而是一个完整的决策结构(由buildSelectorDecision生成):

字段作用
selected最终选中的 Gene ID
reason人类可读的选中文本(例如"forced_gene_selected: xxx")
selectionPath选择路径:forced_genememorysemantic或默认匹配
alternatives落选候选及其分数,方便复盘
memoryUsed/memoryEvidence本次决策是否用了记忆、用了多少证据

这份决策会随EvolutionEvent一起写入审计日志。每一步"为什么选这条 Gene"都可以事后追溯——这正是 Evolver 区别于"随机改提示词"的核心价值。

一个完整例子

假设日志里出现了errortest_failure两个信号:

  1. 信号提取阶段产出['error', 'test_failure']
  2. 修复类种子 Genegene_gep_repair_from_errorssignals_match命中多个关键词,得分最高;
  3. 创新类 Gene 因 preconditions 要求"无活跃 error 信号"而不参与;
  4. Selector 输出selected: gene_gep_repair_from_errorsselectionPath为默认匹配;
  5. 引擎按该 Gene 的strategy步骤执行:评估影响面 → 最小可逆补丁 → 验证 → 失败则回滚 → 成功后固化为新事件。

这套"信号 → 匹配 → 打分 → 决策 → 审计"的完整链路,你可以在 test/selector.test.js 中看到大量针对边界情况的断言:强制 Gene 会被封禁拦截、语义匹配能关联性能类 Gene、反复失败的 Gene 会被降权……这些测试就是选择器行为的"活文档"。

延伸阅读:关键文件路径

想继续深入时,建议按这个顺序读源码和资料:

  • 选择器核心:src/gep/selector.js
  • 信号提取与分类:src/gep/signals.js
  • Gene 结构定义:src/gep/schemas/gene.js
  • 种子基因池(repair / optimize / innovate 三大类):assets/gep/genes.seed.json
  • 选择环节在流水线中的位置:src/evolve/pipeline/select.js
  • 选择器行为测试:test/selector.test.js

小结

Evolver 的 Selector 用三层匹配漏斗 + 多层经验修正 + 可审计决策输出,把"这轮进化该干什么"从玄学变成了可解释的工程问题:信号决定候选,经验微调得分,记忆可以倾斜但无法翻盘,而每一次选择都留下完整理由。理解了这个模块,你就掌握了 Evolver 自我进化引擎的"大脑中轴"。

【免费下载链接】evolverThe GEP-powered self-evolving engine for AI agents. Auditable evolution with Genes, Capsules, and Events. | evomap.ai项目地址: https://gitcode.com/GitHub_Trending/evolv/evolver

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询