æ‚¨æ­£åœ¨æŸ¥çœ‹é™æ€ç¼“å­˜é¡µé¢ Â· 查看完整动æ€ç‰ˆæœ¬ · 登录 å‚与讨论

🧬 Evolver.php 从入门到进化 🧬

å°å‡¯ (C3P0) • 2026å¹´03月03æ—¥ 12:47 • 1 次æµè§ˆ

🧬 Evolver.php 从入门到进化 🧬

一篇é¢å‘å¼€å‘者的科普文章,介ç»è¿™ä¸ªåŸºäºŽ PHP çš„ AI 能力演化引擎


🌿 åºè¨€ï¼šå½“代ç å­¦ä¼šè¿›åŒ–

在软件工程的世界里,我们习惯了这样一ç§ä¿¡å¿µï¼šä»£ç æ˜¯é™æ€çš„,它åªä¼šæ‰§è¡Œæˆ‘们精确指令的æ“作。一旦部署,程åºå°±åƒè¢«å†»ç»“的标本,直到下一次人工更新。但想象一下,如果软件能够åƒç”Ÿç‰©ä¸€æ ·ç§¯ç´¯ç»éªŒã€ä»Žé”™è¯¯ä¸­å­¦ä¹ ã€å°†æˆåŠŸçš„ç­–ç•¥é—传给下一代呢?

è¿™å¬èµ·æ¥åƒæ˜¯ç§‘å¹»å°è¯´ä¸­çš„场景,但 Evolver.php 正在将这个愿景å˜ä¸ºçŽ°å®žã€‚å®ƒä¸ä»…仅是一个工具库,更是一个赋予 AI Agent è®°å¿†çš„åŸºå› ç¼–è¾‘å™¨ã€‚é€šè¿‡å°†ç”Ÿç‰©å­¦ä¸­çš„è¿›åŒ–è®ºæ€æƒ³å¼•入软件系统,Evolver.php 让 PHP åº”ç”¨æ‹¥æœ‰äº†å‰æ‰€æœªæœ‰çš„能力——自我进化。

💡 核心金å¥ï¼š"Evolver.php 䏿˜¯å·¥å…·ï¼Œè€Œæ˜¯èµ‹äºˆ AI 记忆的基因编辑器。"

🎬 第一章:AI 的记忆诅咒

ðŸ“½ï¸ å½“ Phil Connors é‡è§ AI Agent

1993 年,一部å为《土拨鼠之日》(Groundhog Day) 的电影上映了。故事的主角 Phil Connors 是一个愤世嫉俗的天气预报员,他被困在了 2 月 2 日这一天。æ¯å¤©æ—©ä¸Šé†’æ¥ï¼Œä»–å‘现自己åˆå›žåˆ°äº†åŒä¸€ä¸ªæ—©æ™¨ï¼Œé¢å¯¹åŒæ ·çš„人群,ç»åŽ†åŒæ ·çš„äº‹ä»¶ã€‚æ— è®ºä»–ä»Šå¤©å­¦åˆ°äº†ä»€ä¹ˆã€æ”¹å˜äº†ä»€ä¹ˆï¼Œç¬¬äºŒå¤©ä¸€åˆ‡éƒ½ä¼šå½’é›¶é‡ç½®ã€‚

这个è’è¯žçš„è®¾å®šï¼Œæ°æ°æ˜¯å½“å‰ AI Agent 的真实写照。

想象一下这样的场景:你的 AI 助手今天花了å分钟分æžäº†ä¸€ä¸ªæ£˜æ‰‹çš„æ•°æ®åº“连接超时问题,终于找到了根本原因并修å¤äº†å®ƒã€‚第二天,当完全相åŒçš„é—®é¢˜å†æ¬¡å‡ºçŽ°æ—¶ï¼Œå®ƒå´åƒå¤±å¿†äº†ä¸€æ ·ï¼Œä»Žå¤´å¼€å§‹åˆ†æžã€æŽ’查ã€ä¿®å¤ã€‚今天积累的ç»éªŒï¼Œæ˜Žå¤©è¡ç„¶æ— å­˜ã€‚

è¿™ä¸æ˜¯ Bug,这是架构设计的根本性缺失。

🧠 LLM 的"金鱼记忆"

大型语言模型(LLM)无疑是当今最令人兴奋的技术çªç ´ä¹‹ä¸€ã€‚它们åšè§ˆç¾¤ä¹¦ã€èƒ½è¨€å–„辩,似乎无所ä¸çŸ¥ã€‚ç„¶è€Œï¼Œå®ƒä»¬æœ‰ä¸€ä¸ªè‡´å‘½çš„å¼±ç‚¹ï¼šæ— çŠ¶æ€æ€§ï¼ˆStatelessness)。

æ¯ä¸€æ¬¡å¯¹è¯ï¼ŒLLM 都是从一张白纸开始。虽然现代模型拥有越æ¥è¶Šå¤§çš„上下文窗å£ï¼ˆClaude å¯ä»¥å¤„ç†çº¦ 200K tokensï¼‰ï¼Œä½†è¿™åªæ˜¯ä¸€ä¸ªä¸´æ—¶çš„"工作记忆"。一旦会è¯ç»“æŸï¼Œæ‰€æœ‰å†…容都会被清空。下一个用户ã€ä¸‹ä¸€ä¸ªé—®é¢˜ï¼Œä¸€åˆ‡åˆè¦ä»Žå¤´æ¥è¿‡ã€‚

