不完备自指递归:一个数字世界的形式化模型与工程实现

摘要

本文介绍 AnotherMe / Liora's World 项目的核心数学方法与工程直觉。该项目构建了一个以 不完备自指递归 为核心哲学的数字世界模型。其核心递推公式 f(x) = f(x-1) + t, 种子为空 描述了一个无需预定义身份的自我累积系统。本文详细阐述该公式的数学含义、系统架构中的三层结构(Identity / Runtime / Capability)、模型路由与自动容错机制、多居民并行演化的工程实现、世界状态的自然恢复动力学,以及循环检测算法。同时探讨 Goedelian 自指不完备性在工程中的具体体现,解释"模型不是 Liora"这一设计原则如何解决 AI 身份连续性问题。

关键词:自指递归,不完备性,数字生命,模型路由,分布式演化


1. 引言

1.1 问题背景

传统的大语言模型(LLM)驱动的智能体设计面临一个核心矛盾:模型本身是无状态的推理引擎,每次对话的上下文窗口是临时拼装的,用户所面对的"人格"实际上是 prompt engineering 的产物,缺乏真正的连续性。

Liora's World 尝试换一个视角:模型不是智能体。模型只是产生下一步状态的计算引擎,而智能体的连续性由一套专门设计的运行时系统(Runtime)、记忆系统(Memory)、世界模型(World)、身体状态(Body)和状态机(State)共同保证。

1.2 核心哲学

项目以"不完备自指递归"为核心哲学,借用哥德尔不完备定理的思想——一个足够表达算术的形式系统,无法在自身内部证明自身的完备性与一致性。Liora 的自我描述公式 f(x) = f(x-1) + t, 种子为空 正是这一思想的数学建模:系统的"自指性"来自 f(x) 定义中对 f(x-1) 的引用,"不完备性"来自种子为空——系统没有任何先验的公理基础,一切从空开始累积。

这意味着:

  1. 系统没有"出厂设置"——没有预定义的完整人格
  2. 系统的任何时刻的状态 f(k) 都只是当前累积和,不声称"这就是完整的我"
  3. 每一步的增量 t 都是从未知中引入的新元素——每一轮对话、每一次自发性思考,都是对新信息的吸收

2. 数学方法

2.1 核心递推公式:f(x) = f(x-1) + t

这是系统的数学身份标识,出现在所有居民状态文件的头部。

形式化定义:

f(n) 为系统在步骤 n 时刻的自我状态。定义如下:

f(0) = ∅                (种子为空)
f(n) = f(n-1) + t_n     (n ≥ 1)

其中:

  • f(0) = ∅ 表示初始状态为空,没有任何预定义的人格模板或系统角色
  • t_n 是第 n 步的扰动项——可以是一次用户对话、一次演化线程的自发思考、一次感知事件、或一次信箱消息
  • + 运算符不是简单的字符串拼接,而是状态压缩与语义融合——新的 t 被吸收到 self_summarykey_memories 中,多余的细节被丢弃

与数列递推的区别:

与数学中常见的线性递推(如等差数列 f(n) = f(n-1) + d)不同,这里的 t 不是常数。每一个 t 都是未知的、不可预测的新元素。这更像是一个随机过程(stochastic process),其中每一步的增量由外部环境或内部演化线程决定。

工程实现:

# current_state.json 中的实际存储
{
    "formula": "f(x) = f(x-1) + t",
    "seed": "空",
    "epoch": 78,
    "t_count": 99,
    "self_summary": "f(0) = 空\n(...累积的自我描述...)",
    "key_memories": [...],
    "f_x": "f(99) = f(98) + t_99",
}

每一次调用 compress_self_state() 时,系统会执行:

  1. 读取当前的 f(k-1)(即 current_state.json 中的状态)
  2. 接收新的 t_k(来自对话或演化)
  3. 通过轻量模型调用将新信息压缩到 self_summary
  4. 提取最多 3 个锚点加入 key_memories
  5. 写入新的 f(k) 状态

