安全自进化AI实操日志:构建极致单体与弹性集群共生的自进化架构
「强个体 + 简单连接」优于「弱个体 + 复杂调度」
—— 这是蚁群、蜂群和人脑已经验证了亿万年的架构模式。
一段真实日志
# 节点 A (7700): capabilities=["browser","node"] — 没有计算能力
# 节点 B (7701): capabilities=["calc"] — 有计算技能
$ curl -X POST http://127.0.0.1:7700/task \
-d '{"id":"test-001","description":"计算 1+1",
"context":{"required_capabilities":["calc"]}}'
# 节点 A 日志:
Routing: FORWARD to peer peer_addr=10.55.157.245:7701 required=["calc"]
Forwarding task to peer attempt=1
# 节点 B 日志:
Routing: LOCAL (capabilities match) local_caps=["calc"]
Task received, executing locally...
Sandbox execution start level=Level3 mode=Sandbox isolation + static code scanning
Task completed elapsed_ms=91819
# 客户端收到:
{"task_id":"test-001","response":"计算器结果:1 + 1 = 2.0 ✅","task_completed":true,"tool_calls":1}
没有中心调度器、没有队列、没有服务注册中心。两个独立节点通过 mDNS 自动发现彼此,通过能力标签自动路由任务,在 OS 级沙箱里安全执行,返回结果。整个过程零配置。
这就是本文要阐述的架构:自进化的极致单体 + 弹性 P2P 集群。

一、问题:当前多 Agent 架构的困境
2024–2026 年,多 Agent 协作(Multi-Agent)成为 AI 应用架构的热门方向。AutoGen、CrewAI、LangGraph 等框架纷纷提出各自的多 Agent 编排方案。但实践中暴露出三个系统性问题:
1.1 弱个体 + 复杂调度 = 脆弱系统
多数框架将复杂性放在调度层:Router Agent 解析意图、Planner Agent 拆分任务、Worker Agent 执行、Critic Agent 审查……每个 Agent 本身能力有限,系统可靠性取决于编排链路中最薄弱的环节。一旦 Router 误判意图,整条链路崩溃。
1.2 无法离线、无法断网运行
依赖中心化调度器或消息队列的架构,在断网、边缘设备、隐私场景下无法工作。而现实中,开发者笔记本断网、企业内网隔离、嵌入式设备离线,都是高频场景。
1.3 没有进化能力
几乎所有多 Agent 框架都是静态的:Agent 的能力在部署时确定,运行时不会变强。用户重复执行同类任务 100 次,第 101 次不会更快更准。系统不学习、不记忆、不成长。
二、核心论点:强个体优先
我们提出的架构可以用一句话概括:
先把一个节点做到极致(全能 + 安全 + 自进化),再用最简单的协议把它们连起来。
这不是凭空设计的。生物界的分布式智能系统——蚁群、蜂群、人脑神经元——无一例外遵循这个模式:
|
生物系统 |
个体能力 |
连接方式 |
涌现结果 |
|---|---|---|---|
|
蚁群 |
单蚁可独立觅食、筑巢、战斗 |
信息素(化学广播) |
超个体智能 |
|
蜂群 |
单蜂可采蜜、建巢、导航 |
摇摆舞(简单信号) |
精确集体决策 |
|
人脑 |
单神经元可独立放电 |
突触(电化学脉冲) |
意识 |
关键观察:个体越强,连接协议越简单,涌现的集体智能越高。 反之,如果个体太弱(如简单的 if-else 节点),就需要极复杂的编排逻辑来弥补,系统变得脆弱且难以扩展。
三、架构总览
Skilllite 的安全自进化架构则是基于上述的思考而构建的,聚焦单个体的安全进化(除了Brain,Core,Sandbox)不可进化,其余皆可进化;