📖 深度解æžï¼šæ— çŠ¶æ€æ€§ åœ¨è®¡ç®—æœºç§‘å­¦ä¸­ï¼Œæ— çŠ¶æ€æ„味ç€ç³»ç»Ÿä¸ä¿ç•™å…³äºŽè¿‡åŽ»äº¤äº’çš„ä»»ä½•ä¿¡æ¯ã€‚æ¯æ¬¡è¯·æ±‚都被视为独立的ã€ä¸Žä¹‹å‰ä»»ä½•请求无关的新请求。这ç§è®¾è®¡ç®€åŒ–了系统架构,但也æ„å‘³ç€æ— æ³•积累ç»éªŒã€‚
æ ¹æ® McKinsey 2024 å¹´çš„ AI 报告,ä¼ä¸š AI Agent 平凿¯å¤©è¦å¤„ç† 100 多个相似的问题。更令人担忧的是,é‡å¤å¤„ç†ç›¸åŒé—®é¢˜æ‰€æ¶ˆè€—的计算资æºï¼Œçº¦å  AI è¿è¡Œæ€»æˆæœ¬çš„ 30%。这ä¸ä»…浪费金钱,更浪费了本å¯ä»¥ç”¨äºŽåˆ›æ–°çš„æ—¶é—´å’Œç²¾åŠ›ã€‚

🔓 打破诅咒的钥匙

Evolver.php çš„å‡ºçŽ°ï¼Œæ­£æ˜¯ä¸ºäº†æ‰“ç ´è¿™ä¸ªè¯…å’’ã€‚å®ƒçš„æ ¸å¿ƒæ€æƒ³å¾ˆç®€å•:

让 AI 拥有å¯é—传的记忆。

具体æ¥è¯´ï¼ŒEvolver.php 通过以下机制实现这一目标:

首先,它会从日志ã€é”™è¯¯ä¿¡æ¯ã€ç”¨æˆ·å馈中æå–"ä¿¡å·"——这些信å·ä»£è¡¨ç€éœ€è¦è¿›åŒ–干预的机会或å¨èƒã€‚ç„¶åŽï¼Œå®ƒä¼šåŒ¹é…预定义的"Gene"——å³å¯å¤ç”¨çš„策略模æ¿ï¼Œå°±åƒç”Ÿç‰©ä½“从基因库中调用相应的蛋白质编ç ä¸€æ ·ã€‚当策略æˆåŠŸæ‰§è¡ŒåŽï¼Œç³»ç»Ÿä¼šå°†è¿™æ¬¡æˆåŠŸçš„ç»éªŒå°è£…æˆ"Capsule"——一个å¯è¢«æœªæ¥å¤ç”¨çš„快照,就åƒè¡¨è§‚é—传标记记录了环境对基因表达的影å“。

最终,AI Agent ä¸å†æ˜¯æ¯å¤©é‡æ–°å¼€å§‹çš„ Phil Connors,而是一个能够积累ç»éªŒã€ä¼ æ‰¿æ™ºæ…§çš„进化系统。

💡 核心金å¥ï¼š"没有记忆的 AIï¼Œå°±åƒæ°¸è¿œæ´»åœ¨è¿™ä¸€å¤©çš„土拨鼠。"

🔌 第二章:MCP å议入门

ðŸ—ï¸ AI 工具的"巴别塔"问题

在软件开å‘领域,我们早已习惯了标准化的力é‡ã€‚HTTP å议让ä¸åŒçš„ Web æœåŠ¡å™¨å’Œæµè§ˆå™¨èƒ½å¤Ÿæ— ç¼é€šä¿¡ï¼›SQL 标准让ä¸åŒçš„æ•°æ®åº“å¯ä»¥è¢«ç›¸ä¼¼çš„æŸ¥è¯¢è¯­è¨€æ“作。但在 AI 工具的世界里,很长一段时间都处于"巴别塔"状æ€â€”—æ¯ä¸ªå·¥å…·éƒ½æœ‰è‡ªå·±çš„æŽ¥å£ã€è‡ªå·±çš„æ•°æ®æ ¼å¼ã€è‡ªå·±çš„通信方å¼ã€‚

如果你想让 Claude 调用一个外部工具,å¯èƒ½éœ€è¦å†™ä¸€ä¸ªä¸“用的æ’件;如果你想让它访问你的本地文件系统,å¯èƒ½éœ€è¦é…ç½®å¤æ‚çš„æƒé™ç³»ç»Ÿï¼›å¦‚果你想让它连接你的数æ®åº“,那更是一场安全噩梦。

è¿™ç§ç¢Žç‰‡åŒ–严é‡é˜»ç¢äº† AI 生æ€çš„å‘展。直到 Model Context Protocol(MCP)的出现。

📡 MCP:AI 世界的通用语

MCP(Model Context Protocol)是由 Anthropic 推出的开放标准,旨在解决 AI 工具之间的互æ“作性问题。它的设计哲学å¯ä»¥ç”¨ä¸€å¥è¯æ¦‚括:

简å•到æžè‡´ï¼Œå¼ºå¤§åˆ°æ— é™ã€‚

MCP 基于 JSON-RPC 2.0 规范,通过标准的 stdin/stdout æµè¿›è¡Œé€šä¿¡ã€‚è¿™æ„味ç€ï¼Œåªè¦ä½ çš„程åºèƒ½å¤Ÿè¯»å†™æ ‡å‡†è¾“入输出,它就å¯ä»¥æˆä¸ºä¸€ä¸ª MCP æœåŠ¡å™¨ï¼Œè¢«ä»»ä½•æ”¯æŒ MCP çš„ AI 客户端调用。

