Evolver GEP资产为什么升级不覆盖?GEP_ASSETS_DIR与本地资产保护完整指南
【免费下载链接】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(Genome Evolution Protocol)的 AI 智能体自进化引擎中,Genes、Capsules 和 Events 三类资产是智能体"进化记忆"的核心。很多用户担心:升级版本后,自己积累在genes.json里的基因会不会被官方文件覆盖?答案是——不会。本文带你从源码层面理解GEP_ASSETS_DIR的配置方式,以及 Evolver 通过"目录分离 + 只增不改 + 强制更新保护清单"实现本地资产保护的具体机制。
先搞懂:GEP 资产有两套"家"
Evolver 把资产分成了两个互不干扰的位置:
| 位置 | 路径 | 归属 | 谁可以改 |
|---|---|---|---|
| 内置资产 | assets/gep/ | 官方随包发布 | 只读,升级时可更新 |
| 运行时资产 | <workspace>/.evolver/gep/ | 你的本地运行数据 | 只属于你,升级永不触碰 |
运行时资产目录包含以下文件:
genes.json/genes.jsonl—— 基因库(进化策略单元)capsules.json/capsules.jsonl—— 胶囊库(成功的完整执行方案)events.jsonl—— 进化事件日志(可审计链路)candidates.jsonl、failed_capsules.json等辅助文件
内置资产中,官方提供了启动种子文件 assets/gep/genes.seed.json,里面预置了gene_gep_repair_from_errors(错误修复)、gene_gep_optimize_prompt_and_assets(提示词优化)等基础基因,仅用于"开箱即用"。
路径解析逻辑在 src/gep/paths.js#L194-L201:默认资产目录是<workspace>/.evolver/gep/,而内置目录由getEvolverInstallRoot()指向安装包内的assets/gep/,两者从根上就隔离开了。
升级不覆盖:GEP 资产保护的 4 层机制
1️⃣ 首次运行"种子化":只在文件不存在时写入
核心逻辑在 src/gep/assetStore.js#L349-L385 的ensureGenesSeeded():
- 本地
genes.json不存在→ 从官方种子整体拷贝一份(日志提示Seeded ... from genes.seed.json); - 本地
genes.json已存在→ 直接跳过,绝不覆盖。
这就是"首次填充、后续尊重"的原则:你的基因库从诞生那一刻起就归你所有。
2️⃣ 后续升级"只增不改":按 ID 去重追加
如果你本地库看起来是旧版内置种子(命中 2 个以上历史种子基因 ID 标记),升级时 Evolver 会把新增的"升级基因"追加到末尾,但严格遵循:
- 已存在的基因 ID 一律跳过(
selectBundledUpgradeGenes按 ID 去重); - 你手动修改过的基因、自己蒸馏出的基因,一个字节都不会被改动;
- 空库、手动编写的小型测试库完全不受影响。
整个过程由文件锁(withFileLock,src/gep/assetStore.js#L95-L102)保护,配合原子写入(先写.tmp再rename),即使守护进程、CLI 脚本、cron 多进程同时写也不会损坏文件。
3️⃣ 旧版文件迁移:只拷贝、不删除
如果你曾使用过早期版本、资产还躺在assets/gep/里,migrateLegacyRuntimeAssets()(src/gep/assetStore.js#L285-L308)会在首次运行时把genes.json、capsules.json、events.jsonl等 8 类旧文件复制到.evolver/gep/,且:
- 目标文件已存在则跳过,不覆盖;
- 原始文件原样保留,不做任何删除;
- 设置过
GEP_ASSETS_DIR时自动跳过迁移,以你的自定义目录为准。
4️⃣ 强制更新"保护清单":.evolver目录整体保留
Evolver 支持从 Hub 强制拉取新版本代码(src/forceUpdate.js),替换代码文件时会遇到一个保护清单(src/forceUpdate.js#L403):
.env / .env.local / USER.md / .evolver/也就是说,无论版本代码怎么更新,你整个.evolver/gep/资产目录都不在替换范围内。回归测试 test/forceUpdateKeepList.test.js 明确验证了"升级后.evolver/config.json必须保留、旧代码文件必须被替换",资产保护行为是被测试覆盖的长期承诺。
GEP_ASSETS_DIR 配置:把资产库放到你想要的位置
默认情况下资产在<workspace>/.evolver/gep/,如果想把运行时资产库放到别处(比如集中管理多个智能体、或备份到独立磁盘),只需设置环境变量GEP_ASSETS_DIR:
# .env 或 shell 环境 GEP_ASSETS_DIR=/data/my-evolver-assets设置后的效果(src/gep/paths.js#L194-L201):
- 所有基因、胶囊、事件文件都读写到新目录;
- 旧版
assets/gep/迁移逻辑自动停用(避免误拷贝); - 只读路径解析也会优先尊重你的自定义目录。
配合EVOLVER_SESSION_SCOPE,还可以在目录下自动加一层scopes/<scope>/子目录,实现多会话资产隔离。
万一资产丢了怎么办?Hub 一键恢复
官方文档(README.md#L402-L414)专门有一节说明:如果你曾用旧版本、本地资产被意外清空,只要 Promote/发布过资产,就能用一条命令从 Hub 找回:
A2A_HUB_URL=https://evomap.ai evolver sync --scope=all --export=backup.gepx它会把"你发布过的"和"你购买/推广获得的"资产全部重新拉取并写回genes.json/capsules.json,同时打包成便携的.gepx备份文件。注意:从未上传 Hub 的纯本地资产没有远端副本,只能从.evolver/gep/或磁盘快照恢复——所以定期备份资产目录是好习惯。
常见问题速答
Q:升级后assets/gep/里的文件变了,我的资产会受影响吗?不会。assets/gep/只是官方内置资产的存放地,你的运行数据在.evolver/gep/,两者职责分离(详见 README.md#L390-L414)。
Q:我想清空资产重新开始?删除或改名<workspace>/.evolver/gep/(或GEP_ASSETS_DIR指向的目录)即可,下次启动会自动重新种子化。
Q:怎么验证保护机制真的生效了?项目自带测试用例 test/assetStore.test.js(验证生产路径将用户可修改资产留在GEP_ASSETS_DIR)与 test/forceUpdateKeepList.test.js(验证强制更新保留.envolver/),可以直接参考断言内容。
总结
Evolver 对 GEP 资产的保护可以浓缩为一句话:内置资产归官方,运行时资产归用户,升级永远只做"加法"。通过目录分离、按 ID 去重追加、只拷贝不删除的旧版迁移,以及强制更新保护清单这 4 层机制,加上GEP_ASSETS_DIR的灵活重定向能力,你的进化记忆在版本迭代中始终安全、可审计、可备份。
【免费下载链接】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),仅供参考