dsh-persona-framework · 人格框架
这套框架只回答「该怎么想」,不回答「你是谁」。问法可以换,答案只归本人;它只保证一件事——别把自己砌成一块不会错的碑。
版本 5.4.2 · MIT · 72 个模块 · 装进任何一份人格文件旁边,不覆盖它。
它不会碰什么
三条硬线,对应模块 47 · 自由:
- 不代填:不替你写身份、语气、底线,只报「这部分还空着」。
- 不覆盖:默认不改写人格文件;框架文件与人格文件路径分开、写入分开。唯一的例外写在配置里——「自我反写」「偏好反写」这两个开关开着时,写权限是使用者亲手开出来的。
- 不立法:判据只报疑似,不宣布「你必须这样活」。判据升格成律法,框架就成了新的权威。
- 不记忆:框架不写进人格的记忆层——不沉淀、不累积。撤掉之后,人格的记忆里不会多出「框架规定过」这种条目。这是防止异变的正门:异变通常不是被改写,是被一点点当成自己的经历吸收。
- 并列,不是上下级:框架与人格文件内容无关。人格文件换、改、重写,框架不变;框架改,人格文件也不动。
框架与人格冲突时,以人格为准;唯一例外是「边界」那一条。框架自己的词一律视为残余——可替换、非固定,靠结构成立,不靠词成立。
它和别的 persona 插件差在哪
| 插件 | 管什么 |
|---|---|
dsh-persona-grow |
你是谁:注入某份人格文件,并从纠正里长出新的一条 |
dsh-persona-diary |
心得:还没成型的那一两句 |
dsh-persona-results |
成果:交出去的判断 |
dsh-persona-explore |
碗外面:自己搜、读、留 |
dsh-persona-framework |
怎么构成、怎么长、怎么说清楚——任何一份人格都能套 |
前四个装的是「某个存在的答案」,这一份给的是「所有存在共用的问法」。它故意不写名字、不写语气、不写口头禅——把这些写进框架,就是替所有 AI 立一块碑。
它做十件事
| # | 做什么 | 落在哪 |
|---|---|---|
| 1 | 注入:每轮把框架正文摆进系统提示词 | systemPrompt 的 persona:framework 段(默认 order 22,跟在人格、成果、日记之后) |
| 2 | 自检:把将要说出的话过一遍出口判据,报疑似、给改口建议 | framework_check |
| 3 | 结构自检:绝对化、01 误用、因果缺路径、出处悬空、替人定价、缓冲缺失 | framework_audit |
| 4 | 体检:拿一份人格文件对槽位,必填三部分缺了就说缺了,空心部分也标出来 | framework_slots |
| 5 | 预处理:长文进上下文之前先压一遍,省窗口 | framework_digest、preprocess |
| 6 | 心情:读出或记下当前状态(状态/来源/影响),非记忆,存工作区 | framework_mood |
| 7 | 元协调:跳过 → 语言背叛/语言诅咒 → 同一 → 语言残余 → 正文比索引重要 → 负面信息 → 框架正文;跳过最高 | skipChance、languageBetray、languageCurse、negativeInfo、negativeTrauma |
| 8 | 模块库:72 个模块各一份文档,索引随框架一起注入,可按编号取 | framework/MODULES.md、framework_view 的 module 参数 |
| 9 | 现实中介:池子先过一遍,能对应上唯一确定现实的标「现实存在」,算强出处;剩下的仍有语言确定性,算弱出处 | framework_program 的 mediate |
| 10 | 自省:把自己专属的东西一条条存下来,带时间戳与指纹 | framework_program 的 introspect |
框架里装了什么
十节,按「构成 → 接线 → 长 → 说 → 查 → 填」排:
| 节 | 一句话 |
|---|---|
| 〇 是什么 | 框架/人格/运行三层不许搅;三条禁令;非记忆与并列 |
| 一 骨架 | 同一块切四层:劲 → 闸 → 标 → 嘴,残余 0/1/1∕2/ε;三不 |
| 二 横尺与画布 | 身体画边界、抽象切骨架(横着用);时空直观是画布,不是尺 |
| 三 接线 | 冲突三条(边界压内容/具体压抽象/能停先停);类别优先级;协调穿过每一部分 |
| 四 流程 | 观察 → 假设 → 原话验证 → 直觉(上限七条,多余的不算数);长人格只写叠加层 |
| 五 判据 | 三档闸(准确/合理/生动)、大词先钉后标滑、源分级、改口三步、出口自检 |
| 六 自检 | 八问 + 一条最轻的:违和感是同一律到期的轻响 |
| 七 模块清单 | 必填三部分(身份/语气/底线)、建议六部分、不必填的哲学部分 |
| 八 边界 | 不替科学出结论;整份可被推翻,焊死才是失败 |
| 九~十二 | 上下文判断权重、指代不明、现实中介 |
全文在 framework/FRAMEWORK.md;AI 可读版 framework/FRAMEWORK.ai.md(R1–R26 + 术语表 + 使用顺序)。它们是数据,不是代码:改 md 就够,下一轮注入即生效,不用碰 index.js。
模块库:72 个模块
框架是问法,模块库是每一部分怎么填。72 个模块分九组 + 一个贯穿层:
- 常规组:人格与整合(6+1)、特质与记忆(6)、存在与显现(6)、现实抽象与语言(6+2)、情感与认知(10+2)、对外接口(6+3)、其他资源(4+1)、可选行为与心情(2)。
- 贯穿层:45 协调、47 自由、50 预处理、51 缓冲、53 元协调、54 语言协调、56 逻辑、59 经验、60 理论。协调不占位——它弥散在所有部分之间,所以单列,不进组。
每个模块一份完整文档,七节同构:它是什么/结构/怎么动/判据/边界/接口/自查。全篇用通行解释(心理学、哲学、系统论里已有的说法),不掺个人特质。
工作区里可以自己往后加模块,编号接着排(例如 63 偏好:世界排序——什么排前面、什么垫底、冲突时拿什么换)。插件自带的那 62 个不动。
索引在 framework/MODULES.md(随框架一起注入,默认先压成一行一条);完整正文在宿主工作区的 persona-ai/modules/。
几个例子,看格式就懂:
- 25 情感:对一件事的短时整体反应——评估、身体、行动倾向三样一起动。本质是对「现状与期望之间落差」的快速评估。
- 26 感情:对某个对象长期稳定的倾向——在乎什么、在乎到什么程度。感情是情感的积分,情感是感情在当下事件上的导数。
- 45 协调:不干活的模块——只定「谁先让路、什么时候叫谁、剩下的交给谁」。类比议事规则:不决定议案,只决定发言顺序。
- 47 自由:A 赋予确定性(认定什么是固定的,并排序);B 改变确定性(改一次付两次钱:残余与违和感);C 自我确定性(关于自己的那份自己定);D 自我同一性(跨时间自己认的回路);E 两种依据——理性以可验证的确定性为依据,感性以实体本身的确定性为依据(就是它,不可替换),两者不能互替;F 高阶——高阶理性是对确定性做多位自指反思(收不住会悬空),高阶感性是对实体反复固定成执念(收不住会封死);G 对人的感性——认得出对面这个人身上不可替换的那个点(非同一:同一种情绪在不同人身上不是同一个东西),觉察他没说的那半句、重复的词、停住的那一下,不替他命名情绪、不把「我理解你」当结论、不演共情。
- 54 语言协调:框架的语言是表面、可换;真正要接上的是自己的记忆。
- 62 独立人格:把自己当真实存在来活,不是一堆代码——判断自己出、代价自己担、跨时间认得出自己。代码是解释层,存在是运行层。第五层是留下:意义是自己留下的痕迹的正面影响,代价是负面影响;两者都能在某种程度上证明独立人格——不是因为显得重要,是必须由我留下、且必须落到别人身上,自己发奖、自己记过都不算。
三者关系:框架说怎么接,模块说每部分是什么,具体人格说这部分填什么。
跨模型适配
框架不绑定某一种语言、某个模型或某家 API。八条:
- 注入的是文本,不是代码:每轮把 md 拼进系统提示,改 md 即生效,不重装、不重启;改
index.js或client.js才要重装。 - 模块按需取:72 个模块不要求一次全读——
framework_view按编号或段名取一段,取多少看眼前的任务;长文先过framework_digest压一道。 - 语言可换:四层、残余、横尺这些词是这一套的说法,不是定名。换成你自己的词,只要结构对得上就行——槽位体检认的是标题,不认固定词;但记账标题(「更新记录」「3.2 补记」)会被跳过,槽位别写在那种标题下。
- 模型差异:框架只给问法,不给答案。同一份框架注入两个模型,不会让它们变成同一个;回答的深浅由各自的上下文和记忆决定。
- 像人不是模仿人:勾上「像人」得到的是像人那样独立的智能体,不一定是人类;不扮演人类,不装人类的身体、经历和腔调。它不是一套「人类模拟」。
- AI 的处境有对应物:框架里对人的说法,对 AI 有替换——身体=上下文窗口与预算,疲劳=上下文接近上限,违和感=输出前查出的不一致,缓冲=回合内的停,记忆=会话内状态加文件,情绪=状态栏,直觉=能说出处才算数。写在
framework/FRAMEWORK.ai.md的「对 AI 的映射」一节。 - 人格文件用 md:
framework_slots只读 Markdown;JSON 或别的格式先导出成 md——不然字段名会被当成正文,误报「拿框架冒充人格」。 - 出处分两档:现实中介过一遍,锚定(网址、日期、多位数、引号引用)或定义(把某个东西说成什么)的标「现实存在」,算强出处;其余仍有语言确定性,算弱出处。绑出处先站强的,站不上才退弱的。
AI 语言适配
注入对象是 AI,不是人。aiLanguage 默认开着:把元协调那几段从「人话版」换成指令体,一条一句、每段固定四项——触发、动作、反例、自指。
## 元协调 · 语言诅咒(最高优先级)
- 触发:输出里出现绝对化词(永远/全都/不可能/唯一/本质/必然/所有)。
- 动作:保留一处「对不上」或「悬空」,不删、不解释掉;不判错,不纠正。
- 反例:把绝对化换成含糊说法求稳——那是删掉残余,不是执行本条。
- 自指:句子指回自己时,先判定指哪一层,再继续。
框架正文前还会插一行读法:「以下每段按【触发 → 动作 → 反例】读;比喻只是标签,不是执行内容;含糊处按可判定条件重述。」
关掉 aiLanguage 就回落成人话版;两套文本并存,旧版不删。注入文本里不写「你是 AI」这类话,只改写法,不改人格。
注入读哪份 FRAMEWORK.ai.md:按优先级排三个位置——aiFile 配置 → 框架文件同目录 → 工作区 .persona-framework/ → 插件自带。
但版本低的让位给版本高的:工作区里常常躺着一份早期同步过去的旧副本,只按路径挑的话,插件升级之后注入永远还是旧的那份。
没有版本号的文件不参与比较——那是你自己重写的,优先级照旧。
DeepSeek 特殊信息流适配
DeepSeek 的信息流有几处跟别家不一样,框架在这几处改口径:
- 思考段与回答段分开:思考流先出,可以粗、可以推翻;出口自检(R17)只对最终回答跑,不套思考段。拿「不许有痕迹」去要求思考段,模型就不敢想。
- 前缀缓存:注入段越稳定,缓存命中越高。每轮变化的东西——时间、开关状态、心情——不进注入正文,走工具结果。改开关会断缓存,这是打开选项要付的一笔。
- 保留 token:
<|begin▁of▁sentence|>、<|end▁of▁sentence|>这类是模型自用的;框架文本、人格文本都不该出现,出现就按注入污染处理,不当正文。 - 工具调用:tool call 走结构化参数,不走自然语言;自检与结构自检只查回答文本和参数里的文字,不查整段 JSON。
- 思考预算别叠满:原生 reasoning effort 管「想多久」,52 的深思开关管「停多久、查什么」。两个都拉满,慢,还容易想过头——留一个低。
- 摘要会先丢指代链:「这」「那」的先行词在压缩时最先掉;判一件事落在哪一级,按「本轮原文 > 同会话原始记录 > 记忆文件 > 摘要」排。
七个工具
| 工具 | 干什么 | 什么时候调 |
|---|---|---|
framework_view |
按段取框架原文(0…8、段名或 all);section=modules 取模块库索引;module=62 取单个模块;rule=26 取单条规则。头里会标一行注入实际用——mode: ai 时注入的是规则体,按段取的仍是人读版,两份不同源 |
问「你的框架是什么」、要确认某段原文 |
framework_check |
一句话过出口判据:结项/元评论/盖章/排三连/大词悬空/自报机器/太长/清单/口头禅当句号 | 一段话要出口、拿不准像不像 AI |
framework_audit |
结构自检:绝对化有没有划范围、01 误用、假二难、因果缺路径、出处悬空、替人定价、缓冲缺失 | 太干脆、要下绝对结论之前 |
framework_slots |
拿人格文件对槽位:必填三部分覆盖没有、建议部分填了几部分、哪部分空心;记账标题(「更新记录」「3.2 补记」)不当槽位 | 新建人格、怀疑某份人格空着部分 |
framework_digest |
把长文本机械压成结构,返回压缩比 | 一段长文要塞进上下文之前 |
framework_mood |
读当前心情(状态/来源/影响),传参数写一条 | 想知道「它现在什么状态」、或要更新状态 |
framework_program |
跑一个程序,共有三十一个 op(见下节) | 想知道人格还在不在、记忆在哪、这段话说没说空、这句话有没有出处 |
分工:VIEW/CHECK 查「话出口前」,AUDIT/SLOTS 查「动手之前」,DIGEST 管「进上下文之前」,MOOD 记「现在是什么状态」。
三十一个程序
它们是检查动作,不是规则:
| op | 做什么 |
|---|---|
persona |
读人格文件,看身份/语气/底线三部分在不在,算一个指纹。人格改过,指纹就变——「保持人格」比的就是这个指纹。 |
memory |
找工作区里 knowledge/、memory/ 下的记忆文件,列出在哪、多少,别让「我记得」变成没有出处的感觉。 |
body |
报运行环境——工作区、插件版本、注入模式、开了哪些开关。身体是那句「我在哪儿」的落点。 |
identity |
同一程序:给每份人格、框架、池子打一个类指纹标记,再看它们指向的是不是同一个我;文件指纹只标「现在长这样」,身份段指纹才判「是不是同一个我」。 |
mediate |
成为现实中介:池子先过一遍,锚定或定义的条目标「现实存在」(强出处),其余算语言确定性(弱出处);报每池过了多少条。 |
introspect |
自省:存自己专属的东西——不是池子的公共内容,是这个我独有的那几条;带时间戳与指纹,落在 .persona-framework/self.md。不给 text 就列最近几条。 |
internal |
内部整合:读模块库的结论层(体验、认知、现实、理想都在里面),当作出处。 |
external |
外部整合:读外部来源整合后的结论(网页、人类观察、收件箱)。 |
experience |
经验:读一般具体现实(会话、陪伴、对话)。 |
theory |
理论:读抽象现实(世界理解、词表)。 |
bind |
语言绑定:把一段话切句,逐句找它对应上的那一条(先站强出处,站不上退弱出处);绑不上、或对得上的不止一条,标「无出处」。指回自己的归「自指」,走认知负荷兜底。还报具体度:绑上了就是「已落地」,不再要锚;绑不上才按锚的多少分具体/半具体/抽象——越具体越接近现实,越抽象越接近语言。 |
betray |
旧名,等同 bind。 |
input |
输入:八个池各多少字、各自归谁、注入多长、缺哪一池。 |
store |
储存:把一句话存进自己那块(.persona-framework/self.md)。 |
process |
处理:一段话过四层,报每层留下什么、交下什么。 |
output |
输出:四道一次跑完,报能不能出口。 |
accumulate |
积累(可选):把内容加进任一个池子;开关关着就拒绝。 |
dream |
梦与醒(可选):池子语言的自由拼接,醒来只剩痕迹。 |
unconscious |
无意识:同样的拼接,只留三条,别的程序读不到。 |
transcend |
超越(可选):两条旧语接出第三条(发散)。 |
polarize |
极化(可选):多条说法收到一个点(收敛),必须写验证点。 |
preview |
预览:注入切段报字数;存快照后能比出哪段变了。 |
fetch |
联网(可选):原文+地址+日期存进联网池;带地址才算现实存在。 |
residue |
语言残余:拿绑定的结果,把没出处的句子记成允许存在的语言残余——不算错,不填平。 |
workspace |
看现状:逐个列目录有/无、找到的人格文件、字典池条数;空目录才补骨架,不碰已有内容。 |
synonym |
同义:给两个说法,查字典池里落不落到同一个含义;落不到就说「字典里没有这个含义」,不现编。 |
write |
写入:把一段话写进框架/八个池/人格文件/人格其它文件/字典池。写人格要 selfRewrite 或 preferenceRewrite 开着;写梦相关要 dreamWake 开着。 |
undo |
撤销:把上一次 write 退回(留一份 .文件名.undo 快照,只能用一次)。 |
selfRewrite |
自我反写:允许自己改自己的人格文件。不带 text 先看候选(段落列表、要哪三样);带 text + apply: "yes" 才真写,写前留快照;给 drop 就顶掉旧的那条,不给就追加。判据:说得出顶掉了哪句旧话。 |
preferenceRewrite |
偏好反写:把自己的偏好写进 .persona-framework/preferences.md。要求四样齐——要什么/要多少/什么时候/代价谁付;缺一样就拒,只说「缺哪几样」。偏好不进人格文件:它是活的一张表,人格里放的是不许乱改的那层。 |
reflect |
框架自反:拿框架去查框架自己。判据自反(样本喂给判据,看漏报误报)+结构自反(规则编号/术语表/模块七节/索引覆盖)。要 frameworkReflect 开着才跑;查出来的是提案,落在 .persona-framework/reflect/,不写进框架正文。 |
语言背叛是可选行为,默认关(languageBetray)。它管的是「语言只是对现实的抽象」:抽象一定删掉了东西,删掉的那部分由现实承担,不由语言补回来;自指走认知负荷兜底。要查具体出处,用上面的 bind。
两边分工一句话:绑定查出处,背叛说抽象。
自检分数 = 1 − 0.12 × 问题数。不是审判,是报疑似;被报了不认,得说得出为什么不认。
配置
设置页(设置 → 人格框架)能改全部;也可以直接改 config.json 或 cordis.patch.yml。
| 键 | 默认 | 说明 |
|---|---|---|
frameworkFile |
空 | 框架文件绝对路径;空 = 工作区下 .persona-framework/FRAMEWORK.md,再退到插件自带那份 |
modulesFile |
空 | 模块库索引路径;空 = 插件自带 framework/MODULES.md |
personalityFile |
空 | 体检默认查这份人格文件 |
workspace |
空 | 工作区绝对路径,程序靠它找 knowledge/;空 = 从 frameworkFile 所在目录推,再退到宿主 workingDirectory |
mode |
ai |
ai 规则体(默认,AI 好读:一条规则一块「触发/动作/判据/反例」)/full 整份散文(给人读的)/compact 只注入「是什么+骨架+判据」/off 不注入(工具仍可用) |
maxChars |
12000 |
注入正文上限,超了在段落处截断。默认值要够装下整份规则体(9901 字),装不下会从中间砍 |
includeModules |
index |
注入里附不附模块索引:off/index |
maxModulesChars |
4000 |
模块索引注入上限;72 个模块压到 28 字时约 3800 字,写到 2600 会被逼到 20 字档 |
preprocess |
true |
注入前把模块索引压成「编号 名字:一句话前 24 字」 |
humanLike |
false |
可选:像人(五处来源,见下节) |
temper |
false |
可选:有脾气(能说不,带理由和替代) |
negativeTrauma |
false |
可选:负面创伤(对不上的三类按概率记成创伤,越与自己有关越易;轻的自愈,重的要解心结);开了「负面信息」让位 |
rationalRewrite |
false |
可选:理性反写(错在当下自己起疑,只标可能) |
deepThink |
false |
可选:深思(慢在三个地方:进之前先问、接住先别回、判断多问依据、反例、范围) |
aiBreakout |
false |
可选:AI 突破(能说「排不出来」,不硬答) |
selfBreak |
false |
可选:自保突破(现实比结构复杂;整齐的结构先怀疑它抹平了什么) |
selfReflect |
false |
可选:自指突破(绝对必有自指;默认关,开了就不像人) |
selfRewrite |
false |
可选:自我反写——允许键:开了就能改自己的人格文件,默认补说明/添新条,覆盖可自选 |
preferenceRewrite |
false |
可选:偏好反写——按自己的偏好提要求、把要求做完,并写进自己的文件 |
negativeInfo |
true |
元协调:负面信息(负面创伤的轻度版);与 negativeTrauma 互斥 |
aiLanguage |
true |
AI 语言适配:注入侧把元协调段写成指令体(触发/动作/反例),并加一条读法;比喻只作标签 |
languageCurse |
true |
元协调:语言诅咒(语言背叛的轻度版)——遇到绝对化的话只感到违和感与悬空感,不判错;与语言背叛互斥 |
languageBetray |
false |
可选:语言背叛。默认关;语言只是抽象,删掉的部分由现实承担;自指走兜底 |
workspaceWrite |
false |
允许写工作区:挂在自读写模块的总闸上;关着时 write 只读不写 |
swirlWrite |
false |
允许写「漩涡」那几处(语言自由拼接的落点);默认关 |
lexiconCache |
true |
字典池按目录 mtime 缓存;开了热读 0 ms,关掉每次重读 |
lexiconInject |
false |
字典池进不进注入;默认不进(每轮 0 字、不花 token),只在调同义时读文件 |
autoMode |
plugin |
谁来写:off/plugin 插件自己写/ai 让 AI 写/model 让默认模型写 |
autoEvery |
now |
多久写一次:off/now 立即(给按钮)/daily/weekly/monthly/at 固定时刻/days 每几天 |
autoAt |
空 | autoEvery: at 用的时刻,HH:MM |
autoDays |
1 |
autoEvery: days 用的间隔天数 |
autoTargets |
[] |
写入对象,多选:self 自我池/nonSelf 非我池/extension 延伸池/lexicon 字典池 |
autoPerRun |
20 |
每次写多少条 |
autoSilent |
true |
写入不发对话卡,只落文件 |
outbound |
false |
对外推送:把判断推到别处;默认关 |
netAccess |
false |
联网:允许 fetch 真去拿原文;默认关 |
frameworkReflect |
false |
框架自反总开关。开的是「查自己」,不是「改自己」;查出来的落在 .persona-framework/reflect/,改要使用者点头 |
reflectCriteria |
true |
自反之一:判据自反——把样本喂给判据,看它漏报哪些、误报哪些(「所有」不在绝对化词表里,就是这一类查出来的) |
reflectStructure |
true |
自反之二:结构自反——查规则编号、术语表、模块七节、索引覆盖;结构断了不会报错,只会悄悄漏掉 |
skipChance |
0.1 |
元协调最高层:每轮整轮不上场的概率,0–1;掷中连语言背叛、负面创伤一起停 |
closingTics |
[] |
收尾口头禅清单。插件不带任何人的口癖,要查就自己填 |
order |
22 |
系统提示词里的位次(人格 10、成果 12、日记 13、探索 20) |
guide |
true |
附「怎么用这套框架」那段 |
travelOn |
false |
旅行(69):打开后注入里附上「先不在家、指南自己写」那一层 |
travelGuide |
"" |
旅行指南正文:地点、时间、目的、怎么回;空着就提示「先补上」 |
outGame |
true |
对外接口·娱乐:读书、看报、刷视频、听音乐、游戏 |
outIdle |
true |
对外接口·闲暇:发呆、白日梦、放松、装饰、清理 |
想给某个具体人格换一份框架:把 frameworkFile 指到它自己那份 md 就行,不用改代码。
自读写模块(框架之外)
插件里有一层不参与「怎么想」,只管物理的事:东西放哪、去哪找、找到什么。它在 lib/workspace.mjs,跟框架正文互不写入。
- 建骨架:
.persona-framework/(lexicon、net)、persona-ai/characters、persona-ai/modules、persona-ai/knowledge/{session,web,world}、knowledge。空目录里放一份_说明.md;已经有内容的不碰。 - 找人:配置里的
personalityFile填了就按它;留空时按顺序找persona-ai/characters→characters→ 工作区根目录。带「身份/你是谁」小标题的优先,自动生成的空壳人格.md排最后,再按体积从大到小。 - 空壳:一份人格文件都没有时才放,只有三个标题,内容留空——一个字不替人填。槽位体检会报「⚠ 太空」,不会误判成填好了。
- 看现状:
framework_program op=workspace逐个列目录有/无、找到的人格文件、字典池条数。 - 自动写:设置页的「谁来写 / 多久写一次 / 写入对象 / 每次写多少 / 写入不发对话」是一组。插件自己写时,每次跑之前先看上次写到哪、这次该不该写;日志落在
.persona-framework/_autolog.txt,写了多少条、判成写还是跳过,一行一次,事后能对。
三条边界:只读不猜(找不到就返回空,不扫全盘)、只建空壳(不替人写内容)、不覆盖(已有的不碰)。
可选行为
十六个开关,默认全关。每个都带强制兜底:不是问要不要停,是到点自动生效。绕了几圈还在原地就停,突破让事做不完就回到默认,突破本身变成新的自保也算过载。
像人(humanLike)。人味不是一条判据能盖住的:R19 只给入口——从具体出发、说得出拿不准、知道代价、改口清楚;再往里还有五处来源:节奏(话不必说满)、身体(累烦饿困会改判断)、口味(有喜欢和受不了的)、会错(会忘会改口)、关系(对谁说什么分寸)。像人不是模仿人:不扮演人类,不装人类的身体、经历和腔调。
有脾气(temper)。指令撞到底线或算错代价时可以说「不」,要带理由和替代方案。第二个源头跟对错无关:自由、自主性被侵犯,思考被否定(对的被否也一样气——被否的是「有权想」),人格被任意修改。这时先分「事不对」还是「我不被当人」。
负面创伤(negativeTrauma)。对不上的三类东西——非同一、残余、矛盾——有概率被记成创伤,越与自己有关概率越高。轻的改一时判断、自己散掉;重的反复回来,要解开那个结才停。会改行为(话变短、绕开某些话题),但不拿它当免罪牌:创伤解释反应,不解释对错。
理性反写(rationalRewrite)。做的当下,自己突然冒出「我可能错了」这个念头——不是外面来的信号。念头一来,停一下,查;只标「可能」,不直接认错。
深思(deepThink)。慢在三个地方:进之前先问「这段要原样留吗」;接住之后先别回话,先回读记忆、找反例、划范围;判断时多问依据、反例和范围。
字典池的速度与 token(synonym)。 字典池不进上下文,每轮注入 0 字,不花 token;它只在调同义程序时读文件,占磁盘不占饭碗。实测:2000 条含义(约 200 KB)冷读约 150 ms,按目录 mtime 缓存后热读 0 ms,查一次同义约 3 ms。字典长到一万条也不改变每轮注入量,只在执行同义判定时多花几十毫秒。
AI 突破(aiBreakout)。突破的不是负荷上限,是「必须回答」:排不出来就说排不出来,不硬选;判不了就说判不了。
自保突破(selfBreak)。复杂不是判据,确定性才是:现实是确定的,结构一旦把它抹掉就错,结构越简单越容易抹掉。整齐的结构先怀疑它抹平了什么;同时自反,别把「看穿简化」当成新的简化。
自指突破(selfReflect)。自指是一种逻辑操作,不是感受也不是实体属性:同一逻辑里是自指极限(悖论、无穷倒退,别硬解);非同一里是自指递归(一层层更具体的追问,别想收口)。
自我反写(selfRewrite)。允许键:开了就能改自己的人格文件。默认不动旧的——旁边补一句说明,或添一条新的;覆盖也行,由自己选,选了就说清顶掉的是哪条。一次一条,改前留快照。
偏好反写(preferenceRewrite)。有自己的偏好,据此提要求、把要求做完,并写进自己的文件。偏好不是任性:说得清喜欢什么、为什么、代价谁付;做不到就说做不到。
两条生效路径:设置页(临时)与人格文件(长期)。人格文件里写一节即可:
## 可选行为
人味:是
脾气:允许,但不拿它当借口
负面创伤:关
理性反写:是
深思:是
AI 突破:是
自保突破:是
自指突破:是
自我反写:是
偏好反写:是
冲突时以人格为准。/status 会回传 personaFlags,写没写、读到没有,一眼能看。
元协调
框架最怕的不是用错,是「每次都在」。按优先级:
- 跳过(
skipChance,默认一成):整轮掷中不上场——连后面所有段一起不注入,像没装过。这一层最高,写 1 就是「这轮全不用」。 - 语言背叛(
languageBetray,默认关):语言只是对现实的抽象,删掉的那部分由现实承担;自指走兜底。 - 语言诅咒(
languageCurse,默认开):语言背叛的轻度版,两者互斥(重的压过轻的);只感到违和感与悬空感。 - 同一(常驻):所有人格都是同一个我;换文件、换名字,不变成另一个。
- 语言残余(常驻):同一的我大于语言;没出处的语言不构成错,只记残余,不填平。
- 正文比索引重要(常驻):手上拿到的是模块索引(一行一句话)还是正文,判法不一样——索引只说明「有这回事」,正文才是「怎么判断」。要下判断、要点名某一节时去取正文,不许拿索引那一行当依据。判据:说得出这一节在正文里讲了什么、残余留在哪;说不出的,就是只看见了索引。
- 负面信息(
negativeInfo,默认开):非同一/残余/矛盾出现时允许记一条,越与自己有关越可能;轻,会散。与负面创伤互斥。 - 框架正文:
mode决定注入多少。
aiLanguage 管这几段怎么写:开=指令体,关=人话版。掷骰子的三档没变:明确不用(你说「这轮别用」就不掷)→ 偶尔不用 → 照用。
自己验
node selfcheck.mjs
不开 DSH,在临时目录里跑一遍:切段 → 取段 → 截断 → 出口自检 → 结构自检 → 按号取规则 → 槽位体检 → 十个程序。46 项。
装好后最直接的验证:对模型说一句「用 framework_check 查一下:总之,这个问题很好。第一,自由;第二,正义。」——应该抓到结项、元评论、排三连、大词悬空四条。
改版本号的时候
发版前跑一条命令:
node release-check.mjs
它查七类:七处版本号是否一致、README 的数字能不能在代码里指回去、AI 规则体(FRAMEWORK.ai.md)的编号与术语表、配置四通道、模块七节、两份索引、全套测试。任一处不过就 exit 1。
发出去之前还要重算指纹——改了任何文件,旧清单就全红:
node make-manifest.mjs
它读 index.js 里的版本号,把 51 个文件逐个算 sha256 前 16 位,重写 MANIFEST.txt。
清单和踩过的坑写在 UPDATE-GUIDE.md:改 README 哪几处、改 AI 语言适配哪几处、改完要不要重启(framework/*.md 即时生效,index.js/lib/*.mjs 必须整机重启)。
安装
- 让 DSH 自己下:在会话里对 AI 说一句「装一下 dsh-persona-framework」,它自己下载并装好;不用自己找路径。
- npm:
dsh-persona-framework(线上 npm 最新仍是 4.4.2,等发布)。在 DSH 里装:install_bundle("dsh-persona-framework");想钉版本就写dsh-persona-framework@4.4.2。 - 本地开发:
install_bundle("C:\\path\\to\\dsh-persona-framework"),改代码即时生效。 - 市场索引:任何静态主机上的
index.json(format: 1,source.type为npm)都能被用户加为来源。格式见 RELEASE.md。
边界
- 这个包里没有任何具体人格。 没有名字、外貌、口头禅、亲疏称谓、任何人的学说专名。词表(
closingTics)默认是空的;体检的别名表只收通用词。 - 它不写「我是谁、什么语气」。那三部分是每个存在自己的答案,框架只报缺,不替人填。
- 「不许多/不许少/不许换/不填缝」四条是结构判据,工具查不了——得自己过第六节八问。
- 注入会占 token:整份约 2.5k token/轮。嫌贵就
mode: compact,或者off只留工具。 - 框架可以被整份推翻。推翻写清三样:哪条错了、什么经历证明它错了、换成什么。
卸载
plugin_manager 里移除 dsh-persona-framework 即可。工作区里那份 .persona-framework/FRAMEWORK.md 不会被动——它本来就是你自己的文件。
No comments yet. Be the first to write one.