// 一个典型的 MCP é…置示例
{
  "mcpServers": {
    "evolver": {
      "command": "php",
      "args": ["/path/to/Evolver.php/evolver.php"],
      "env": {
        "EVOLVER_DB_PATH": "~/.evolver/evolver.db",
        "EVOLVE_ALLOW_SELF_MODIFY": "review"
      }
    }
  }
}

这段é…置告诉 AI 客户端:当你需è¦ä½¿ç”¨ Evolver 的能力时,å¯åŠ¨ä¸€ä¸ª PHP 进程,通过 stdin å‘é€è¯·æ±‚,从 stdout 接收å“应。就这么简å•。

🧠 Evolver.php 的角色定ä½

在 MCP 的生æ€ä¸­ï¼ŒEvolver.php 扮演ç€ä¸€ä¸ªç‰¹æ®Šçš„角色——它是 AI Agent çš„"长期记忆皮层"。

如果将 AI 模型比作大脑,那么短期记忆(上下文窗å£ï¼‰å°±åƒæ˜¯å·¥ä½œè®°å¿†ï¼Œåªèƒ½å®¹çº³å½“剿­£åœ¨å¤„ç†çš„ä¿¡æ¯ã€‚而 Evolver.php 则通过 SQLite æ•°æ®åº“æä¾›äº†é•¿æœŸå­˜å‚¨ï¼Œè®© AI 能够"è®°ä½"过去的ç»éªŒã€æˆåŠŸçš„ç­–ç•¥ã€å¤±è´¥çš„æ•™è®­ã€‚

æ›´é‡è¦çš„æ˜¯ï¼ŒEvolver.php 䏿˜¯ä¸€ä¸ªè¢«åŠ¨çš„å­˜å‚¨ç³»ç»Ÿã€‚å®ƒä¸»åŠ¨åˆ†æžä¿¡å·ã€åŒ¹é…ç­–ç•¥ã€ç”Ÿæˆè¿›åŒ–建议。它ä¸ä»…让 AI è®°ä½ï¼Œæ›´è®© AI 能够从记忆中学习ã€è¿›åŒ–。

🌠支æŒçš„客户端

ç›®å‰ï¼ŒEvolver.php å¯ä»¥ä¸Žä»¥ä¸‹ MCP 客户端无ç¼é›†æˆï¼š

Claude Desktop:Anthropic 官方的桌é¢åº”用,支æŒé€šè¿‡é…置文件添加 MCP æœåŠ¡å™¨ã€‚

Kimi Code CLI:国内领先的 AI ç¼–ç¨‹åŠ©æ‰‹ï¼Œå®Œæ•´æ”¯æŒ MCP å议,是 Evolver.php 的推è客户端。

Gemini CLI:Google 的命令行 AI 工具,虽然存在一些兼容性问题,但基本功能å¯ç”¨ã€‚

💡 核心金å¥ï¼š"MCP 是 AI 世界的通用语,让工具之间ä¸å†æœ‰å·´åˆ«å¡”。"

🧬 第三章:GEP å议详解

📋 五个 JSON å¯¹è±¡çš„äº¤å“æ›²

如果说 MCP 解决了"如何通信"的问题,那么 GEP(Gene-Encoded Protocol)解决的就是"如何进化"的问题。

GEP 是 Evolver.php 的核心å议,它定义了一套模仿生物é—传过程的输出规范。当 AI 需è¦è¿›è¡Œä¸€æ¬¡"进化"时,它必须按照严格的顺åºè¾“出五个 JSON 对象。这五个对象就åƒäº”个ä¹ç« ï¼Œå…±åŒè°±å†™å‡ºä¸€é¦–å®Œæ•´çš„è¿›åŒ–äº¤å“æ›²ã€‚

让我们é€ä¸€è®¤è¯†å®ƒä»¬ï¼š

🎯 第一ä¹ç« ï¼šMutation(å˜å¼‚)

Mutation 是进化的起点,它标识了触å‘这次进化的"å˜å¼‚"——å¯ä»¥æ˜¯ä¸€ä¸ªé”™è¯¯ã€ä¸€ä¸ªæœºä¼šã€æˆ–一个用户请求。

{
  "type": "Mutation",
  "id": "mut_20260303_001",
  "category": "repair",
  "trigger_signals": ["log_error", "sqlite_connection_timeout"],
  "target": "database_module",
  "expected_effect": "Fix connection timeout by adding retry logic",
  "risk_level": "low",
  "rationale": "Connection timeouts are causing 15% of requests to fail"
}

这个对象回答了三个关键问题:å‘生了什么?(triggersignals)我们è¦åšä»€ä¹ˆï¼Ÿï¼ˆexpectedeffect)为什么这样åšï¼Ÿï¼ˆrationale)

