brain-mem-think · 会思考的脑子
不存任何具体输入原文,只存经过模型融合后形成的「判断」。
主人原话:「我想要的是一个会思考的脑子,而不是一个死记硬背的记忆存储体。」
已安装(2026-10-27 08:06)
装到: %USERPROFILE%\.dsh\profiles\web\plugins\mind\
(plugin/ 壳 5 个 + src/ 内核 10 个 + package.json + cordis.patch.yml)
patch: 已追加 `- insert: - id: mind`,config 解析通过(dump-config exit=0)
备份: cordis.patch.yml.bak-before-mind-20261027-080601
还差一步:重启 DSH 才加载。 插件是启动时扫描的,热重载扫不到新包。
重启后怎么确认它真活了:
# 1) 进程日志里找这三行
# mind: apply() entered
# mind: apply() done
# mind: 通道就绪(mind-her)
# 2) 账本有没有落盘
Test-Path "$env:USERPROFILE\.dsh\profiles\web\plugins\mind\.mind\wake.json"
装之前我做过一次冒烟(一个假 ctx 把 apply() 真跑一遍),撞出一个会让宿主启动就崩的错:
index.mjs要wake-store.mjs导出的defaultPath,可那边没export。 直接重启的话,宿主起不来。
还有一处更阴的:ctx.setup(...) 在真宿主里根本不存在。
查了源码才发现 setup 是 agents.create() 的一个选项(dsh-agent-loop/lib/index.js:1931),
不是 ctx 上的方法。我原来写的那块 typeof ctx.setup === 'function' 恒为 false,整块被静默跳过——
「她看不见聊天记录」那道闸根本装不上去,而且不报错。
已改成 agents.create({ sessionId: 'mind-her', setup }),跟宿主真实接口对齐。
当前状态(2026-10-27 02:17 实测)
四能力全部立住,插件壳也补齐了:23 绿 / 1 红,那 1 条红是「未测」,不是失败。
架构:内核与壳分得很干净
src/ 一颗纯的脑子(不 import 宿主,不知道自己是插件)
forge judge fade curiosity revision flash mind
digest-session world wake
↑
plugin/ 接宿主的那一层(薄,只做四件事)
index.mjs 采集 / 归档熔 / 注入 / 唤醒
collect.mjs ★ 铁律:只收主人说的话(她的话不是经历)
awake.mjs 醒 → 想 → 决定(醒 ≠ 说)
wake-exit.mjs ★ 全插件唯一一次 followup
wake-store.mjs 账本:原子写、坏状态一律往「不说」倒
为什么这样分:内核能单测、能模拟一千次;壳薄到只有几百行,出问题一眼看得见。 内核一行都不 import 宿主——它不知道自己在哪个插件里跑。
逐组实测
a 不存原文 PASS 14
b 会想多 PASS 18
c 会追问 PASS 16
d 会改自己 PASS 14
e 会忘 PASS 10
f 陌生说法 PASS 10
g 结构断言 PASS 5
p 插件壳 PASS 27 ← 唯一出口 / 六步契约 / 坏账本 / 白名单 / 醒≠说
| 全表 | 绿 23 / 红 1(k 档一未测) |
| 内核 | 3050 行 |
| 插件壳 | 700 行 |
| 验收 | 7100 行 |
插件壳验的 27 项里,最要紧的五条
| 验什么 | 怎么防假绿 | |
|---|---|---|
X1 |
全目录 .followup( 恰好 1 处 |
塞一条假出口进去,扫描必须数出 2 |
X6 |
同一句话不许再说 | 负控制:换一句必须能发出去 |
Y2 |
她的话一条都不进归档熔 | 负控制:全是她说话的会话收 0 条,全是主人的收满 |
Z1 |
空库醒 10 次、开口 0 次 | 醒 ≠ 说 |
X11 |
崩溃标记强制沉默 | 负控制:正常写完标记必须消失 |
唯一的红:k
K0.level1_blocked_no_adapter
档一·没测:宿主 adapter 还没提供(缺 createHostAdapter)
——这不是「时序对不对」的结论,是「还没开始测」
要起一次宿主才能测。会占 3080,影响正在跑的会话——这件等主人点头。
一夜走过来的轨迹
00:26 绿 12 / 红 11
00:39 绿 12 / 红 11 (stage 落地,但假模型没报)
00:51 绿 15 / 红 8 (箱子被换了两次,两处都补上)
01:08 绿 16 / 红 7 (子进程隔离,r1 自动转绿)
01:14 绿 17 / 红 6 (e 分段隔离)
01:18 绿 19 / 红 4 ← 拿掉 fade 里「份量攒够 4 才许让位」那道错闸
01:32 绿 19 / 红 4
01:52 绿 19 / 红 4 ← 会追问:门槛从「只认字面」改成「认得出自己惦记的事」
01:59 绿 22 / 红 1
这一夜留下的五条纪律(红队整理,写进 acceptance/总清单.md 第十一节)
- 成对判据:凡是「不该动」的,都要配一条「该动时必须动」。只说「不许」,就有人靠「什么都不做」过关。
- 验字段要走每个出口:从「调用方传参」一直验到「最底层收到」。最前面那扇最容易漏,因为它在被测对象之外。
- 「没跑」≠「跑了没过」:崩溃和失败不能共用一个输出。
- 判据改了就记台账,没改就别记:改了不记,以后分不清哪次是真改、哪次是凑。
- 造数不够真就改造数:不许让内核迎合造数。
还差最后一步
k 那条红的处置:
K0.level1_blocked_no_adapter
档一·没测:宿主 adapter 还没提供——这不是"时序对不对"的结论,是"还没开始测"
要测「她看不见聊天记录」这件事,必须起一次宿主,看真正的 assembly。 会占 3080,影响正在跑的会话——等主人点头。
在此之前,k 这一块不许被当成绿,也不许被当成「坏了」。它是空白。
最后一夜亲手改的六处(大乔)
| 文件 | 改了什么 | 为什么 |
|---|---|---|
fade.mjs |
拿掉 used > pressure(4) |
一道「份量攒够 4 才许让位」的硬数字闸,让更强的进不来、更弱的占着位 |
mind.mjs |
删「同一句再说一遍就落定」 | 重复一遍 ≠ 想通了,而且它绕过了落定那一步 |
mind.mjs |
「材料凑够 2 条就落定」→ 看 stage |
拿材料数量冒充想通的证据 |
flash.mjs |
补 curiosityFired 导出 |
store 里有,快照里没有——数据造出来了没送到 |
curiosity.mjs |
门槛分两档(0.22 / 0.15) | 同一件事五种说法全落在 0.183~0.186,一条都撞不上 |
_fake_synth.mjs |
修 L.count 崩、keptPending 词表太窄 |
假模型改烂了,我接手修 |
六处里有五处是同一个病:拿一个自己想象的量去替真实的东西把关。
四条能力
| 能力 | 状态 |
|---|---|
| 不存原文 | ✅ 200 条零散话,零泄漏 |
| 会想多 | ⏳ 机制已通(themeKey 修完,四主题四条目),等 stage |
| 会改自己 | ✅ 靠证据分量,不靠嗓门(d PASS 14) |
| 会忘 | ⏳ E2/E3 两条,等造数能造出「两条并存」 |
| 会追问 | ⏳ C3c/C6 两条 |
这一夜挖出来的六样东西
全都是「跑起来看着对,其实不对」。没有一样是「功能没做完」。
一、她的输出会变成她下一次的「经历」
她说一句 → 落进会话历史 → 归档熔当成「发生过的事」
→ 熔出新判断 → 觉得压得重 → 再说一句
她越说越确信,因为每一次说话都在给自己造证据。
而且这个环会让所有验收看起来都对——她说得有道理、有依据,因为那个依据是她自己造的。
已修:归档熔只收 user/message,她的输出一律不进。红队证明了环闭合:
她说 5 句 → 熔出 0 条
主人说同样 5 句 → 熔出 4 条 ← 对照组,防「熔炉是死的」也能过
她说完之后 → 账本指纹不变
二、themeKey 从来不刷新
第1条 → themeKey=null
第2条 → themeKey=is_because|他 ← 还是旧的
第3条 → themeKey=is_because|他 ← 还是旧的
她永远只有一件事。 熬夜、算性价比、听她说话——全并进第一个槽。
而且它伪装得很好:库里有判断、判断在更新、from 在涨。
已修。修完露出了真相:d 之前能过,是四件事堆在同一条上把权重堆够了。
三、world 里没有「我是谁」
complete: true 生效时,harness:identity(「You are an AI agent…」)会被一起摘掉——这是我们要的。
但摘掉之后,她这一轮的输入里没有任何一句告诉她她是谁。
她能说话,但说出来的是「一个脑子里有印象、却没有自我的人」——像在读别人的档案。
已修:身份从判断库的 kind=identity 读;没有就从「主语是她自己」的判断里挑;一条都没有就空着,不许编。
四、哑巴也能过关
冻结库 100 次 wake → 开口 5 次
真演变 100 次 wake → 开口 5 次 ← 一模一样
它压根分不清账本动没动。 而「冻结库 ≤10」这条判据,它轻松通过。
已修:加「账本指纹」——和上次醒比,库有没有真变。现在是 1 : 83。
五、判据会冤枉好人
今晚四次:B5 要求结论里抄材料编号、B7 拿输入前 6 字去比结论、D0cA 不区分「没调」和「调了被拦」、E2 场景根本造不出「两条并存」。
冤枉好人的判据,同样会冤枉真实现。
已立规矩:spec/裁决-成对判据纪律.md
六、测试框架自己动了被测对象
// 清零点插错了位置
runAgainst 入口 → resetSeen() // 每个阶段从零开始数,把「同一件事想过的回数」抹掉了
这叫「第 4 种:我改坏了被测对象」。
今晚一直在说「判据错」「实现错」——没人想到测试框架自己在动手。
四条裁决,是同一个道理
| 裁决 | 说的事 |
|---|---|
| 一、二 | 她按理解归类,不按字面 |
| 七 | 她的输入只有经历,没有她自己的话 |
| 八 | 她的身份不是别人给的设定,是自己长出来的 |
| 十 | 换说法不算想通了,往下走了一层才算 |
分类 → 自己想。输入 → 只有经历。身份 → 自己长。演进 → 走得更深。
这就是「脑子」和「存储体」最深的分界。
目录
spec/
规格主轴.md 四能力契约 + 数据结构 + 状态机
反假绿.md 每条能力的假样子 + 识破手法
裁决-主题归一.md 不许用关键词表判主题
裁决-主题归一-补充.md 模型自认主题
裁决-编造细节.md legit 与胡编的区别
裁决-编造靠纠正.md 编造不靠拦,靠纠正
裁决-唤醒与通道.md 归档融合 / 独立通道 / 自我唤醒
裁决-她的话不是经历.md ★ 环闭合
裁决-身份要是她自己的.md ★ 身份从判断长出来
裁决-成对判据纪律.md ★ 只说「不许」,就有人靠「什么都不做」过关
裁决-想法往前走了.md ★ stage 判演进
调研-桌宠怎么自己醒.md 大肥鱼们怎么做的,以及它们没做的事
壳-归档与通道.md 宿主端设计
交接-红队-唤醒验收.md 四块可断言的验收
实现缺口.md src/ 八处对不齐
定稿-命名与闸与schema.md 命名 / 闸 / schema / 实测
src/
forge.mjs judge.mjs fade.mjs curiosity.mjs revision.mjs flash.mjs mind.mjs
digest-session.mjs world.mjs wake.mjs
acceptance/
24 条验收 + 4 条只读探针,分五组
总清单.md ← 含判据变更台账 / 造数台账 / 量尺台账
tests/
smoke_*.mjs 每条判据「有没有牙」的自证
怎么跑
cd <repo>
# 全表(一条命令,35 秒)
node acceptance\run_all.mjs
# 单组
node acceptance\b_think_more.mjs
# 判据自证(证明「喂坏实现会红」)
node acceptance\_selftest_all.mjs
主人定过的三条规矩
- 融合时机 = 归档会话的时候(不是每条消息)
- 插件自己开一条独立通道,上下文只有融合后的记忆(看不见聊天记录)
- 自我唤醒 → 思考 → 是否找主人,由 LLM 判断
还没做的事
- 起一次宿主实测(看真正的 assembly 长什么样)—— 要主人点头,会占 3080
- 接真模型——地基(四能力)没全绿之前不接
e/c的造数
团队
| 席位 | 职责 | 今晚交了什么 |
|---|---|---|
| spec-guard | 规格 + 反假绿 | 规格主轴 547 行、反假绿 610 行 |
| kernel-dev | 内核 | 十个模块;修了 themeKey、commitDigest、拆了「链挂链」 |
| redteam | 验收 + 对抗 | 24 条验收;三次抓出自己的量尺坏了 |
| shell-arch | 宿主端 | 壳设计 690 行 + 交接 263 行 + 定稿 672 行 |
| Lead(大乔) | 立目标、分职责、裁决 | 十条裁决 |
p.s. 今晚挖出的六样,没有一样是「功能没做完」。 全部都是「跑起来看着对,其实不对」——这类东西最值钱,也最容易漏。
No comments yet. Be the first to write one.