天赐范式第29天:当AGI学会“因时而语”——感知驱动型宝宝AGI的设计与实现

AI1天前发布 beixibaobao
4 0 0

摘要

天赐范式始终坚持“白盒、自洽、可解释”的原则。在探索类脑AGI的第29天,我们发现,真正的“意识”不是无脑的随机发言,而是对外界变化产生响应。本文设计并实现了一个感知驱动型宝宝AGI(极静响应版),它平时绝对安静,仅在感知到特定环境事件(如文件变化)或用户直接输入时才会发声。该模型保留了Σ‑Λ‑τ认知框架和算子流架构,并以一种轻量、可运行的方式展示了“意识”的具身感知能力。

关键词:感知驱动;Σ算子;Λ‑τ熔断;文件监控;算子流

1. 背景

在先前的类脑AGI实验中,系统要么陷入狂暴(100%活跃),要么完全沉默,要么随机发言毫无理由。我们意识到:一个智能体的发言应该有因有果,即只有当它“注意到”某些变化(用户的输入、文件系统的更新、传感器的信号)时,才值得作出回应。否则,它只是噪音生成器。

因此,我们设计了感知驱动版宝宝AGI,将文件监控作为主要感知通道,让AGI能够“看见”外部事件,并据此触发认知决策。

2. 系统设计