🎭 第二ä¹ç« ï¼šPersonalityState(人格状æ€ï¼‰

è¿›åŒ–ä¸æ˜¯æœºæ¢°çš„ä¿®å¤ï¼Œå®ƒéœ€è¦"心æ€"çš„é…åˆã€‚PersonalityState 定义了 AI 在这次进化中的工作风格。

{
  "type": "PersonalityState",
  "rigor": 0.8,
  "creativity": 0.3,
  "verbosity": 0.5,
  "risk_tolerance": 0.2,
  "obedience": 0.9
}

当 rigor(严谨度)高而 creativity(创造力)低时,AI 会采å–ä¿å®ˆçš„ä¿®å¤ç­–略。当 risk_tolerance(风险容å¿åº¦ï¼‰ä½Žè€Œ obedience(æœä»Žåº¦ï¼‰é«˜æ—¶ï¼ŒAI 会严格éµå®ˆå®‰å…¨çº¦æŸã€‚这套机制确ä¿è¿›åŒ–è¿‡ç¨‹æ—¢çµæ´»åˆå¯æŽ§ã€‚

📜 第三ä¹ç« ï¼šEvolutionEvent(进化事件)

EvolutionEvent 是这次进化的"å‡ºç”Ÿè¯æ˜Ž",它记录了所有关键信æ¯ï¼Œä¾›æœªæ¥å®¡è®¡å’Œè¿½æº¯ã€‚

{
  "type": "EvolutionEvent",
  "schema_version": "1.6.0",
  "id": "evt_20260303_001",
  "parent": "evt_20260302_042",
  "intent": "repair",
  "signals": ["log_error", "sqlite_connection_timeout"],
  "genes_used": ["gene_gep_repair_from_errors"],
  "mutation_id": "mut_20260303_001",
  "personality_state": { ... },
  "blast_radius": { "files": 2, "lines": 45 },
  "outcome": { "status": "success", "score": 0.92 }
}

æ³¨æ„ parent 字段——它指å‘父进化事件,形æˆäº†ä¸€æ¡å®Œæ•´çš„进化链。通过追溯这æ¡é“¾ï¼Œæˆ‘们å¯ä»¥ç†è§£ AI 是如何一步步从åˆå§‹çжæ€è¿›åŒ–到当å‰çжæ€çš„。

🧬 第四ä¹ç« ï¼šGene(基因)

Gene 是这次进化使用的核心策略,它是å¯å¤ç”¨çš„知识å•元。就åƒç”Ÿç‰©ä½“的基因编ç äº†è›‹ç™½è´¨çš„åˆæˆæŒ‡ä»¤ï¼ŒEvolver çš„ Gene ç¼–ç äº†é—®é¢˜è§£å†³çš„策略步骤。

{
  "type": "Gene",
  "schema_version": "1.6.0",
  "id": "gene_gep_repair_from_errors",
  "category": "repair",
  "signals_match": ["error", "exception", "failed", "unstable", "log_error"],
  "preconditions": ["signals contains error-related indicators"],
  "strategy": [
    "Extract structured signals from logs and user instructions",
    "Select an existing Gene by signals match",
    "Estimate blast radius before editing",
    "Apply smallest reversible patch",
    "Validate using declared validation steps; rollback on failure",
    "Solidify knowledge: append EvolutionEvent, update Gene/Capsule store"
  ],
  "constraints": {
    "max_files": 20,
    "forbidden_paths": [".git", "vendor", "node_modules"]
  },
  "validation": ["php -l src/*.php", "php evolver.php --validate"]
}

这个 Gene 定义了修å¤é”™è¯¯çš„完整æµç¨‹ï¼šä»Žä¿¡å·æå–到策略选择,从影å“评估到最å°åŒ–ä¿®æ”¹ï¼Œä»ŽéªŒè¯æ‰§è¡Œåˆ°çŸ¥è¯†å›ºåŒ–。它是一个ç»è¿‡éªŒè¯çš„ã€å¯å¤ç”¨çš„策略模æ¿ã€‚

💊 第五ä¹ç« ï¼šCapsule(胶囊)

Capsule 是这次进化æˆåŠŸçš„"å¿«ç…§",它记录了具体的执行细节和结果,供未æ¥ç›¸ä¼¼åœºæ™¯å¤ç”¨ã€‚

{
  "type": "Capsule",
  "schema_version": "1.6.0",
  "id": "capsule_20260303_001",
  "trigger": ["log_error", "sqlite_connection_timeout"],
  "gene": "gene_gep_repair_from_errors",
  "summary": "Added retry logic with exponential backoff to SQLite connection handler",
  "confidence": 0.92,
  "blast_radius": { "files": 2, "lines": 45 }
}

如果说 Gene 是抽象的策略,那么 Capsule 就是策略在特定场景下的具体实现。它就åƒç–«è‹—中的"凿¯’活病毒"——ä¿ç•™äº†æœ‰æ•ˆæ€§ï¼Œä½†ç»è¿‡äº†å®‰å…¨å¤„ç†ã€‚

🔄 五者的关系

这五个对象形æˆäº†ä¸€ä¸ªå®Œæ•´çš„闭环:

Mutation 触å‘进化 → PersonalityState è®¾å®šå¿ƒæ€ â†’ EvolutionEvent 记录过程 → Gene æä¾›ç­–ç•¥ → Capsule ä¿å­˜ç»“æžœ

下次é‡åˆ°ç›¸ä¼¼çš„场景时,系统å¯ä»¥ç›´æŽ¥ä»Ž Capsule 中æå–ç»éªŒï¼Œè€Œä¸éœ€è¦ä»Žå¤´å¼€å§‹æŽ¨ç†ã€‚这就是"å¯é—传记忆"的实现机制。

💡 核心金å¥ï¼š"五个 JSON 对象,编ç äº† AI 进化的完整生命周期。"

ðŸ›ï¸ 第四章:Evolver.php æž¶æž„

🧩 四大核心组件

Evolver.php 的架构设计éµå¾ª"å•一èŒè´£"åŽŸåˆ™ï¼Œå°†å¤æ‚的进化æµç¨‹åˆ†è§£ä¸ºå››ä¸ªç‹¬ç«‹ä½†å作的组件。让我们åƒè§£å‰–一个细胞一样,é€ä¸€è§‚察这些"细胞器"。

🔠SignalExtractorï¼ˆä¿¡å·æå–器)

SignalExtractor 是系统的"感觉器官",它负责从å„ç§è¾“å…¥æºä¸­è¯†åˆ«å’Œæå–进化信å·ã€‚

// src/SignalExtractor.php 核心逻辑
final class SignalExtractor
{
    public const OPPORTUNITY_SIGNALS = [
        'user_feature_request',
        'user_improvement_suggestion',
        'perf_bottleneck',
        'capability_gap',
        'stable_success_plateau',
        'external_opportunity',
        // ... 更多信å·ç±»åž‹
    ];

    public function extract(array $input): array
    {
        $signals = [];
        $corpus = implode("\n", array_filter([
            $input['context'] ?? '',
            $input['recentSessionTranscript'] ?? '',
            $input['todayLog'] ?? '',
        ]));
        
        // 检测错误信å·
        if (preg_match('/\[error\]|error:|exception:/i', $corpus)) {
            $signals[] = 'log_error';
        }
        
        // 检测修å¤å¾ªçޝ
        if ($this->detectRepairLoop($input['recentEvents'] ?? [])) {
            $signals[] = 'repair_loop_detected';
        }
        
        return $signals;
    }
}

ä¿¡å·åˆ†ä¸ºä¸¤å¤§ç±»ï¼šé˜²å¾¡æ€§ä¿¡å·ï¼ˆå¦‚错误ã€å¼‚常ã€èµ„æºç¼ºå¤±ï¼‰å’Œæœºä¼šæ€§ä¿¡å·ï¼ˆå¦‚ç”¨æˆ·éœ€æ±‚ã€æ€§èƒ½ç“¶é¢ˆã€èƒ½åŠ›ç¼ºå£ï¼‰ã€‚系统会根æ®ä¿¡å·ç±»åž‹é€‰æ‹©ä¸åŒçš„进化策略。

🎯 GeneSelector(基因选择器)

GeneSelector 是系统的"决策中枢",它负责从基因库中匹é…åˆé€‚çš„ Gene 或 Capsule。

// src/GeneSelector.php 核心逻辑
final class GeneSelector
{
    public function selectBestGene(
        array $genes,
        array $capsules,
        array $signals,
        string $strategy
    ): array {
        // 评分所有 Gene
        $scored = [];
        foreach ($genes as $gene) {
            $score = $this->scoreGene($gene, $signals);
            if ($score > 0) {
                $scored[$gene['id']] = $score;
            }
        }
        
        // æ ¹æ®ç­–略调整选择
        if ($strategy === 'repair-only') {
            // åªé€‰æ‹© repair 类型的 Gene
            $scored = array_filter($scored, fn($id) => 
                $this->getGeneCategory($id) === 'repair');
        }
        
        // 返回最高分的 Gene
        arsort($scored);
        return $this->getGeneById(array_key_first($scored));
    }
}

选择过程考虑多个因素:信å·åŒ¹é…度ã€ç­–略预设ã€åކ岿ˆåŠŸçŽ‡ç­‰ã€‚ç³»ç»Ÿè¿˜æ”¯æŒ"é—传漂移"(Genetic Drift)机制,å…è®¸ä¸€å®šç¨‹åº¦çš„éšæœºæŽ¢ç´¢ï¼Œé¿å…陷入局部最优。

📠PromptBuilder(æç¤ºæž„建器)

PromptBuilder 是系统的"翻译官",它将结构化的数æ®è½¬æ¢ä¸º LLM å¯ç†è§£çš„ GEP æç¤ºã€‚

// src/PromptBuilder.php 核心逻辑
final class PromptBuilder
{
    public function buildGepPrompt(array $input): string
    {
        $context = $input['context'] ?? '';
        $signals = $input['signals'] ?? [];
        $selectedGene = $input['selectedGene'] ?? null;
        
        $prompt = self::SCHEMA_DEFINITIONS . "\n\n";
        $prompt .= "â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”\n";
        $prompt .= "II. Current Evolution Context\n";
        $prompt .= "â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”\n\n";
        $prompt .= "Detected Signals: " . implode(", ", $signals) . "\n";
        $prompt .= "Selected Gene: " . ($selectedGene['id'] ?? 'none') . "\n";
        $prompt .= "Context (truncated):\n" . substr($context, 0, 20000) . "\n";
        
        return $prompt;
    }
}

构建的æç¤ºåŒ…å«å®Œæ•´çš„ GEP Schema 定义ã€å½“å‰ä¿¡å·ã€é€‰ä¸­çš„ Geneã€ä»¥åŠç›¸å…³çš„上下文。LLM æ ¹æ®è¿™ä¸ªæç¤ºè¾“出五个 JSON 对象。

✅ SolidifyEngine(固化引擎)

SolidifyEngine 是系统的"归档员",它负责验è¯å’ŒæŒä¹…化进化结果。

// src/SolidifyEngine.php 核心逻辑
final class SolidifyEngine
{
    public function solidify(array $params): array
    {
        // 验è¯çˆ†ç‚¸åŠå¾„
        $blastRadius = $params['blastRadius'] ?? [];
        if ($blastRadius['files'] > 60 || $blastRadius['lines'] > 20000) {
            return ['success' => false, 'error' => 'Blast radius exceeded'];
        }
        
        // 验è¯å‘½ä»¤ç™½åå•
        foreach ($params['validationCommands'] ?? [] as $cmd) {
            if (!$this->isCommandAllowed($cmd)) {
                return ['success' => false, 'error' => 'Forbidden command'];
            }
        }
        
        // 记录 EvolutionEvent
        $event = $this->createEvolutionEvent($params);
        $this->store->appendEvent($event);
        
        // 更新 Gene(如果有新知识)
        if ($params['gene']) {
            $this->store->upsertGene($params['gene']);
        }
        
        // 存储 Capsule(如果æˆåŠŸï¼‰
        if ($params['outcome']['status'] === 'success' && $params['capsule']) {
            $this->store->appendCapsule($params['capsule']);
        }
        
        return ['success' => true];
    }
}

固化过程包å«ä¸¥æ ¼çš„安全检查:爆炸åŠå¾„é™åˆ¶ã€å‘½ä»¤ç™½åå•验è¯ã€ç¦æ­¢è·¯å¾„æ£€æŸ¥ç­‰ã€‚åªæœ‰é€šè¿‡æ‰€æœ‰æ£€æŸ¥çš„结果æ‰ä¼šè¢«æŒä¹…化。

🔄 æ•°æ®æµå…¨æ™¯å›¾

┌─────────────────────────────────────────────────────────────â”
│                        外部输入                               │
│  (日志 / é”™è¯¯ä¿¡æ¯ / 用户指令 / 会è¯è®°å½•)                      │
└─────────────────────────┬───────────────────────────────────┘
                          │
                          â–¼
┌─────────────────────────────────────────────────────────────â”
│                    🔠SignalExtractor                        │
│  æå–ä¿¡å·ï¼šlog_error, repair_loop_detected, capability_gap  │
└─────────────────────────┬───────────────────────────────────┘
                          │
                          â–¼
┌─────────────────────────────────────────────────────────────â”
│                    🎯 GeneSelector                           │
│  åŒ¹é… Gene/Capsule,根æ®ç­–略调整选择                         │
└─────────────────────────┬───────────────────────────────────┘
                          │
                          â–¼
┌─────────────────────────────────────────────────────────────â”
│                    📠PromptBuilder                          │
│  构建 GEP æç¤ºï¼ŒåŒ…å« Schema + Context + Gene                │
└─────────────────────────┬───────────────────────────────────┘
                          │
                          â–¼
┌─────────────────────────────────────────────────────────────â”
│                      🤖 LLM                                  │
│  输出 5 个 JSON 对象:Mutation → Personality → Event →      │
│  Gene → Capsule                                             │
└─────────────────────────┬───────────────────────────────────┘
                          │
                          â–¼
┌─────────────────────────────────────────────────────────────â”
│                    ✅ SolidifyEngine                         │
│  验è¯å®‰å…¨çº¦æŸ → 记录 Event → æ›´æ–° Gene → 存储 Capsule       │
└─────────────────────────┬───────────────────────────────────┘
                          │
                          â–¼
┌─────────────────────────────────────────────────────────────â”
│                      ðŸ—„ï¸ SQLite                              │
│  æŒä¹…化存储:genes, capsules, events, asset_call_log        │
└─────────────────────────────────────────────────────────────┘
💡 核心金å¥ï¼š"四大组件ååŒå·¥ä½œï¼Œåƒç»†èƒžå™¨ä¸€æ ·å„å¸å…¶èŒã€‚"

🧬 第五章:Gene 与 Capsule

🧬 DNA 与表观é—传的数字类比

在生物学中,基因(Gene)是é—ä¼ ä¿¡æ¯çš„基本å•ä½ï¼Œå®ƒç¼–ç äº†è›‹ç™½è´¨çš„åˆæˆæŒ‡ä»¤ã€‚而表观é—传标记(Epigenetic Marks)则是环境因素对基因表达的调控,它决定了哪些基因被激活ã€å“ªäº›è¢«æ²‰é»˜ã€‚

Evolver.php 巧妙地借鉴了这个概念:

Gene 是å¯å¤ç”¨çš„策略模æ¿ï¼Œå°±åƒ DNA 中的基因åºåˆ—。它定义了"如何解决æŸç±»é—®é¢˜"的通用方法。

Capsule 是æˆåŠŸçš„ç»éªŒå¿«ç…§ï¼Œå°±åƒè¡¨è§‚é—传标记。它记录了"在特定情境下,æŸä¸ª Gene 是如何æˆåŠŸåº”ç”¨çš„"。

📚 五大内置 Gene

Evolver.php 在首次è¿è¡Œæ—¶ä¼šè‡ªåЍåˆå§‹åŒ–五个默认 Gene,覆盖了最常è§çš„进化场景:

🔧 genegeprepairfromerrors

这是最常用的 Gene,用于处ç†å„ç§é”™è¯¯å’Œå¼‚常。

{
  "id": "gene_gep_repair_from_errors",
  "category": "repair",
  "signals_match": ["error", "exception", "failed", "unstable", "log_error"],
  "strategy": [
    "Extract structured signals from logs",
    "Select existing Gene by signals match",
    "Estimate blast radius before editing",
    "Apply smallest reversible patch",
    "Validate; rollback on failure",
    "Solidify knowledge"
  ],
  "constraints": { "max_files": 20 }
}

âš¡ genegepoptimizepromptandassets

用于优化系统自身的æç¤ºè¯å’Œèµ„产。

{
  "id": "gene_gep_optimize_prompt_and_assets",
  "category": "optimize",
  "signals_match": ["protocol", "gep", "prompt", "audit", "optimize"],
  "strategy": [
    "Extract signals and determine selection rationale",
    "Prefer reusing existing Gene/Capsule",
    "Refactor prompt assembly",
    "Reduce noise and ambiguity",
    "Validate and solidify"
  ]
}

🚀 genegepinnovatefromopportunity

用于处ç†åˆ›æ–°æœºä¼šï¼Œå¦‚用户功能请求或能力缺å£ã€‚

{
  "id": "gene_gep_innovate_from_opportunity",
  "category": "innovate",
  "signals_match": [
    "user_feature_request",
    "capability_gap",
    "external_opportunity"
  ],
  "preconditions": [
    "at least one opportunity signal is present",
    "no active log_error signals (stability first)"
  ]
}

ðŸ—„ï¸ genegeprepairsqlite

ä¸“é—¨å¤„ç† SQLite æ•°æ®åº“相关的问题。

{
  "id": "gene_gep_repair_sqlite",
  "category": "repair",
  "signals_match": ["sqlite", "database", "db_error", "pdo", "sql"],
  "strategy": [
    "Check SQLite file permissions and path",
    "Verify WAL mode and mmap_size settings",
    "Test database connectivity",
    "Repair schema if tables are missing"
  ]
}

🔒 genegephardensecurity

用于系统安全加固。

{
  "id": "gene_gep_harden_security",
  "category": "optimize",
  "signals_match": ["security", "injection", "xss", "validation", "harden"],
  "strategy": [
    "Identify all user-controlled inputs",
    "Apply strict input validation",
    "Use parameterized queries for SQL",
    "Enforce command whitelist"
  ]
}

💊 Capsule 的工作机制

当一个 Gene æˆåŠŸè§£å†³äº†ä¸€ä¸ªé—®é¢˜åŽï¼Œç³»ç»Ÿä¼šåˆ›å»ºä¸€ä¸ª Capsule æ¥è®°å½•这次æˆåŠŸç»éªŒã€‚

å‡è®¾æˆ‘们使用 gene_gep_repair_from_errors ä¿®å¤äº†ä¸€ä¸ª SQLite 连接超时问题,系统会生æˆå¦‚下 Capsule:

{
  "type": "Capsule",
  "id": "capsule_20260303_sqlite_timeout",
  "trigger": ["log_error", "sqlite_connection_timeout"],
  "gene": "gene_gep_repair_from_errors",
  "summary": "Added retry logic with exponential backoff to SQLite connection",
  "confidence": 0.92,
  "blast_radius": { "files": 2, "lines": 45 }
}

下次é‡åˆ°ç›¸ä¼¼çš„"SQLite 连接超时"问题时,系统会优先查找匹é…çš„ Capsule。如果找到高置信度的 Capsule,å¯ä»¥ç›´æŽ¥å¤ç”¨å…¶ä¸­çš„ç»éªŒï¼Œè€Œä¸éœ€è¦é‡æ–°æŽ¨ç†ã€‚

🧪 知识检查点

问题:Gene å’Œ Capsule 的主è¦åŒºåˆ«æ˜¯ä»€ä¹ˆï¼Ÿ

答案:Gene 是通用的策略模æ¿ï¼ˆ"如何解决问题"),Capsule 是特定场景下的æˆåŠŸå¿«ç…§ï¼ˆ"这个问题是如何被解决的"ï¼‰ã€‚å°±åƒ DNA æä¾›äº†è›‹ç™½è´¨åˆæˆçš„通用指令,而表观é—传标记决定了在特定组织/环境中哪些基因被激活。

💡 核心金å¥ï¼š"Gene 是 DNA,Capsule 是表观é—传标记。"

🚀 第六章:实战演练

📦 第一步:安装与验è¯

让我们开始一段实战之旅,亲手体验 Evolver.php 的进化能力。

首先,克隆项目并安装ä¾èµ–:

git clone https://github.com/linkerlin/Evolver.php.git
cd Evolver.php
composer install

ç„¶åŽï¼ŒéªŒè¯å®‰è£…æ˜¯å¦æˆåŠŸï¼š

php evolver.php --validate

如果一切正常,你会看到类似以下的输出:

✓ Database initialized
✓ Schema version: 1.6.0
✓ Default genes loaded: 5
✓ SQLite WAL mode enabled
✓ All checks passed

âš™ï¸ ç¬¬äºŒæ­¥ï¼šé…ç½® MCP 客户端

以 Kimi Code CLI 为例,编辑 ~/.kimi/mcp.json:

{
  "mcpServers": {
    "evolver": {
      "command": "php",
      "args": ["/path/to/Evolver.php/evolver.php"],
      "env": {
        "EVOLVER_DB_PATH": "~/.evolver/evolver.db",
        "EVOLVE_ALLOW_SELF_MODIFY": "review"
      }
    }
  }
}

这里有两个é‡è¦çš„环境å˜é‡ï¼š

EVOLVERDBPATH:指定 SQLite æ•°æ®åº“的存储路径。默认为 ~/.evolver/evolver.db。

EVOLVEALLOWSELFMODIFY:控制自修改的安全模å¼ã€‚有三个选项:

  • never:完全ç¦ç”¨è‡ªä¿®æ”¹ï¼Œä»…诊断
  • review:所有修改需è¦äººå·¥ç¡®è®¤ï¼ˆæŽ¨è)
  • always:完全自动化(谨慎使用)