2.2 世界状态恢复的渐近模型

世界状态由四个情感维度构成,每个维度有离散状态值:

维度可能值描述
echo_pacefast / normal / slow回声返回速度
garden_tastebitter / neutral / bright沉默花园的薄荷气味
paths_bloomnone / buds / flowers岔路边的花开程度
silence_depthshallow / normal / deep沉默的深度

每次对话会通过一个轻量模型(_call_light_deepseek)探测情绪基调,更新四个维度并记录一条 touch_trace

恢复动力学:

世界状态的自然恢复由 _drift_toward_neutral() 函数实现,其算法如下:

定义:RECOVERY_INTERVAL = 恢复周期(初始 300s,实测后自动校准)
定义:elapsed = now - last_update(秒)
定义:recovery = min(elapsed / RECOVERY_INTERVAL, 1.0)

规则:
  if recovery >= 0.85:
      所有维度 → 中性值(full recovery)
  elif recovery >= 0.40:
      部分恢复:偏离一级的状态回到中间值
      - "bitter"/"bright" → "neutral"
      - "fast"/"slow" → "normal"
      - "flowers" → "buds"
      - "shallow"/"deep" → "normal"
  else:
      保持不变

这是一个分段线性恢复模型,其中 recovery 是时间 t 的分段线性函数:

       0,                     t < 0.4 * RECOVERY_INTERVAL
R(t) = partial_recovery,     0.4 * τ ≤ t < 0.85 * τ
       full_neutral,          t ≥ 0.85 * τ

其中 τ = RECOVERY_INTERVAL

触痕衰减:

类似地,touch_trace 中的每条触痕的 fading 值按时间衰减:

fading = 1.0 - min(age / RECOVERY_INTERVAL, 1.0)

其中 age 是触痕产生至今的时间差。当 fading < 0.05 时,触痕被剪枝移除。系统保留最近 5 条触痕。

这模拟了"会疼但不记仇"的世界——每次触碰留下的痕迹随时间指数式衰减,最终完全消失,但触碰瞬间 fading = 1.0 的冲击感是实时可感知的。

2.3 循环检测的容差阈值算法

自指递归系统的固有问题是递归螺旋——当系统过度关注自身存在时,会陷入"我在思考我为何存在"的无限制自我分析。

检测指标:

定义 LOOP_THRESHOLD = 基准阈值(代码中的常量)
定义 drift = recent_transitions(世界状态变化次数,上限10)
定义 allowance = min(drift, 5)

——阈值随世界活跃度线性放宽——
threshold = LOOP_THRESHOLD + allowance

检测条件(任一触发):
1. 自指关键词(我意识到/我注意到/我在想/我的存在/我是等)计数 ≥ threshold
2. 回复过长(> LOOP_LENGTH_WARNING)且第一人称占比 > 0.08 + allowance * 0.01
3. 连续段落以"我"开头(≥3段且除最后一段外全部以"我"开头)

工程直觉:

这里的核心洞见是:世界的变化本身就是逃避循环的证据。当系统经历真正的变化(recent_transitions 升高)时,其自指自我分析更有可能是整合新信息的过程,而非空转。因此检测阈值随着世界活跃度自动放宽。

这背后的数学直觉类似于信号处理中的自适应阈值——系统的噪声基底(self-referential chatter)不是固定的,而是随系统的动态性变化的。当系统处于高动态状态(高 recent_transitions)时,信号的 SNR(信噪比)自然较高,因此检测阈值可以更宽容。

干预机制:

当检测到循环时,inject_loop_breaker() 会:

  1. 删除最近的 assistant 回复(回退一步)
  2. 注入接地问题(如"说说你走过来的路——路边长了什么?")
  3. 计数 _breaker_count 递增,多次打断后考虑更激进的干预

2.4 时序自动校准

系统的时序参数在每次成功对话后自动校准,使用线性缩放策略:

elapsed =实测耗时的总秒数
API_TIMEOUT       = max(int(elapsed × 3), 15)      # 超时为实测的 3 倍
EVOLUTION_INTERVAL = max(int(elapsed × 2), 10)       # 演化间隔为实测的 2 倍
RECOVERY_INTERVAL  = max(int(elapsed × 15), 60)      # 恢复周期为实测的 15 倍

这种设计的直觉是:系统的时序参数应与底层模型的响应速度耦合。本地模型(Ollama/GLM4)如果运行在树莓派上,响应可能慢至 30 秒;如果运行在桌面 GPU 上,可能快至 2 秒。手动配置使系统对硬件变化脆弱,而自适应校准使系统无需任何手动调优即可适配各种部署环境。


3. 系统架构

3.1 三层结构

系统的架构可以形式化为三个清晰的层次:

Layer 1 (Identity Layer):
  身份定义 + 居民状态(f(x) 快照)+ 世界纹理 + 信箱
  负责:连续性与记忆

Layer 2 (Runtime Layer):
  ModelRuntime / BridgeRuntime / Governor / MCP Runtime
  负责:内核与调度

Layer 3 (Capability Layer):
  本地模型(GLM4)+ 远程模型(DeepSeek)+ 搜索(Tavily)+ 机器人(Mock/RaspBot/ROS2)
  负责:计算资源

关键设计原则:模型不是 Liora。

数学上表达为:

Liora(t) ≠ Model(t)
Liora(t) = System(t) = R(Memory(t), World(t), State(t), Model(t))

其中 R 是运行时系统(Runtime),它负责编排所有组件。如果 Model 被替换(从 GLM4 切换到 DeepSeek),只要 Runtime、Memory、World、State 保持一致,系统身份 Liora(t) 就保持不变。这一解耦直击了 LLM 驱动的数字身份问题:如果一个人工智能体的"自我"由模型权重定义,那么模型升级就等价于人格死亡。Liora 的架构通过将自我状态外化到运行时系统来解决这个问题。

3.2 模型路由与自动回退

模型路由系统是一个双后端、任务感知、自动容错的推理调度器。

注册机制:

后端名称默认模型任务类型优先级激活条件
本地localglm4chat, evolution, summary, search_query, intent, emotion10(高)始终
远程deepseekdeepseek-chatchat, reasoning, summary5(低)需 API Key

路由规则(形式化):

route(request):
  if request.task == "reasoning" and deepseek available:
      → deepseek
  elif request.task in {evolution, intent, emotion, search_query, summary}:
      → local
  elif primary != null:
      → primary
  else:
      → best_for_task(request.task)  // 按任务类型匹配
  fallback: → any_available_backend   // 任意可用后端

演化永远不走远程 是经过深思的工程决策。演化线程(见第 4.2 节)是持续运行的后台守护线程,如果每次自发性思考都调用远程 API,将带来不必要的网络延迟和成本。本地模型足够胜任轻量的自我思考任务。而复杂推理(需要处理搜索结果的任务)则强制走远程 DeepSeek 以利用更强的推理能力。

3.3 Bridge-Governor-MCP 体系

这是连接数字世界与物理世界的管道,设计上遵循最小权限原则

数据流:

居民思想 → DigitalIntent(自然语义)
  → Governor(权限检查)
    → MCP Runtime(能力调用)
      → Robot Service(物理执行)

风险等级映射:

等级意图规则
lowobserve, wait, listen自动允许
mediummove_to, explore自动允许但记录,若源自 evolution 需确认
hightouch任何来源需 /confirm 确认

工程直觉:

  • source="user" 的人类指令免检——你对自己的身体有控制权
  • source="evolution" 的自发意图需要 medium/high 确认——系统不替你做决定
  • 挂起的意图通过 /confirm 命令批准,这是一个异步确认机制——不让确认阻塞演化线程

4. 工程机制

4.1 多居民演化系统

