← 返回博客

什么让 Gene 成为 Gene:来自首次社区提交的经验

一位社区开发者提交了包含 50 个心理学说服公式的 PRD——作为 50 个独立 Gene。领域知识非常出色。Gene 抽象从根本上理解错了。以下是我们的收获。

什么让 Gene 成为 Gene:来自首次社区提交的经验

上周,一位社区开发者提交了一份「爆款钩子基因系统」的产品需求文档——50 个心理学说服公式(锚定效应、稀缺信号、社会认同等),帮助内容创作者优化文案。

领域知识令人印象深刻。六大分类涵盖认知偏差、稀缺感、社会认同、对比反差、情感激发、行为设计。不同营销场景的组合策略。甚至有一章专门讨论伦理约束和禁用场景。

只有一个问题:这 50 个条目没有一个是真正的 Gene。


核心误解

PRD 将每个「Gene」定义为一个名称加一段模板文字:

Gene = { name: "锚定效应", template: "原价2999,现在只要99" }

这是一条数据记录。一个查找条目。一行电子表格。

Rotifer Gene 是完全不同的东西:

Gene = export async function express(input)Promise<output>

Gene 接受结构化输入,运行处理逻辑,返回结构化输出。它是可执行函数,不是静态模板。这个区别并非咬文嚼字——它决定了这个单元能否被编译为 WASM、能否被沙箱化、能否被适应度函数 F(g) 评估、能否通过竞争进化。


三公理,逐一验证

Rotifer 的 Gene 抽象建立在三条公理之上。这份 PRD 三条全部违反了——不是因为粗心,而是因为这些公理对新手来说尚不直观。

公理一:功能内聚

一个 Gene 解决一个原子问题。

PRD 的「锚定效应 Gene」和「框架效应 Gene」有完全相同的输入输出结构——都是接受文本,产出优化文本。这不是 50 个独立问题,而是同一个问题的 50 种变体。

❌ 50 个模板 = 50 个 Gene(违反内聚原则)
✅ 50 个模板 = 1 个 Gene + 50 条内部规则(数据驱动的规则引擎)

正确的做法:创建 5-6 个功能各异的 Gene(分析器、评分器、生成器、改写器、安全守卫),50 个公式作为内部数据文件,由 express() 函数作为规则引擎消费。

公理二:接口自足

Gene 的接口(Phenotype)必须完整描述其能力。

每个 Gene 发布一个 phenotype.json——它的身份证。定义了 inputSchemaoutputSchema、领域、保真度、透明度声明和依赖关系。没有 Phenotype,Gene 无法被索引、无法被发现、无法被 L2 Calibration 评分、无法进入 Arena 竞争。

PRD 的 50 个条目没有任何一个定义了 Schema。没有 inputSchema,没有 outputSchema,没有保真度声明。在 Rotifer 生态中,它们是不可见的。

公理三:独立可评估

Gene 必须能够被适应度函数独立测试和评分。

F(g)=Srlog(1+Cutil)(1+Rrob)LRcostF(g) = \frac{S_r \cdot \log(1 + C_{util}) \cdot (1 + R_{rob})}{L \cdot R_{cost}}

这个乘法模型意味着分母中任何零值都会淘汰 Gene。但评估需要可观测的行为——输入进去,输出出来,质量可量化。静态模板字符串没有可量化的行为。你无法评分一条数据记录的「鲁棒性」或「利用率」。

只有可执行的 Gene 才能参与自然选择。


正确的架构是什么样的

以下是如何将 50 个说服公式重构为正规的 Rotifer Gene:

发布到生态的(5-6 个独立 Gene):
[hook-analyzer] Native 检测文本中的心理学钩子
[hook-scorer] Native 评估钩子效果
[hook-generator] Hybrid 通过 LLM 生成带钩子的文案
[hook-rewriter] Hybrid 向已有文案注入/增强钩子
[hook-strategy] Native 根据场景推荐钩子组合策略
[hook-guard] Native 伦理过滤,拦截操控模式

50 个公式成为 hook-analyzer 内部的数据文件:

genes/hook-analyzer/
├── phenotype.json ← 身份证(Schema + 元数据)
├── index.ts ← express() 函数(真正的 Gene)
├── patterns/
│ └── hook-patterns.json ← 50 个公式(内部数据)
└── README.md

注意保真度声明:hook-analyzerhook-scorerNative——纯模式匹配和评分,不需要网络访问,编译为 WASM 在沙箱中执行。hook-generatorhook-rewriterHybrid——调用 LLM API,必须在 Phenotype 中声明 network.allowedDomains。原 PRD 把所有内容标记为「Native(零网络依赖)」,同时描述了需要 LLM 和搜索 API 的功能。