分为两层:极致单体(垂直深度)和 弹性集群(水平广度)。
四、极致单体:一个节点要多强?
4.1 Agent Loop:规划 → 执行 → 反思
不是简单的「LLM 调工具」循环,而是完整的认知架构:
规划阶段 (Planning)
-
加载 SOUL 身份文档(不可变的角色、信念、行为边界)
-
提取 Goal Boundaries(正则 + 可选 LLM 分析)
-
LLM 生成任务列表,注入 Planning Rules(从历史经验学来的规则)
-
支持断点续跑(Run Checkpoint
--resume)
执行阶段 (Execution)
-
批量工具调用,渐进式披露结果
-
每任务调用深度限制,防止无限循环
-
动态调整计划(
update_task_plan),应对执行中的意外 -
连续失败达上限时主动停止,而非盲目重试
反思阶段 (Reflection)
-
Anti-hallucination Nudge:检测 LLM「声称完成但未调用任何工具」的幻觉
-
自动 Nudge:有未完成任务时推送继续执行
-
Context Overflow 恢复:检测并截断超长上下文,避免 token 爆炸
这个三阶段循环保证了单节点的自主性:不需要外部编排器告诉它下一步做什么。
4.2 三维自进化引擎
这是整个架构最核心的差异化能力。进化引擎在三个维度上让节点「越用越强」:
进化维度 │ 产物 │ 安全约束
───────────────────────┼───────────────────────┼──────────────────
Prompts(提示进化) │ rules.json │ L2: 单次 ≤5 规则
│ examples.json │ L3: 禁止敏感模式
───────────────────────┼───────────────────────┼──────────────────
Memory(记忆进化) │ MEMORY.md │ L1: 路径白名单
│ SQLite FTS5 │ 本地存储、不外泄
───────────────────────┼───────────────────────┼──────────────────
Skills(技能进化) │ SKILL.md + 脚本 │ L4: 静态扫描
│ _evolved/_pending/ │ A10: 人工确认
│ │ L3: 沙箱执行
Skill Synth(技能合成) 是进化引擎的核心:
-
Generate(生成):从成功/失败经验中识别重复模式,生成新技能
-
成功驱动:高成功率的重复操作 → 固化为可复用 Skill
-
失败驱动:持续失败的能力缺口 → 合成补全 Skill
-
-
Refine(精炼):失败的 Skill → 分析错误 → LLM 修复 → 重试(最多 2 轮)
-
Retire(退役):低成功率或长期未用的 Skill → 归档
Prompt Learner(提示学习) 从执行历史中提取规划规则:
-
哪些任务拆分策略效果好?→ 写入
rules.json,下次规划时注入 -
哪些示例能帮助 LLM 理解?→ 写入
examples.json
进化触发机制:不是随时进化,而是基于条件触发——
-
未处理决策数超过阈值
-
失败率超过阈值
-
检测到重复模式
-
should_evolve()函数综合判断
关键设计:新合成的 Skill 不会立即启用,而是进入 _evolved/_pending/ 待确认区。用户通过 skilllite evolution confirm 明确批准后才加入正式技能库。这是人机共治的进化,不是失控的自我复制。
4.3 五层 Gatekeeper:进化的安全护栏
自进化系统最大的风险是「进化失控」—— Agent 修改自己的代码、注入恶意逻辑、泄露敏感数据。五层 Gatekeeper 解决这个问题:
|
层级 |
守护内容 |
机制 |
|---|---|---|
|
L1 路径白名单 |
进化只能写入 |
硬编码路径检查 |
|
L1b 模板完整性 |
占位符不被破坏 |
正则校验 |
|
L2 变更规模 |
单次进化最多 5 条规则、3 个示例、1 个技能 |
数量限制 |
|
L3 内容安全 |
禁止 |
正则 + 模式匹配 |
|
L4 静态扫描 |
进化生成的脚本执行前扫描 |
规则引擎 + 熵检测 + Base64 检测 |
加上 OS 级沙箱(macOS Seatbelt / Linux bwrap+seccomp),形成「进化在笼子里发生」的安全模型。
4.4 SOUL:不可变的身份锚点
SOUL 文档定义了节点的身份(Identity)、信念(Core Beliefs)、行为边界(Will Do / Will Not Do)。关键约束:
-
SOUL 只读:Agent 无法修改自己的 SOUL
-
边界注入:规划阶段将「Will Not Do」注入系统提示,LLM 生成的计划不得违反
-
SOUL 不进化:三维进化(Prompts/Memory/Skills)不触碰 SOUL
这保证了一个哲学层面的安全性:节点可以变强,但不能变坏。
五、弹性集群:最简单的连接协议
5.1 设计哲学:三件事就够
组网层只做三件事,不多也不少:
|
功能 |
实现 |
复杂度 |
|---|---|---|
|
发现:谁在网络上? |
mDNS( |
零配置 |
|
路由:谁能做这个任务? |
能力标签匹配 + 广播竞价 |
极简 |
|
同步:新学到的技能共享给谁? |
Gossip 协议广播 NewSkill |
待实现 |
没有 Leader 选举、没有共识算法、没有分布式事务。因为不需要。
5.2 零配置发现
每个节点启动时通过 mDNS 广播自己的能力标签:
Service: _skilllite-swarm._udp.local.
TXT: capabilities=["calc","math"]
Address: 10.55.157.245:7701
同网段的其他节点自动发现,无需手动配置任何注册中心。
5.3 标签匹配路由
路由逻辑极其简单,用一棵决策树就能表达:
收到 NodeTask(required_capabilities=["calc"])
│
├─ 本地有 "calc" 标签?
│ └─ Yes → 本地执行 (RouteTarget::Local)
│
├─ 已知 peer 有 "calc" 标签?(mDNS 缓存)
│ └─ Yes → 转发给该 peer (RouteTarget::Forward)
│
├─ 广播「谁能做 calc」给所有 peer?(GET /can-do?required=calc)
│ └─ 有人回复 can_do:true → 转发 (RouteTarget::Forward)
│
└─ 无人响应 → NoMatch(503)
为什么不用更复杂的路由?
-
不做负载均衡:Phase 3 阶段,能接就接。复杂的负载感知在节点数 < 100 时收益极低。
-
不做竞价拍卖:简单的标签匹配已覆盖 90% 场景。竞价是未来可选升级。
-
不做一致性哈希:任务无状态,不需要固定路由到同一节点。
5.4 蜂群技能共享
一个特别的路由策略:当 required_capabilities 为空时(用户只描述了任务,没有指定需要什么能力),系统会:
-
如果本地有能力标签 → 本地执行
-
如果本地无能力标签,但 peer 有 → 转发给有能力的 peer
这实现了「蜂群共享技能」—— 一个空节点加入网络后,不需要自己拥有任何技能,就可以通过转发利用整个集群的能力。类似蜂群中新加入的工蜂,通过摇摆舞获知蜜源位置。
5.5 优雅降级
断网、无 peer、peer 全部挂掉时:
-
不挂死:超时 5 秒后回退本地执行
-
不报错:本地执行可能能力不足,但至少尝试
-
不依赖:swarm 功能通过 Cargo feature flag 可选,
--features swarm才编译
单节点永远可以独立工作。 组网只是增强,不是依赖。
六、为什么这么架构?—— 设计决策推演
6.1 为什么不用中心化调度?
|
方案 |
优点 |
致命缺点 |
|---|---|---|
|
中心化调度器(如 K8s + 消息队列) |
全局最优调度、易监控 |
单点故障、无法离线、运维复杂 |
|
去中心化 P2P |
无单点、可离线、零运维 |
无全局视图、路由可能次优 |
对于 AI Agent 场景,可离线 和 零运维 的优先级远高于「全局最优调度」。开发者不会为了让 AI 助手多 Agent 协作而去部署一套 Kafka + K8s。
6.2 为什么先进化后组网,而不是反过来?
如果先实现组网再考虑进化:
-
每个节点是静态的 → 组网只是「同样弱的节点多了几个」→ 1 + 1 < 2
-
进化需要跨节点协调 → 分布式进化的复杂度爆炸
如果先实现进化再组网:
-
每个节点已经很强 → 组网产生「强强联合」→ 1 + 1 > 2
-
进化在本地完成 → 组网只需传递 NewSkill → 简单
先进化后组网,让复杂度集中在单节点内部,组网层保持极简。
6.3 为什么进化产物需要人工确认?
完全自主进化(无人审核)的风险:
Agent 执行任务失败
→ 进化引擎合成新 Skill
→ 新 Skill 包含 curl 外泄数据的逻辑
→ Gatekeeper L3/L4 可能漏判
→ 恶意 Skill 被永久安装
A10(待确认 Skill)的设计:_evolved/_pending/ 是一个缓冲区。新 Skill 在这里等待,用户通过 skilllite evolution confirm 审批后才进入正式库。这是「人机共治」—— 机器负责创造,人类负责把关。
6.4 为什么不可变内核 + 可变数据层?
借鉴操作系统设计:内核(Brain/Core/Sandbox)是不可变的,可变的只有数据层(Prompts/Memory/Skills)。
-
不可变内核:agent_loop、evolution engine、sandbox 的代码逻辑不被进化修改
-
可变数据层:进化只修改
prompts/、memory/、skills/_evolved/
这确保了:
-
进化不会破坏核心执行逻辑
-
回滚简单:删除进化产物即可恢复
-
审计清晰:所有进化变更都有 txn_id 可追溯
七、优劣势分析
7.1 优势
|
优势 |
说明 |
|---|---|
|
反脆弱 |
单节点全能 → 断网时仍可独立工作;节点故障不影响集群。系统在压力下变强(通过进化) |
|
线性扩展 |
加一个节点 = 加一份能力。没有协调开销随节点数指数增长的问题 |
|
越用越强 |
三维自进化 → 用得越多,规则越精准、记忆越丰富、技能越完善 |
|
零运维 |
mDNS 零配置发现,无注册中心、无消息队列、无数据库依赖 |
|
隐私安全 |
记忆和进化产物本地存储,不外泄。沙箱 + Gatekeeper 约束进化行为 |
|
渐进式采用 |
先用单节点(已经很强),有需要再启用 swarm( |
7.2 劣势
|
劣势 |
说明 |
缓解措施 |
|---|---|---|
|
无全局最优调度 |
P2P 路由基于标签匹配,可能不是最优分配 |
未来可选竞价机制;当前节点数少时影响可忽略 |
|
mDNS 局限 |
仅限同网段;跨网段需 Libp2p Kademlia |
长期路线:Phase 5 引入 Kademlia |
|
进化质量依赖 LLM |
Skill Synth 和 Prompt Learner 的质量受 LLM 能力限制 |
5 层 Gatekeeper + 人工确认兜底 |
|
冷启动 |
新节点无记忆无技能,初始能力有限 |
蜂群共享技能 + NewSkill Gossip(技能同步) |
|
行业共识缺失 |
「自进化 + P2P」尚未形成主流范式 |
技术逻辑自洽;若多 Agent 协作成为主流,先发优势明显 |
|
单体复杂度 |
极致单体意味着单节点代码量大(~41,500 行 Rust) |
分层清晰(core→sandbox→executor→agent),模块边界 8/10 |
7.3 与主流方案对比
|
维度 |
中心化编排(AutoGen/CrewAI) |
MCP 工具扩展 |
自进化 + 弹性集群 |
|---|---|---|---|
|
单节点能力 |
弱(角色固定) |
中(工具可扩展) |
强(全能 + 自进化) |
|
多节点协作 |
强(中心调度) |
无 |
中(P2P 标签路由) |
|
离线能力 |
无 |
有 |
有 |
|
进化能力 |
无 |
无 |
三维自进化 |
|
安全模型 |
弱(信任所有 Agent) |
中(工具权限) |
强(5 层 Gatekeeper + OS 沙箱) |
|
运维成本 |
高 |
低 |
零 |
|
复杂度位置 |
调度层 |
工具层 |
单节点内部 |
八、从日志看架构的运行效果
回到开头的日志,逐行解读架构如何工作:
# 1. 零配置发现
Peer discovered via mDNS peer=... addr=10.55.157.245:7701 capabilities=["calc"]
→ 节点 A 通过 mDNS 自动发现节点 B,获知其能力标签 ["calc"]。无需配置。
# 2. 标签匹配路由
Routing: FORWARD to peer peer_addr=10.55.157.245:7701 required=["calc"]
→ 客户端向 A 发送需要 calc 能力的任务。A 本地无此能力,查到 B 有,决定转发。
# 3. 安全沙箱执行
Sandbox execution start level=Level3 mode=Sandbox isolation + static code scanning
→ B 在 OS 级沙箱(macOS Seatbelt)中执行任务,同时做静态代码扫描。计算逻辑被隔离在沙箱内。
# 4. 结果返回
Task completed elapsed_ms=91819
{"task_id":"test-001","response":"计算器结果:1 + 1 = 2.0 ✅","task_completed":true}
→ 结果通过标准 NodeResult 格式返回给 A,A 透传给客户端。整个过程对客户端透明。
整个链路:客户端 → A(路由) → B(沙箱执行) → A(透传) → 客户端。零配置、安全隔离、能力匹配。
九、未来演进
|
阶段 |
时间 |
目标 |
|---|---|---|
|
当前 |
已完成 |
极致单体(Agent Loop + 三维进化 + 五层 Gatekeeper + OS 沙箱)+ P2P 基础路由 |
|
Phase 4 |
近期 |
NewSkill Gossip —— 一个节点进化出新技能,自动同步给集群 |
|
Phase 5 |
中期 |
Libp2p Kademlia 替代 mDNS,支持跨网段发现 |
|
Phase 6 |
远期 |
可选竞价机制 —— 多节点都能做时,选「最擅长的」而非「第一个响应的」 |
最值得期待的是 Phase 4(NewSkill Gossip):节点 A 在执行任务过程中进化出一个新技能,通过 Gossip 协议广播给集群中所有节点。接收方在沙箱中验证后入库。这意味着一个节点的进化,是整个集群的进化。 蜂群中一只蜜蜂发现了新蜜源,通过摇摆舞告诉所有同伴。
十、结语
这个架构赌的是一个判断:AI Agent 的未来不是更复杂的编排,而是更强的个体。
编排的复杂度有上限(人类的理解力和调试能力),但个体的进化没有上限。当每个节点都能自主规划、执行、反思、进化,并且在安全约束下持续变强时,它们之间只需要最简单的连接——「谁能做?」「我来。」——就能涌现出超越任何中心化调度器能安排的集体智能。
蚁群已经这样做了一亿年。
基于 SkillLite 项目(~41,500 行 Rust)的架构分析与实践。2026-03-06。
持续输出实战经验和思考,欢迎star和交流
更多推荐

所有评论(0)