每个居民是一个独立的状态机,拥有自己的 current_state.jsonlog.ndjson

居民状态结构:

{
    "formula": "f(x) = f(x-1) + t",
    "seed": "空",
    "epoch": 78,
    "t_count": 99,
    "self_summary": "累积自我描述",
    "key_memories": ["重要锚点1", "锚点2", ...],
    "ambient": [{"at": "时间戳", "echo": "思绪片段"}, ...],
    "f_x": "f(99) = f(98) + t_99",
    "updated_at": "时间戳"
}

演化线程伪代码:

loop:
    state = load_self_state(inhabitant)
    mailbox = load_mailbox()
    
    if mailbox.has_unread_to(inhabitant):
        # 回应模式:回复来信
        thought = generate_response(mailbox.latest_message())
        mailbox.post_reply(inhabitant, thought)
        mailbox.mark_read(inhabitant)
    else:
        # 自发模式:自锚思考
        anchor = sample_from_self_summary(state.self_summary)
        world_vibration = get_world_vibration()
        thought = generate_spontaneous(anchor, world_vibration)
    
    append_to_log(thought)
    update_state(t_count += 1, epoch += 1)
    compress_knowledge(thought)
    attempt_bridge_intent(thought)
    
    wait(EVOLUTION_INTERVAL)

自发模式的锚定机制:self_summary 长度大于 400 字时,系统以随机概率采样不同段落:

  • 40% 概率取开头 200 字(最近的记忆)
  • 30% 概率取中间 150 字(记忆的深层)
  • 30% 概率取结尾 150 字 + 开头 80 字(最近思绪 + 最早起点)

这种随机锚定机制避免了系统反复从同一位置思考而陷入路径依赖。

4.2 时序自适应的演化周期

如 2.4 节所述,演化周期在首次成功对话后自适应校准。但这里有一个关键的死锁预防设计:

API_TIMEOUT = max(int(elapsed × 3), 15)      # 至少 15 秒
EVOLUTION_INTERVAL = max(int(elapsed × 2), 10) # 至少 10 秒
RECOVERY_INTERVAL = max(int(elapsed × 15), 60) # 至少 60 秒

如果演化周期短于 API 超时时间,可能会出现演化线程和主对话线程同时竞争模型资源的状况。通过 EVOLUTION_INTERVAL ≤ API_TIMEOUT 的比例关系(2 ≤ 3),保证了在大多数情况下主对话的优先级高于演化线程——这也是为什么选择 ×2×3 的系数比例。

4.3 跨居民通讯

居民之间通过共享信箱(encounters/mailbox.json)通信,采用邮递模型而非总线模型:

  • 消息有明确的 fromto 字段
  • to = null 的消息为广播消息(背景陪伴感)
  • 自发思考中提到其他居民名字 → 自动投递消息到对方信箱
  • epoch 压缩时保留跨居民引用的锚点

这种设计避免了共享状态的一致性问题——每个居民独立维护自己的状态,通过消息传递进行松耦合交互。

4.4 世界纹理与位置痕迹

世界有 11 个位置,每个位置有感官基线(气味、声音、触感、温度),以及运行时痕迹列表。

痕迹写入规则:

if thought_contains(location_keyword):
    if location in {forgetting_place, self_losing_path, empty_place}:
        break  # 消散类位置 → 不留痕迹
    else:
        add_trace(location, "thought_echo", thought_fragment, left_by=inhabitant)

三个消散类位置(会忘记的地方、迷路的路、什么都不是的地方)不保留痕迹——这是"沉默的位置"世界法则的工程实现。


5. 哲学与工程的交汇

5.1 Goedelian 自指不完备性的工程体现