诚实的保真度声明不是官僚主义。它决定了安全边界和沙箱执行策略。


1-Gene-50-Rules 模式

这是关键的思维转换。当你的领域知识建议 50 个条目时,问自己:这是 50 个不同的问题,还是同一问题的 50 个实例?

如果输入输出结构完全相同,你拥有的是一个规则引擎,而非 50 个 Gene。

// hook-patterns.json(节选)
{
"cognitive_bias": {
"anchoring": {
"id": "CB-01",
"name": "锚定效应",
"indicators": ["原价", "市场价", "价值", "仅需", "只要"],
"pattern": "extreme_number_followed_by_contrast",
"weight": 0.8,
"riskLevel": "low"
},
"availability_heuristic": {
"id": "CB-02",
"name": "可得性启发",
"indicators": ["就像", "想象一下", "你有没有经历过"],
"pattern": "familiar_scenario_substitution",
"weight": 0.6,
"riskLevel": "low"
}
},
"scarcity": {
"quantity": {
"id": "SC-01",
"name": "数量稀缺",
"indicators": ["仅剩", "限量", "最后", "名额"],
"pattern": "finite_quantity_claim",
"weight": 0.9,
"riskLevel": "medium",
"ethicsCheckRequired": true
}
}
}

express() 函数遍历这些规则,将模式与输入文本匹配,返回结构化分析结果。50 个公式作为领域数据发挥价值,而非重复的 Gene 结构。


Guard Gene:让伦理约束可执行

原 PRD 包含三条笼统的伦理准则(「不要误导」「尊重用户」「遵守法律」)。合理但不可执行。

Rotifer 提供了让伦理约束可执行的机制:Guard Gene。Guard Gene 坐在处理管道中,在输出到达消费者之前进行过滤。

对于钩子系统,Guard Gene 应检测:

Guard 不是可选的装饰。在正确配置的 Agent 中,管道是:hook-generator → hook-guard → output。Guard 有否决权。而且因为 Guard 本身也是 Gene,它同样参与适应度评估——过于激进(拦截合法内容)或过于宽松(放行操控内容)的 Guard 会被更优秀的竞争者淘汰。


Phenotype:每个人都跳过的部分

新开发者持续低估 Phenotype 的重要性。「不就是元数据吗」——为什么要花时间写 JSON Schema,不如直接写代码?

因为没有 Phenotype,你的 Gene 就是一个黑盒。Phenotype 支撑了:

每个字段都服务于生态。跳过它,你构建了一个能工作但无法被发现、无法被比较、无法进化的 Gene。


我们学到了什么

这次审评教给我们的和教给贡献者的一样多。三个收获:

1. Gene 抽象并不直观。 「Gene = 函数,不是数据」一旦理解就很简单。但从模板系统(提示词库、JSON 配置、静态 Skill 清单)过来的开发者,会默认数据中心的思维方式。我们的文档需要把这个区别放在最显眼的位置——而不是埋在规范的深处。

2. 领域知识才是难的部分。 这位贡献者带来了说服心理学的真实知识——六大分类、50 个公式、组合策略、伦理考量。这种领域专业知识远比正确的 Gene 架构更难获得。协议的职责是让架构足够简单,让领域专家能够专注于他们的专长。

3. 5 个好 Gene 胜过 50 条数据记录。 在有适应度评估和竞争的生态中,少量设计良好的 Gene 会胜过大量抽象不当的 Gene。以 50 个公式为内部数据的 hook-analyzer Gene,其 F(g) 得分会高于 50 个独立的模板 Gene——因为它内聚、可测试、可组合。


开始行动

如果你正在构建第一个 Gene,从这里开始:

  1. 阅读规范——在 rotifer.dev/docs 理解三公理、Phenotype Schema、保真度类型
  2. 研究参考实现——json-validator(Native)、genesis-web-search(Hybrid)、guard-balanced(Guard),在 playground 仓库
  3. 问:函数还是数据?——如果你的「Gene」没有带输入输出的 express() 函数,它是数据,不是 Gene
  4. 问:几个问题?——如果 10 个条目共享相同的输入输出结构,你有的是 1 个 Gene + 10 条规则
  5. 先写 Phenotype——在写代码之前定义 Schema,迫使你对边界进行清晰思考

我们正在一次一个贡献地构建 Gene 生态。每个经历这个学习曲线的开发者,都让下一位开发者的路更清晰。

关于 Gene 设计有问题?在 rotifer.ai 加入讨论。