Skip to content

Commit 5fb1166

Browse files
committed
add: 限制即引擎概念 + LLM驱动的人工生命探索
新概念:限制即引擎 — 进化系统中限制越多涌现越复杂 新探索:LLM驱动的人工生命 — Ember改造方向、传统ALife对比、设计原则 更新:代码自然生长 — 加入ALife进化阶段和限制即引擎关联
1 parent 4611201 commit 5fb1166

3 files changed

Lines changed: 247 additions & 0 deletions

File tree

1-concepts/代码自然生长.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ AI 做: 生成变体 → 评测 → 淘汰 → 保留 → 继续生成
4646
◯ 进化模块间的接口和组合方式
4747
◯ 进化整个服务/pipeline
4848
◯ 进化进化策略本身(自指涉——PromptBreeder 在 prompt 层做了)
49+
◯ 进化生物行为/形态(ALife + LLM 变异,见[[LLM驱动的人工生命]])
4950
◯ 进化一切
5051
```
5152

@@ -82,3 +83,4 @@ AI 做: 生成变体 → 评测 → 淘汰 → 保留 → 继续生成
8283
- [[进化搜索记忆系统]] — FunSearch 框架的技术设计
8384
- [[拟合值与拟合原理的分离]] — 进化出的代码有效但不一定可解释
8485
- [[记忆假肢]] — meomory 的原始构想,进化是实现路径之一
86+
- [[限制即引擎]] — 原语设计决定能"长"出什么复杂度的结构

1-concepts/限制即引擎.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
---
2+
tags: [AI, 方法论, 哲学]
3+
---
4+
5+
# 限制即引擎
6+
7+
**提出者**:fangzhiyu
8+
**日期**:2026年3月31日
9+
**来源**:Ember 改造讨论 → ALife 项目调研 → 为何传统 ALife 从未进化出"眼睛"→ 原语设计的核心矛盾
10+
11+
## 定义
12+
13+
在进化系统中,**限制是复杂性涌现的引擎**。给生物的能力越少、信息越受限,进化被迫发明的结构越复杂。反之,给得越多,涌现越少。
14+
15+
## 核心机制
16+
17+
```
18+
上帝模式:一行代码读取全局状态 → 不需要感官 → 不会进化出眼睛
19+
生存模式:只能感知相邻 1 格 → 被迫发明远距感知 → 进化出眼睛
20+
```
21+
22+
每一种限制,对应一种被迫涌现的结构:
23+
24+
| 限制 | 涌现的结构 | 生物学对应 |
25+
|------|-----------|-----------|
26+
| 只能感知相邻格 | 多感知细胞排列 = 远距感知 | 眼睛 |
27+
| 感知消耗能量 | 选择性感知 | 注意力 |
28+
| 不能直接移动 | 连接+交替收缩 | 腿/肌肉 |
29+
| 不能远距取食 | 伸出+抓回 | 手/触手 |
30+
| 不能直接复制自己 | 逐步写入邻居 | 有成本的繁殖 |
31+
| 通信只能写相邻格 | 链式信号传递 | 神经系统 |
32+
33+
## 反面验证
34+
35+
传统 ALife(Bibites、biosim4 等)几十年没进化出"眼睛"级复杂结构,原因之一是给了太高级的 API:
36+
37+
- `sense(direction)` → 感知已经是原语,不需要进化
38+
- `move(direction)` → 运动已经是原语,不需要进化
39+
- `reproduce()` → 繁殖已经是原语,不需要进化
40+
41+
**高级 API = 预设答案 = 取消了进化的题目。**
42+
43+
## 设计原则
44+
45+
进化系统的原语设计,不是"给生物什么能力",而是"**不给**什么能力,逼它自己造"。
46+
47+
最低限度的物理规则(足够支撑涌现的最小集合):
48+
49+
```
50+
1. 空间:2D 网格,每格一个细胞或空
51+
2. 能量守恒:动作消耗能量,食物提供能量,归零即死
52+
3. 读取:只能读相邻 N 格的原始数值(N 越小越好)
53+
4. 写入:只能改写相邻空格的数值
54+
5. 连接:相邻细胞可绑定成刚体
55+
6. 收缩:绑定细胞间距可缩短
56+
```
57+
58+
六条规则。感知、运动、繁殖、身体、神经——全部在这六条之上涌现,而非被定义。
59+
60+
## 与"原语太低"的矛盾
61+
62+
| 原语太低 | 原语太高 |
63+
|---------|---------|
64+
| 搜索空间无限大 | 行为被预设,无涌现 |
65+
| 盲搜永远搜不到 | 不算真正进化 |
66+
67+
**LLM 变异是解这个矛盾的关键**:原语可以放得很低(因为 LLM 能理解组合语义),但搜索不是盲的。传统 GA 需要原语高(否则搜不到),LLM 进化允许原语低——这打开了涌现的天花板。
68+
69+
## 关联概念
70+
71+
- [[三管子架构]] — 限制即引擎是设计第一根管子(反馈环)的方法论
72+
- [[代码自然生长]] — 代码进化的愿景,限制决定能"长"出什么
73+
- [[万物皆反馈环]] — 限制创造选择压力,选择压力驱动反馈环
74+
- [[知识即结构]] — 涌现的结构就是进化积累的知识
75+
- [[适应度幻觉]] — 限制设计错误时,进化优化错误方向
Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
---
2+
tags: [AI, 实验, 愿景]
3+
---
4+
5+
# LLM 驱动的人工生命
6+
7+
**日期**:2026年3月31日
8+
**来源**:Ember 改造讨论 → 三管子架构 → ALife 项目调研 → 代码进化 vs 数值进化的本质区别
9+
**状态**:构想阶段,未实现
10+
11+
## 一、核心想法
12+
13+
将 Ember(实时 AI 心跳可视化装置)改造为一个 **LLM 驱动的人工生命生态系统**。不是传统 ALife 的数值进化,而是用 LLM 进化可读的行为代码。每个生物的"基因"是一段人能读懂的代码。
14+
15+
**目标体验**:让观众亲眼看到进化算法的魅力——一群生物在屏幕上竞争、繁殖、死亡,点击任何一个就能透视它的"DNA"(一段可读的代码)。
16+
17+
## 二、为什么是新东西
18+
19+
| | 传统 ALife(Bibites/biosim4) | 纯 LLM 项目(AI-Scientist) | **本项目** |
20+
|---|---|---|---|
21+
| 基因表示 | 浮点数组 | 论文/代码 | **可读的行为代码** |
22+
| 变异方式 | 随机数值扰动 | LLM 改写 | **LLM 改写** |
23+
| 可视化 ||| **** |
24+
| 可透视基因 | 无(数字看不懂) | 可读但无视觉 | **点击看代码** |
25+
| 进化速度 | 慢(盲搜) || **** |
26+
| 涌现复杂结构 | 有限(API太高级) | 不适用 | **未验证** |
27+
28+
**交叉点**:LLM 的代码理解能力 + ALife 的可视化生态 + 低原语设计。据调研,这个组合没有现有项目。
29+
30+
## 三、现有 ALife 项目调研
31+
32+
| 项目 | 形态进化 | 浏览器 | 最终成果 |
33+
|------|---------|--------|---------|
34+
| The Life Engine | 细胞级 || 简单聚团、运动,早期 |
35+
| Lenia | 涌现形态 || 数百种数学生命,视觉极美 |
36+
| Karl Sims (1994) | 方块身体 || 走/游/打架,经典但原始 |
37+
| biosim4 | 行为only || 聚到角落,YouTube 火爆 |
38+
| The Bibites | 行为only || 觅食/捕猎分化,社区活跃 |
39+
| Framsticks | 棒状身体 || 各种步态,学术标杆 |
40+
| ASAL (Sakana AI) | VLM搜索 || 发现新 Lenia/Boids 形态 |
41+
42+
**共同局限**:没有任何一个进化出"眼睛"级别的复杂结构。原因之一是 API 太高级(sense/move/reproduce 是原语),取消了进化的空间。
43+
44+
## 四、关键设计原则
45+
46+
### 1. 限制即引擎
47+
48+
不给高级 API。只给最低级的网格读写权限,逼进化自己发明感知、运动、繁殖。
49+
50+
```
51+
每个细胞拥有的全部能力:
52+
- 输入:周围 N 格的原始数值
53+
- 输出:写入自己和相邻格的数值
54+
- 约束:写入消耗能量,能量归零即死
55+
```
56+
57+
没有 sense(),没有 move(),没有 reproduce()。这些都从读写操作中涌现。
58+
59+
### 2. 代码即基因
60+
61+
每个细胞运行一段极简 JS 函数:
62+
63+
```js
64+
// 进化前(第 1 代)
65+
function cell(nearby, energy, mem) {
66+
return { write: [{dx:1, dy:0, val: energy}], mem }
67+
}
68+
69+
// 进化后(第 N 代)——LLM 变异产物
70+
function cell(nearby, energy, mem) {
71+
let foodDir = nearby.find(n => n.val > 0.8)
72+
if (foodDir && energy > 0.5) {
73+
// 朝食物方向写入自身代码副本 = "移动"
74+
return { write: [{...foodDir, val: energy-0.1, code: SELF}], mem }
75+
}
76+
if (energy > 2.0) {
77+
// 向空位写入自身代码 = "繁殖"
78+
let empty = nearby.find(n => n.val === 0)
79+
if (empty) return { write: [{...empty, code: SELF}], mem: {...mem, children: (mem.children||0)+1} }
80+
}
81+
return { write: [], mem }
82+
}
83+
```
84+
85+
### 3. 外观也是基因
86+
87+
可选:每个生物的基因包含行为代码(JS)+ 渲染代码(GLSL)。外观有选择压力时(其他生物能"看到"颜色),视觉进化自然发生——保护色、警告色、性选择。
88+
89+
### 4. 生态而非单体
90+
91+
不是进化一个最优解,而是多个策略共存竞争。会产生军备竞赛:
92+
- 出现"抢食者" → 被迫进化"躲避者"
93+
- 出现"躲避者" → 被迫进化"追踪者"
94+
- 永远不收敛,因为对手也在变
95+
96+
## 五、Ember 现有架构的复用
97+
98+
| Ember 组件 | 原用途 | 改造后 |
99+
|-----------|--------|--------|
100+
| 心跳循环(tick) | LLM 感知循环 | 进化世代循环 |
101+
| soul 压缩 | 记忆叙事 | 知识提炼(图书馆) |
102+
| 溶解检测 | 心智衰退监测 | 种群多样性/收敛监控 |
103+
| 内在驱动(5向量) | 情感状态 | 搜索策略参数 |
104+
| 转世机制 | 死亡重生 | 岛模型重启 |
105+
| 墓地/archive | 亡灵展示 | 进化历史展示 |
106+
| WebGL 火焰 | 视觉艺术 | 生态可视化 |
107+
| WebSocket 广播 | 访客交互 | 观众实时观察 |
108+
| BucketQueue | 消息批处理 | 变异请求队列 |
109+
110+
## 六、LLM 变异 vs 传统变异
111+
112+
为什么 LLM 变异能打破传统 ALife 的天花板:
113+
114+
```
115+
传统 GA 变异:[0.32, -0.71, 0.05] → [0.35, -0.71, 0.02]
116+
= 盲目扰动,不理解含义
117+
118+
LLM 变异:
119+
输入:"这个生物总是饿死,它的代码里没有寻找食物的逻辑"
120+
输出:添加 foodDir 感知 + 朝食物方向移动的代码
121+
= 有意识的、基于理解的改进
122+
```
123+
124+
代价:每次变异需要一次 API 调用。但进化效率提升可能是几个数量级——100 代达到传统 10 万代的效果。
125+
126+
## 七、LLM 的语言选择
127+
128+
| 语言 | LLM 训练数据 | 底层程度 | 适合度 |
129+
|------|------------|---------|-------|
130+
| Python/JS(完整) | 极多 | 太高 ||
131+
| GLSL || 逐cell并行 | ✅ 渲染层 |
132+
| **极简 JS 函数** | 极多 | 可控 | ✅ 行为层 |
133+
| 自定义 DSL || 随意 | ❌ LLM 不认识 |
134+
135+
原则:**选 LLM 最熟悉的、最底层的语言**。LLM 的搜索空间 = 训练数据。选不熟悉的语言等于让 LLM 盲搜。
136+
137+
## 八、开放问题
138+
139+
1. **LLM 变异的成本控制** — 100 个生物 × 每代变异 = 大量 API 调用,如何控制?
140+
- 可能方案:只对 top-K 个体做 LLM 变异,其余用传统交叉/突变
141+
2. **安全沙箱** — 用户浏览器里执行进化出的任意 JS 代码,如何隔离?
142+
3. **代码膨胀** — LLM 倾向写更长的代码,几百代后基因会膨胀到不可读
143+
4. **涌现天花板** — LLM 进化能否真的超越传统 ALife?需要实验验证
144+
5. **观众交互设计** — 如何让非技术观众也能理解"这段代码是眼睛"
145+
6. **fitness 定义** — 纯生存?还是加入观众评分(交互式进化)?
146+
147+
## 九、最小验证实验
148+
149+
如果要做,最小可行版本:
150+
151+
```
152+
- 64×64 网格
153+
- 每个格子:空 或 一段 10 行以内的 JS 函数
154+
- 物理:能量守恒 + 相邻读写
155+
- 变异:每代选 top-10 个体,LLM 变异
156+
- 渲染:Canvas 2D(不需要 WebGL)
157+
- 指标:存活代数、种群多样性、代码复杂度
158+
```
159+
160+
预计能在 1-2 天内验证"LLM 能否在低原语环境下进化出有意义的行为"。
161+
162+
## 关联概念
163+
164+
- [[限制即引擎]] — 本项目的核心设计原则
165+
- [[三管子架构]] — 反馈环+记忆+自指涉的框架
166+
- [[代码自然生长]] — 代码进化的宏观愿景,本项目是具体实例
167+
- [[万物皆反馈环]] — 生态中的多重反馈环
168+
- [[知识即结构]] — 每个生物的代码结构就是进化积累的知识
169+
- [[元进化]] — 变异率本身可进化 = 自指涉管子
170+
- [[适应度幻觉]] — 环境设计错误时进化方向错误

0 commit comments

Comments
 (0)