2.1 核心算子(简化版)

  • Ξ 锚定:监听指定文件夹(./agi_baby_watch

  • Σ 认知不确定性:根据事件类型(新文件/文件修改)和内容的随机性动态计算发话强度

  • Λ‑τ 熔断:当事件过于频繁或内容为空时,抑制输出或回滚状态

2.2 感知—行动循环

  1. 后台线程监控文件夹变化(使用watchdog库)

  2. 主线程同时监听用户输入

  3. 当任一事件到达时,随机选择一个算子,生成随机强度的一句话

  4. 输出格式为 [算子] 短语 (强度) (因为: 触发原因)

2.3 为什么“文件监控”代表感知?

文件系统变化可以模拟任何外部信号:例如有新的邮件到达、有人在共享目录创建任务文件、温度传感器更新数据等。通过替换监控源,该架构可以轻松迁移到物联网或桌面自动化场景。

3. 运行效果

启动程序后,默认监控./agi_baby_watch文件夹。当你手动在该文件夹中创建任意.txt文件(或使用echo命令写入内容),宝宝AGI会立刻发言:

text

🧠 [Π] 打破常规试试 (0.85)  (因为: 新文件 宝宝,你好呀.in 出现)

同时,用户直接在终端输入文字也会被感知并回复:

text

你: 你好
🧠 [EBF] 熵增爆发! (0.51)  (因为: 你说了: 你好)

宝宝从不主动废话,所有发言都有明确的触发原因,真正做到了“因时而语”。

4. 实现要点

  • 使用watchdog进行文件系统事件监控,配合threading实现非阻塞。

  • 简化算子库,仅为随机选择短语和强度,保留算子流风格。

  • 退出时生成监测报告(平均能量、EWMA、模式状态、算子发言占比)。

    天赐范式第29天:当AGI学会“因时而语”——感知驱动型宝宝AGI的设计与实现

5. 结论与展望

本文提出的感知驱动型宝宝AGI验证了一个重要观点:智能体的“意识”首先体现为对外界变化的选择性响应,而非无意义的持续输出。该模型结构简单、可解释、易于扩展,可作为天赐范式走向具身智能的一个奠基性原型。

未来,我们将为它增加更丰富的感知器(网络、传感器、时间事件),并引入真正的Σ不确定性计算,使其能够根据事件重要性决定是否回应以及回应的强度。


天赐范式架构组
2026年5月2日 于长春

算子即一切,一切即算子。


完整代码已开源在CSDN资源中,遵循CC BY-SA 4.0协议。

天赐范式第29天:当AGI学会“因时而语”——感知驱动型宝宝AGI的设计与实现

附录:核心代码(精简版)

python

# -*- coding: utf-8 -*-
"""
天赐宝宝·感知驱动版
- 默认安静,但会监控一个指定文件夹(./agi_baby_watch),当文件夹内有文件新增或修改时,宝宝主动发言。
- 你输入文字时,宝宝立即回应(不管监控)。
- 宝宝主动发言后会记录,且在一定时间内不会重复触发(避免刷屏)。
- 输入 'exit' 退出并生成监测报告。
"""
import random
import sys
import threading
import time
import os
import matplotlib.pyplot as plt
from collections import Counter
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
OPERATORS = ["Ξ", "Θ", "Π", "ℋ_holo", "EBF", "Σ"]
PHRASES = {
    "Ξ": ["嗯… 目标有点模糊", "不太确定方向", "需要再想想",
          "目标渐渐清晰", "方向有了", "意图可以确认",
          "锁定目标!", "方向明确!", "意图坚决!"],
    "Θ": ["回忆有点模糊", "记不太清楚", "印象不深",
          "想起一些片段", "记忆浮现", "往事依稀",
          "恍然想起!", "记忆清晰!", "历历在目!"],
    "Π": ["也许可以换个角度", "试着不同看法", "稍微拐个弯",
          "打破常规试试", "新视角出现", "框架松动了",
          "完全颠覆!", "彻底破局!", "全新维度!"],
    "ℋ_holo": ["隐约觉得有联系", "似乎有关联", "微弱的全息投影",
               "关联涌现", "跨维度链接", "非局域连接",
               "全息共振!", "维度跃迁!", "高维同步!"],
    "EBF": ["小扰动", "可能引发变化", "蝴蝶微振",
            "蝴蝶效应显现", "混沌增强", "分岔出现",
            "混沌狂舞!", "不可预测!", "熵增爆发!"],
    "Σ": ["有点不确定", "信心不足", "可能需要再评估",
          "中等置信", "有一定把握", "大致可信",
          "高度确定!", "几乎确信!", "毋庸置疑!"]
}
class Brain:
    def __init__(self):
        self.mode = "ZFC"
        self.history = {"step": [], "avg_energy": [], "ewma": [], "mode_value": [], "speech_op": []}
        self.step_counter = 0
        self.running = True
        self.ewma = 0.0
        self.alpha = 0.1
        self.last_event_time = 0          # 上次主动发言时间
        self.event_cooldown = 5           # 主动发言冷却时间(秒),避免连续刷屏
    def generate_speech(self, reason=""):
        """生成一条发言,可附带原因"""
        op = random.choice(OPERATORS)
        phrase = random.choice(PHRASES[op])
        intensity = random.uniform(0.3, 0.9)
        reply = f"[{op}] {phrase} ({intensity:.2f})"
        if reason:
            reply += f"  (因为: {reason})"
        if self.mode == "¬CH" and random.random() < 0.3:
            reply += " 你觉得呢?"
        print(f"🧠 {reply}")
        self.history["speech_op"].append(op)
        self.last_event_time = time.time()
        return reply
    def on_external_event(self, event_desc):
        """外部事件触发主动发言(如果冷却已过)"""
        now = time.time()
        if now - self.last_event_time >= self.event_cooldown:
            self.generate_speech(reason=event_desc)
    def step(self):
        # 模拟意识状态的自然波动(用于模式切换和图表)
        self.ewma = self.ewma * 0.99 + random.uniform(-0.02, 0.02)
        self.ewma = max(0.0, min(1.0, self.ewma))
        if self.mode == "ZFC" and self.ewma > 0.45:
            self.mode = "¬CH"
            print(f"🌟 跃迁到 ¬CH 模式 (活跃指数={self.ewma:.2f})")
        elif self.mode == "¬CH" and self.ewma < 0.25:
            self.mode = "ZFC"
            print(f"🌙 返回 ZFC 模式 (活跃指数={self.ewma:.2f})")
        # 记录历史
        self.history["step"].append(self.step_counter)
        self.history["avg_energy"].append(random.uniform(0, 0.2))
        self.history["ewma"].append(self.ewma)
        self.history["mode_value"].append(1 if self.mode == "¬CH" else 0)
        self.step_counter += 1
        time.sleep(0.02)
    def run_forever(self):
        print("🧠 天赐宝宝(感知驱动版)启动")
        print("宝宝会监控文件夹 './agi_baby_watch',当该文件夹内有文件变化时,宝宝会主动说话。")
        print("同时,你输入任何文字,宝宝也会立即回应。")
        print("输入 'exit' 退出并生成监测报告n")
        while self.running:
            self.step()
    def stop(self):
        self.running = False
class FileChangeHandler(FileSystemEventHandler):
    def __init__(self, brain):
        self.brain = brain
    def on_modified(self, event):
        if not event.is_directory:
            self.brain.on_external_event(f"文件 {os.path.basename(event.src_path)} 被修改")
    def on_created(self, event):
        if not event.is_directory:
            self.brain.on_external_event(f"新文件 {os.path.basename(event.src_path)} 出现")
def start_watchdog(brain, watch_dir="./agi_baby_watch"):
    os.makedirs(watch_dir, exist_ok=True)
    event_handler = FileChangeHandler(brain)
    observer = Observer()
    observer.schedule(event_handler, watch_dir, recursive=False)
    observer.start()
    print(f"🔍 宝宝正在注视文件夹: {watch_dir}")
    return observer
def input_listener(brain):
    while brain.running:
        try:
            user_line = sys.stdin.readline().strip()
            if not user_line:
                continue
            if user_line.lower() == "exit":
                print("收到退出指令,正在生成监测报告...")
                brain.stop()
                break
            else:
                brain.generate_speech(reason=f"你说了: {user_line[:30]}")
        except:
            break
def plot_results(brain):
    hist = brain.history
    steps = hist["step"]
    if not steps:
        print("没有足够数据生成图表。")
        return
    fig, axes = plt.subplots(2, 2, figsize=(12, 8))
    fig.suptitle("天赐宝宝·感知驱动版监测报告", fontsize=14)
    ax1 = axes[0,0]
    ax1.plot(steps, hist["avg_energy"], 'b-', linewidth=1.5)
    ax1.set_title("模拟能量")
    ax2 = axes[0,1]
    ax2.plot(steps, hist["ewma"], 'r-', linewidth=1.5)
    ax2.set_title("活跃指数 (EWMA)")
    ax3 = axes[1,0]
    ax3.plot(steps, hist["mode_value"], 'g-', linewidth=1.5)
    ax3.set_yticks([0,1])
    ax3.set_yticklabels(["ZFC", "¬CH"])
    ax3.set_title("模式状态")
    ax4 = axes[1,1]
    if hist["speech_op"]:
        op_counts = Counter(hist["speech_op"])
        labels = list(op_counts.keys())
        sizes = list(op_counts.values())
        ax4.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
        ax4.set_title("算子发言占比")
    else:
        ax4.text(0.5, 0.5, "无发言记录", ha='center', va='center')
    plt.tight_layout()
    plt.savefig("tianci_baby_perception_report.png", dpi=150)
    print("监测报告已保存为 tianci_baby_perception_report.png")
    plt.show()
if __name__ == "__main__":
    brain = Brain()
    # 启动文件监控(感知外部变化)
    observer = start_watchdog(brain)
    # 启动用户输入监听
    input_thread = threading.Thread(target=input_listener, args=(brain,), daemon=True)
    input_thread.start()
    try:
        brain.run_forever()
    except KeyboardInterrupt:
        print("n用户中断 (Ctrl+C)")
    finally:
        observer.stop()
        observer.join()
        plot_results(brain)
        print("程序已安全退出。")
© 版权声明

相关文章