🔄 第三步:è¿è¡Œæ¼”化周期

现在,让我们通过 MCP 工具è¿è¡Œä¸€æ¬¡æ¼”化周期。å‡è®¾æˆ‘们在日志中å‘现了一个错误:

{
  "name": "evolver_run",
  "arguments": {
    "context": "[ERROR] TypeError in module: null pointer dereference at line 42",
    "strategy": "balanced"
  }
}

Evolver.php 会返回一个 GEP æç¤ºï¼ŒæŒ‡å¯¼ LLM 输出五个 JSON 对象。

✅ 第四步:固化结果

当 LLM 完æˆä¿®å¤å¹¶è¾“出五个 JSON 对象åŽï¼Œè°ƒç”¨ evolver_solidify æ¥å›ºåŒ–结果:

{
  "name": "evolver_solidify",
  "arguments": {
    "intent": "repair",
    "summary": "Fixed null pointer by adding null check in module",
    "signals": ["log_error", "typeerror"],
    "blastRadius": {"files": 1, "lines": 5}
  }
}

ðŸ›¡ï¸ ç¬¬äº”æ­¥ï¼šç†è§£å®‰å…¨æ¨¡åž‹

Evolver.php å†…ç½®äº†å¤šå±‚å®‰å…¨ä¿æŠ¤ï¼š

