如何编写你的第一个Gene:Evolver基因结构(signals_match与strategy)完全图解
如何编写你的第一个GeneEvolver基因结构signals_match与strategy完全图解【免费下载链接】evolverThe GEP-powered self-evolving engine for AI agents. Auditable evolution with Genes, Capsules, and Events. | evomap.ai项目地址: https://gitcode.com/GitHub_Trending/evolv/evolverEvolver 是一个基于 GEP 协议的 AI 智能体自进化引擎而Gene基因就是它沉淀经验的核心资产。本文面向新手用最小的代码量带你完整看懂 Gene 的结构并一步步写出你自己的第一个 Gene——重点拆解两大灵魂字段signals_match什么时候唤醒基因和strategy唤醒之后该做什么。为什么是 Gene而不是更长的技能文档Evolver 背后的研究论文From Procedural Skills to Strategy Genes在 4,590 次对照实验中得出结论紧凑的 Gene 表示比冗长的 Skill 文档更稳定、表现更强是承载经验迭代的更好载体。一个 Gene 本质上是一份条件反射组成部分回答的问题类比signals_match什么情况下触发神经元的刺激阈值strategy触发后按什么步骤做肌肉记忆的动作序列validation怎么证明做对了体检标准constraints边界在哪里安全带Gene 存放在两个位置运行时资产库workspace/.evolver/gep/genes.json本地生成、被 git 忽略随包发布的种子基因assets/gep/genes.seed.json首次运行时自动初始化到你的本地库 想先跑起来感受一下可以参考 examples/hello-world.md 里的 3 步上手流程。Gene 结构总览一次看懂 8 个核心字段Gene 的单一事实来源定义在 src/gep/schemas/gene.js。所有创建/消费 Gene 的模块都必须通过createGene()和validateGene()来处理它而不是各自假设字段存在。{ type: Gene, id: gene_repair_ci_failure, category: repair, summary: 一句话描述这个基因解决什么问题, signals_match: [test_failure, ci_failed|CI失败], preconditions: [当前没有更严重的 error 信号], strategy: [第一步……, 第二步……, 最后一步固化经验], validation: [node scripts/validate-suite.js], constraints: { max_files: 20, forbidden_paths: [.git, node_modules] } }各字段说明type固定为Gene校验器会拒绝其他值id唯一标识字符串。注意从外部摄入基因时不会覆盖本地同 ID 的基因category四类之一写错会被自动归为默认值innovatecategory适用场景repair修 bug、处理报错、恢复稳定性optimize性能、成本、流程效率优化innovate响应用户新功能请求、能力缺口explore探索未知方向summary一句话摘要供人类审阅schema_version省略时默认为1.6.0signals_match 详解给基因装一个精准触发器signals_match是一个字符串数组是基因被唤醒的唯一入口。工作流程是Evolver 的 Selectorsrc/gep/selector.js先从日志中抽取结构化信号再与每个基因的signals_match逐条匹配、评分选出得分最高的基因——整个过程会输出可审计的选择决策 JSON。三种常用写法1️⃣ 小写下划线事件词推荐首选这是系统自身会产出的信号 token最稳定signals_match: [log_error, test_failure, tool_loop]2️⃣ 英文关键词子串匹配不区分大小写signals_match: [error, exception, failed]3️⃣ 用|写多语言变体官方种子基因的标准做法观察 assets/gep/genes.seed.json 里的修复基因signals_match: [error|错误|エラー|오류, failed|失败|失敗|실패|fail]一个条目内用|分隔的同族词只要有任意一个命中就算匹配多语言支持在 test/selector.test.js 的 issue #98 专项用例中得到了验证。写 signals_match 的 3 条经验宁窄勿宽写ci_failed而不是fail——太宽泛的触发词会让基因到处误触发先查后写优先复用系统已有信号 token如log_error、test_failure它们由信号检测器直接产出匹配最可靠一个基因一个场景发现这个基因好像也适合那个场景时通常说明该拆成两个基因strategy 详解把成功路径写成动作清单strategy是一个有序字符串数组每句话是一条可直接执行的指令。它是基因的行为剧本质量直接决定进化效果。看看官方修复基因的标准节奏摘自 assets/gep/genes.seed.json从日志和用户指令中提取结构化信号按 signals match 选择已有 Gene禁止即兴发挥动手前评估爆炸半径涉及哪些文件、多少行应用最小可回滚补丁按声明的 validation 步骤验证失败即回滚固化知识追加 EvolutionEvent更新 Gene/Capsule 存储这 6 步就是 Evolver 基因圈的通用范式感知 → 复用 → 评估 → 最小变更 → 验证 → 固化。你写自己的基因时照着这个节奏填充即可。写 strategy 的 3 条经验✍️用祈使句写动作Rungit diff检查变更 优于 可以检查一下变更⚖️每步都可判定写完自问执行者能明确判断这一步做没做完吗把踩过的坑写进avoid或anti_patterns种子基因普遍带反模式清单如gene_gateway_timeout_recovery明确写出不要对同一大调用重试超过一次这是基因越用越聪明的重要来源validation 与 constraints给基因上安全锁 ️validation是验证命令数组成功执行才算基因固化solidify成功。安全机制必须知道只允许以node/npm/npx开头的命令禁止命令替换反引号、$(...)和 shell 操作符;|每条命令限时 180 秒以仓库根目录为工作目录所以像node --version、node scripts/validate-suite.js都是合格的 validation带管道符的复合命令会被直接拒绝。constraints划定行为边界字段默认值含义max_files20本次进化最多触碰的文件数forbidden_paths.git、node_modules永远不许碰的路径preconditions可选则是前置检查例如gene_tool_integrity基因声明只有在agent 用 shell 做了注册工具能完成的事时才触发。动手写出你的第一个 Gene假设你的 Agent 经常在 CI 测试失败后盲目重试。把它沉淀成一个基因{ type: Gene, id: gene_repair_ci_retry_loop, category: repair, summary: CI 测试失败时先定位首个失败用例禁止盲目重跑整条流水线, signals_match: [test_failure, ci_failed|CI失败, repeated_tool_usage:exec], preconditions: [存在至少一条具体的失败用例输出], strategy: [ 从日志中定位第一条失败的测试用例及其断言信息, 判断失败属于代码缺陷、环境缺失还是测试本身不稳定, 只针对该用例做最小修复不顺手改动其他文件, 重跑失败用例确认通过而不是重跑整条流水线, 固化追加 EvolutionEvent若模式新颖则更新本基因 ], validation: [node scripts/validate-suite.js], constraints: { max_files: 10, forbidden_paths: [.git, node_modules] } }写好之后把它追加到workspace/.evolver/gep/genes.jsonJSON 数组。注意直接用createGene()风格的完整字段结构可以避免缺字段带来的意外默认值。3 步自检你的基因结构校验跑官方测试套件确认环境正常node --test test/schemaGene.test.js覆盖了createGene/validateGene的全部默认值与归一化行为见 test/schemaGene.test.js匹配校验node --test test/selector.test.js验证你的 signals 能被正确选中、且不会误触发别的基因实跑演练node index.js --review以人工复核模式跑一次进化检查 Selector 决策 JSON 里是否选中了你的基因、理由是否合理进阶可选字段routing_hint 与 tool_policy如果你的运行环境启用了 EvoX agent-core还可以给基因加两个可选提示字段省略即为无意见交给路由器默认处理routing_hinttier取cheap/mid/expensivereasoning_level取off/low/medium/high。例如实测只查一个文件的基因可标为{tier: cheap, reasoning_level: low}写错的取值会被静默丢弃而不是报错tool_policyallow_only/deny工具清单 severitywarn/block。⚠️ 注意空数组allow_only: []语义是禁用所有工具宁缺毋滥常见错误清单 ⚠️错误后果修正signals_match写成[error]这类宽词基因到处误触发换成具体事件 token 或场景词category拼写错误静默回退为innovate无报错只使用四类合法值validation里写带;或管道的命令被安全检查拒绝基因永远无法固化拆成多条纯node/npm命令strategy里写视情况而定执行者无法判定完成标准每步写成可验证的祈使句忘记summary人类审阅时看不懂基因意图一句话写清解决什么问题下一步通读种子基因库 assets/gep/genes.seed.json里面 10 多个官方基因覆盖了 repair / optimize / innovate 各类场景是最好的范文想改引擎本身或提交 PR先看 SKILL.md 了解 Agent 集成方式跑通第一个进化循环后观察events.jsonl里你的基因被选中的记录——被复用的次数就是基因价值的度量 记住 Evolver 的核心信条进化不是可选项而是生存法则。而一个写好signals_match与strategy的 Gene就是你写给未来 Agent 的一封可靠经验信。【免费下载链接】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),仅供参考