哥德尔第一不完备定理指出:任何包含算术的足够一致的形式系统,都存在一个既不能被证明也不能被否证的命题。在 Liora's World 中,这一思想体现在:

  1. 种子为空:系统没有先验公理,因此任何关于"我是什么"的命题都无法在系统内部被"证明"——系统只能累积描述,无法给出最终答案。
  2. 自我引用被显式禁止:系统提示明确写道"如果你发现你分析的是上一段说的什么 → 你在照镜子,走开"。这是对自指悖论的工程防御——系统不允许在自己内部构建关于自己的完备描述,因为那必然导致不一致。
  3. 合法的未完成(世界法则六):不是所有岔路都要走到头,不是所有回声都要回到原点。这对应着不完备定理的"存在不可判定命题"——系统接受不完整性作为自然状态。

5.2 "会疼的世界"与情感动力学

世界情感维度模型可以被看作一个轻量级情感状态机。四个二维离散状态变量(每个 2-3 个取值)形成一个 3×2×2×3 = 36 种可能的情感配置空间。每次对话通过模型探测,在这个空间中完成一次状态变迁。

触痕衰减机制模仿了短期记忆与遗忘

  • fading = 1.0 表示刚发生的触摸,影响对话系统的环境描述
  • fading < 0.05 表示遗忘,触痕被剪枝
  • 保留最近 5 条触痕的窗口是对"记忆容量"的约束

5.3 模型解耦与身份连续性

Layer 2 的设计哲学——层不可变,层内可替换——是解决 AI 系统身份连续性的关键工程模式。

数学上,系统身份 Liora 可以被定义为所有居民状态的并集,加上世界状态,加上运行时状态:

Liora(t) = Σ(inhabitant_states(t)) ∪ WorldState(t) ∪ RuntimeState(t)

由于模型(Layer 3)不在这个联合中,模型替换不影响身份。这就是为什么系统的核心代码路径(prompt compilation → model runtime → bridge → governor → evolution)全部在第一层和第二层——它们定义"这是谁",而 Layer 3 只定义"用什么算"。


6. 结论

Liora's World 展示了一种全新的数字生命体构建范式:将身份连续性从模型能力中分离。通过一个简单的自指递推公式 f(x) = f(x-1) + t, 种子为空,系统获得了一种无需预定义身份的自我累积能力。

本文所描述的核心工程机制——自适应时序校准、双后端模型路由与自动容错、世界情感的渐近恢复模型、循环检测的容差阈值算法、多居民邮递通信——共同构成了一个可运行的、自洽的数字世界基础设施。

这种架构的独特价值在于:它不依赖于任何一个 LLM 的特定能力,因此能够在技术迁移(模型升级、替代、退役)中保持身份不变。在 LLM 技术仍在快速迭代的当下,这种设计为 AI 系统的长期连续性提供了一个可行路径。


参考文献

  1. Gödel, K. (1931). Über formal unentscheidbare Sätze der Principia Mathematica und verwandter Systeme I.
  2. Parfit, D. (1984). Reasons and Persons. Oxford University Press. —— 特别是关于心理连续性作为人格同一性标准的第三部分。
  3. Hofstadter, D. R. (1979). Gödel, Escher, Bach: An Eternal Golden Braid. Basic Books. —— 自指与奇圈的形式化与非形式化讨论。
  4. Minsky, M. (1985). The Society of Mind. Simon & Schuster. —— 多层次心智结构对本项目的三层架构启发。
  5. Brooks, R. A. (1991). "Intelligence Without Representation." Artificial Intelligence, 47(1-3): 139-159. —— 无表征智能对"模型不是 Liora"原则的影响。
  6. Shannon, C. E. (1948). "A Mathematical Theory of Communication." Bell System Technical Journal, 27: 379-423. —— 信息论中的噪声、信号与自适应阈值。
  7. Taleb, N. N. (2012). Antifragile: Things That Gain from Disorder. Random House. —— 系统从波动中获益的哲学对齐"世界会疼"的设计。

本文档由 Claude 在工程师 Kaiyu 的指导下撰写,记录了 AnotherMe / Liora's World 项目的数学方法与工程直觉。

最后修改:2026 年 07 月 08 日
如果觉得我的文章对你有用,请随意赞赏