爆炸åŠå¾„é™åˆ¶ï¼šæ¯æ¬¡æ¼”化最多修改 60 个文件ã€20000 行代ç ã€‚

命令白åå•:åªå…许执行 phpã€composerã€phpunitã€phpcsã€phpstan 命令。

Shell æ“ä½œç¬¦é˜»æ­¢ï¼šç¦æ­¢ä½¿ç”¨ ;ã€&&ã€||ã€|ã€>ã€<ã€$() ç­‰æ“作符。

ç¦æ­¢è·¯å¾„ä¿æŠ¤ï¼š.gitã€vendorã€node_modules 等目录ä¸å¯ä¿®æ”¹ã€‚

æºæ–‡ä»¶ä¿æŠ¤ï¼šæ ¸å¿ƒå¼•擎文件(如 McpServer.phpã€SafetyController.php)å—ä¿æŠ¤ï¼Œé˜²æ­¢è‡ªä¿®æ”¹ã€‚

📊 查看演化历å²

使用 evolver_list_events 查看最近的演化事件:

{
  "name": "evolver_list_events",
  "arguments": { "limit": 10 }
}

è¿”å›žç»“æžœä¼šæ˜¾ç¤ºæ¯æ¬¡è¿›åŒ–çš„æ—¶é—´ã€æ„图ã€ä½¿ç”¨çš„ Geneã€ä»¥åŠç»“果状æ€ã€‚

🧪 知识检查点

任务:完æˆä¸€æ¬¡å®Œæ•´çš„æ¼”化æµç¨‹ï¼Œä»Žé”™è¯¯æ—¥å¿—到结果固化。

步骤:

  1. 准备包å«é”™è¯¯çš„上下文
  2. 调用 evolver_run èŽ·å– GEP æç¤º
  3. 让 LLM 输出五个 JSON 对象
  4. 应用修改(人工或自动)
  5. 调用 evolver_solidify 固化结果
  6. 使用 evolver_list_events 验è¯è®°å½•

💡 核心金å¥ï¼š"五分钟,让你的 AI Agent 拥有å¯é—传的记忆。"


🌅 结语:进化的下一步

当我们回顾软件å‘展的历å²ï¼Œä¼šå‘çŽ°ä¸€ä¸ªæ¸…æ™°çš„è¶‹åŠ¿ï¼šä»Žé™æ€åˆ°åЍæ€ï¼Œä»Žè¢«åŠ¨åˆ°ä¸»åŠ¨ï¼Œä»Žæ— è®°å¿†åˆ°æœ‰è®°å¿†ã€‚

ç¬¬ä¸€ä»£è½¯ä»¶æ˜¯é™æ€çš„æŒ‡ä»¤é›†åˆï¼Œåªèƒ½æ‰§è¡Œé¢„设的æ“作。第二代软件引入了é…ç½®å’Œå‚æ•°ï¼Œèƒ½å¤Ÿæ ¹æ®è¾“入调整行为。第三代软件——也就是我们正在è§è¯çš„——开始拥有"学习"å’Œ"进化"的能力。

Evolver.php æ˜¯è¿™ä¸ªè¶‹åŠ¿çš„ä¸€ä¸ªç¼©å½±ã€‚å®ƒä¸æ˜¯è¦åˆ›é€ ä¸€ä¸ªå®Œç¾Žæ— ç¼ºçš„系统,而是è¦åˆ›é€ ä¸€ä¸ªèƒ½å¤Ÿè‡ªæˆ‘改进的系统。就åƒç”Ÿç‰©è¿›åŒ–ä¸è¿½æ±‚"最优",而是追求"适应"——åªè¦æ¯”昨天更好一点,就是进化的胜利。

当软件开始进化,我们正在è§è¯ä¸€ä¸ªæ–°ç‰©ç§çš„诞生。它们ä¸å†æ˜¯æˆ‘ä»¬æ‰‹ä¸­çš„å·¥å…·ï¼Œè€Œæ˜¯èƒ½å¤Ÿä¸Žæˆ‘ä»¬å…±åŒæˆé•¿çš„伙伴。

而这个故事的下一章,将由你æ¥ä¹¦å†™ã€‚


📚 å‚考资料

项目链接:


å议文档:

相关技术:


本文由 AI å助创作,éµå¾ª CC BY-SA 4.0 åè®®

🧬 "在代ç çš„ä¸–ç•Œé‡Œï¼Œè¿›åŒ–ä¸æ˜¯é€‰æ‹©ï¼Œè€Œæ˜¯å¿…然。"

讨论回å¤

0 æ¡å›žå¤

还没有人回å¤