`chenmo` —— 可编程元叙事引擎 V2.3+

chenmo ------ 可编程元叙事引擎 V2.3+

Deploy, Register, Mix, Inspect, Reason, Import, and Search Structured Fictional Universes

chenmo 是一个面向高设定密度虚构世界 (如硬科幻、生态宇宙、文明模拟、赛博朋克)的 Python 领域特定语言(DSL)库。它允许你用精确的类 Python 语句操控虚构宇宙的全生命周期:

  • 部署d)与更新u)设定包
  • 注册l)本地创想,支持嵌套引用已有内核或镜像
  • 混合x)多源设定,按权重杂交进化
  • 提取 内核(c)、人物(p
  • 创建 镜像(m)、转义(t
  • 推演r原生情节发展(仅限当前作品已声明实体)
  • 查看i)任意实体元信息
  • 搜索s / cm.search)官方与本地作品及实体
  • 快速引用cm.frm / cm.inport)用于叙事构建阶段

"设定即代码,宇宙可部署,推演可编程,创想可注册,思想需显式授权。"


PS: 这最初是一个虚构设定 ,用于元叙事小说内部设定,但现在 chenmo 原型已真实存在

你可通过 pip install chenmo 安装基础版本,并在本地开发环境中以可编辑模式参与构建。

它仍处于概念验证阶段l, i, 可用)(仅两种,实际上pip下来什么也干不了,仅仅是打破第五面墙),但已足以作为元叙事引擎的最小可行载体------既可运行,也可写入小说。


📜 完整语句语法规范(全覆盖)

所有语句遵循统一结构:
[操作头].[作品名].[下名](参数...)

路径补全规则

  • 若省略 [下名],自动补全为 novies (保留下名,代表主叙事本体)
    例:d.neuromancerd.neuromancer.novies
  • novies 语义 :指代作品的小说/电影主干几乎不可能被用作角色名,避免命名冲突。
  • 路径前缀语义
    • temps. 开头的路径(如 temps.cyber_demo)为临时作品
      → 数据写入 ~/.chenmo/temps/works/会话有效,需手动清理
    • 其他路径为持久作品
      → 数据写入 ~/.chenmo/works/自动注册到全局命名空间

💾 存储与命名空间(核心规范)

chenmo 的所有数据持久化严格遵循以下文件系统布局:

复制代码
~/.chenmo/
├── works/                 # 持久化作品(全局命名空间)
│   └── <作品名>/          # ← 作品名 = 命名空间根(必须全局唯一)
│       ├── manifest.json
│       ├── novies/        # 主叙事内容
│       ├── cores/         # 内核:物理、生态、社会法则(含 mindcore)
│       ├── personas/      # 人物本体(p)与认知模型(*_mindcore.json)
│       └── tech/          # 科技、装置、载具
│
└── temps/                 # 临时会话空间(完全隔离)
    └── works/
        └── <作品名>/      # ← 临时作品名可重复,但限于 temps/ 域内
            ├── manifest.json
            └── ...(同上)

命名原则(【致命】级别)

命名冲突 = 宇宙污染 = 推演崩溃

  • 必须使用源作品官方标识符
    例:《阿凡达》中的星球意识应命名为 eywa禁止使用 evaavalilith 等高冲突词(因与《EVA》《Ex Machina》等 IP 冲突)
  • 原创实体需具备上下文区分度
    例:dr_lenobio_net_core_7,避免 helpergodaineo 等通用词
  • 所有引用必须带作品前缀
    例:i.avatar.eywa(...) 正确;i.eywa(...) 非法(未指定命名空间)
  • 禁止无作品名的裸操作
    l.spider(...) 将被拒绝或强制重定向至 temps.anon

"路径即身份" ------ 同名作品在 works/ 中仅存一份,覆盖即血缘断裂。


🔧 操作详解(完整版)


1. d ------ 部署(Deploy)

从源安装设定包到本地持久空间 ~/.chenmo/works/<toas>/

python 复制代码
d.[源作品名].[源下名](
    from="源路径",           # 可选,默认从官方仓库解析
    doad="官方包标识符",     # ← 新增:替代 from,从官方仓库下载
    to="~/.chenmo/works/",   # 固定基路径,用户不可改
    toas="本地命名"          # 必须唯一,写入 works/<toas>/
)
  • 作用 :下载 .narr 包,解压至 ~/.chenmo/works/<toas>/,注册到全局命名空间
  • 包格式.narr = ZIP + manifest.json,内部结构必须含 novies/, cores/, personas/, tech/
  • 命名安全 :若 toas 已存在,系统报错 Namespace collision: <toas> already exists,拒绝覆盖

示例

python 复制代码
d.blade_runner(doad="blade_runner_2049_base", toas="la_2049")  
# → 部署至 ~/.chenmo/works/la_2049/

d.dune.spice_economy(from="git://dune-core", toas="arrakis_econ")  
# → 部署至 ~/.chenmo/works/arrakis_econ/

2. u ------ 更新(Update)

在已有持久作品上增量合并变更,目标路径必须存在于 ~/.chenmo/works/

模式 A:原地更新(无 lo
python 复制代码
u.[本地作品名].[本地下名](
    from="源路径",           # 必须
    to="~/.chenmo/works/[本地作品名]",  # 固定,不可改
    merge="策略"             # overlay | patch | strict | interactive
)
模式 B:分支合并(有 lo
python 复制代码
u.[本地作品名].[本地下名](
    from="源路径",           # 必须
    lo="~/.chenmo/works/[本地作品名]",  # 必须:Local Origin
    to="~/.chenmo/works/[新作品名]",    # 必须
    toas="[新作品名]",       # 可选,默认 = 新作品名
    merge="策略"
)
  • 语义merge="overlay" 覆盖冲突字段;"strict" 遇冲突即失败
  • 命名安全toas 若已存在,报错并中止

示例

python 复制代码
u.la_2049.novies(
    from="threebody/dark_forest",
    lo="~/.chenmo/works/la_2049",
    to="~/.chenmo/works/blade_runner_df",
    toas="br_df",
    merge="overlay"
)

🔥 3. l ------ 注册(Log / Register)

从零声明新作品、人物、设定或物品 ,适用于本地创作起点

python 复制代码
l.[作品名].[下名](
    log_works="作品描述",                     # 仅当下名=novies 时有效
    log_person=["人物描述", ...],            # 注册至 personas/
    log_settings=["设定描述", ...],          # 注册至 cores/ 或 novies/
    log_thing=["物品/科技描述", ...]         # 注册至 tech/
)
✅ 高级能力:嵌套引用结构化设定

支持内联引用同一作品内已有内核或镜像:

python 复制代码
log_settings= i.[作品名].[下名](target='c')   # 引用内核
log_settings= i.[作品名].[下名](target='m')   # 引用镜像(推荐用于命运映射)
  • 语义 :注册时内联拷贝结构,非运行时查询
  • 存储路径
    • [作品名]temps. 开头 → 写入 ~/.chenmo/temps/works/<作品名>/
    • 否则 → 写入 ~/.chenmo/works/<作品名>/
  • 命名安全 :若持久作品名已存在,报错 Namespace exists

完整示例(安全命名):

python 复制代码
# 创建新作品(持久)
l.neural_frontier.novies(
    log_works="Neural Frontier",
    log_person=["Kai", "Dr. Aris Thorne"]
)
# → 写入 ~/.chenmo/works/neural_frontier/

# 为 Kai 赋予"蜘蛛式"命运结构(身份撕裂)
l.neural_frontier.kai(
    log_settings= i.neural_frontier.spider_archetype(target='m')
)
# → 写入 ~/.chenmo/works/neural_frontier/personas/kai.json

# 临时实验:赛博格侦探(隔离)
l.temps.cyber_noir.novies(
    log_person=["Detective Voss"],
    log_thing=["Neural Lace v3.1"]
)
# → 写入 ~/.chenmo/temps/works/cyber_noir/

🔥 4. x ------ 混合(Mix)

按权重融合多源设定 ,生成新实体,必须先通过 d/l 声明所有源

python 复制代码
x.mxd.in(
    sources=[("作品1", "下名1"), ("作品2", "下名2")],  # 所有源必须已存在
    weights=[0.6, 0.4],
    target_type="c" | "p" | "t",  # c=内核, p=人物, t=科技
    toas="新实体名"
)
  • 存储路径 :结果写入 ~/.chenmo/works/<toas>/(持久)
  • 命名安全toas 必须唯一
  • 注意x 用于设定构建不用于情节推演r 不可直接调用 x 结果,除非先 ld 注册

示例

python 复制代码
x.mxd.in(
    sources=[("neuromancer", "case"), ("blade_runner", "deckard")],
    weights=[0.7, 0.3],
    target_type="p",
    toas="cyber_investigator"
)
# → 生成 ~/.chenmo/works/cyber_investigator/personas/novies.json

5. f ------ 实例化(Fabricate)

动态生成作品实例(通常由 d 自动调用,用户极少直接使用)

python 复制代码
f.[作品名].[下名](setting="描述字符串")
  • 作用 :根据描述生成最小 viable 作品结构,写入 ~/.chenmo/works/[作品名]/
  • 命名安全:若作品名已存在,报错

示例

python 复制代码
f.solaris.novies(setting="Ocean planet with sentient plasma")
# → 创建 ~/.chenmo/works/solaris/ 基础结构

6. c ------ 内核提取(Core)

定义或提取底层法则,写入 cores/

python 复制代码
c.[作品名].[下名](
    axioms=["公理1", "公理2"],        # 不可违反的基本法则
    constraints=["约束1", "约束2"]    # 可配置的边界条件
)
  • 存储路径~/.chenmo/works/[作品名]/cores/[下名].json
  • 命名安全:同一作品内下名必须唯一

示例

python 复制代码
c.dune.spice_economy(
    axioms=["water_is_gold", "spice_enables_navigation"],
    constraints=["no_atomic_weapons"]
)

7. p ------ 人物提取(Persona)

定义人物本体身份,写入 personas/

python 复制代码
p.[作品名].[下名](
    traits=["特质1", "特质2"],
    constraints=["不可为行为1", "不可为行为2"]
)
  • 存储路径~/.chenmo/works/[作品名]/personas/[下名].json
  • 语义p 定义"他是谁",是 r 推演的不可变基础

示例

python 复制代码
p.neuromancer.case(
    traits=["cyber_jockey", "addicted_to_stimulants"],
    constraints=["no_corpo_loyalty"]
)

8. m ------ 镜像(Mirror)

创建命运变体,写入 personas/ 作为子实体

python 复制代码
m.[作品名].[下名](
    mp="源人物名",                          # 必须存在
    r="命运变更描述",                       # 如 "raised_by_fremen"
    as_sub="新镜像名"                      # 如 "paul_fremen"
)
  • 存储路径~/.chenmo/works/[作品名]/personas/[as_sub].json
  • 语义p 说"他是谁",m 说"他可能成为谁"

示例

python 复制代码
m.dune.paul(
    mp="paul",
    r="raised_by_fremen_after_bene_gesserit_failure",
    as_sub="paul_fremen"
)

9. t ------ 转义(Transmute)

派生新作品,保留血缘,写入新持久路径

python 复制代码
t.[源作品名].[源下名](
    toas="新作品名",
    rcd="血缘描述"  # 如 "br_2049_official"
)
  • 作用 :复制整个作品结构到 ~/.chenmo/works/<toas>/,添加血缘元数据
  • 命名安全toas 必须唯一

示例

python 复制代码
t.blade_runner.novies(toas="la_2099", rcd="br_2049_official")

✅ 10. r ------ 推演(Run)← 仅用于原生情节发展

r 不引入新设定,不跨宇宙操作,仅在当前作品已注册实体上推导情节事件。
所有情节必须基于 ~/.chenmo/works/[作品名]/temps/ 中已存在数据。

语法规则
python 复制代码
r.[作品名].[下名](
    when=<条件表达式>,          # 基于 i.[作品名]... 查询结果
    then="情节事件ID",           # 预定义或内联事件名(非台词)
    outcome={...}               # 可选:声明状态变更(用于后续 r 或 i)
)
关键约束
  • 所有 i(...) 查询必须限定在同一作品名下
  • then 应描述情节事件 (如 "eywa_grants_respiration"),非角色台词
  • 不可引用未通过 l/d/u 声明的实体
  • 不可跨作品引用 (如 r.avatar.spider(when=i.neuromancer.ava...) 非法)
✅ 正确示例(原生、无交叉、命名安全)
python 复制代码
# 前提:avatar.spider 与 avatar.eywa 已通过 l 注册
l.avatar.spider(
    log_person="Human orphan born on Pandora; lungs incompatible with Terran air"
)
l.avatar.eywa(
    log_person="Pandoran planetary consciousness",
    log_settings=["responds_to_extinction_threat"]
)

# 推演:Eywa 介入(使用官方名 eywa,非 eva)
r.avatar.spider(
    when=(
        i.avatar.spider(target='p').o2_level < 0.1 and
        i.avatar.eywa(target='p').attentive == True
    ),
    then="eywa_grants_pandoran_respiration",
    outcome={
        "spider.physiology": "+native_respiration",
        "world_state": "hybrid_acknowledged"
    }
)

此操作仅依赖 ~/.chenmo/works/avatar/ 内已存在设定,无需 xu 或外部引用


11. i ------ 查看(Inspect)

python 复制代码
i.[作品名].[下名](target='c' | 'p' | 'm')
  • 作用:返回指定实体的结构化元数据
  • 存储查询路径
    • target='c' → 读取 ~/.chenmo/.../cores/[下名].json
    • target='p' → 读取 ~/.chenmo/.../personas/[下名].json
    • target='m' → 读取镜像 persona(通常为 persona 子类)
  • l 嵌套中i... (target='m') 用于引用命运结构
  • 必须带作品名前缀 ,否则报错 Missing namespace

示例

python 复制代码
i.dune.paul(target='c')      # 查看内核
i.avatar.eywa(target='p')    # 查看 Eywa 本体(使用官方名)

🔍 12. s ------ 搜索(Search) ← 新增

DSL 形式
python 复制代码
s.what.what("关键词")  # 第二个 what = 作品名 或 "none";第三个 what = 实体类型
CLI 形式
bash 复制代码
cm.search "关键词"               # ≡ cm.s.none("关键词")
cm.s <作品名> <类型> "关键词"    # 类型: p, c, t, m, all
  • 约束
    • s.none.p("x") 非法(实体搜索必须指定作品)
    • 返回结构化结果,可用于脚本

示例

bash 复制代码
cm.search "cyber"                # 搜作品名
cm.s avatar t "respiration"      # 搜《阿凡达》中的科技

🚀 13. frm / inport ------ 叙事级快速引用 ← 核心新增

仅用于故事创作阶段,不持久化,会话有效

CLI 单行链式写法(推荐)
bash 复制代码
cm.frm <作品标识符> inport <实体名>[:mindcore] [as <别名>]
cm.frm . inport <官方作品名>
CLI 管道风格写法(视觉分隔,等效)
bash 复制代码
cm.frm <作品标识符> | cm.inport <实体名>[:mindcore] [as <别名>]
cm.frm . | cm.inport <官方作品名>

注意|chenmo CLI 内部连接符,非系统管道,仅作视觉分隔。

DSL 用法(脚本/Jupyter)
python 复制代码
from chenmo import frm, inport
frm("dmkj"); inport("PASIV")                  # 仅物品
frm("dmkj"); inport("inception:mindcore")     # 思想内核
frm("."); inport("Avatar")                    # 全量导入
语义说明
写法 导入内容 是否含 mindcore
inport X tech/Xpersonas/X
inport X:mindcore cores/X_mindcorepersonas/X_mindcore
frm . + inport Work 全量(novies, cores, personas, tech)
安全机制
  • 所有导入实体存于会话内存符号表,不写磁盘
  • 自动拉取未安装的官方包至 temps.auto_doad/
  • 命名冲突时强制要求 as 别名

完整示例

bash 复制代码
# 导入《盗梦空间》PASIV 装置(仅物品)
cm.frm dmkj inport PASIV
# 或
cm.frm dmkj | cm.inport PASIV

# 导入其梦境法则(思想内核)
cm.frm dmkj inport inception:mindcore

# 全量导入《阿凡达》宇宙
cm.frm . inport Avatar
# 或
cm.frm . | cm.inport Avatar

# 带别名
cm.frm blade_runner_2049_base inport deckard as hunter

📦 包与协议

  • 包格式.narr = ZIP + manifest.json

  • 内部结构

    复制代码
    work.narr
    ├── manifest.json
    ├── novies/
    ├── cores/          # 内核:物理、经济、生态法则(含 mindcore.json)
    ├── personas/       # 人物本体 + 认知模型(*_mindcore.json)
    └── tech/           # 科技、装置、载具
  • manifest.json 必须包含

    json 复制代码
    {
      "name": "作品名",
      "version": "1.0",
      "canonical_source": "官方ID"
    }
  • 官方包标识符 :小写、无空格(如 blade_runner_2049_base


🎯 设计原则(V2.3+ 完整版)

  1. p 定义存在,m 定义可能性
  2. r 仅推演原生情节,不负责设定引入
  3. 路径即身份,命名冲突【致命】
  4. 临时隔离:temps. 不污染 works/ 命名空间
  5. 创作分层:l(声明)→ u/x(组合)→ r(推演)
  6. 所有引用必须带作品前缀,禁止裸标识符
  7. Eywa 必须拼写为 eywa,禁用 eva 等高冲突变体
  8. doad 优先于路径:官方包通过语义标识符引用
  9. 搜索必须显式命名空间:禁止跨宇宙实体模糊匹配
  10. CLI 与 DSL 语义对齐
  11. frm/inport 是叙事快捷方式,非构建原语
  12. 会话即沙盒:所有导入默认隔离
  13. 智能依赖拉取:自动后台 doad 未安装包
  14. 思想需显式授权:mindcore 必须通过 :mindcore 显式请求
  15. 全量导入即全责:frm . + inport Work 包含 mindcore
  16. 实体与思想分离存储:避免字段冲突
  17. CLI 链式语法优先:支持空格或 | 分隔的单行写法
  18. 一行一意图:单行仅支持单实体导入,确保清晰与可预测性

🌠 适用场景

  • 🧠 赛博朋克角色构建cm.frm neuromancer inport case + cm.frm blade_runner inport deckard:mindcore
  • 🌍 生态反乌托邦d.doad("climate_collapse_core") 快速启动
  • 🚀 硬科幻文明模拟x 混合 Fermi Paradox 与 AI 伦理内核
  • 🧬 原生命运映射r 推演 spidereywa 救赎(需先 cm.frm . inport Avatar
  • 🤖 AI 叙事对齐测试 :在 mindcore 约束下生成一致剧情
  • 🎭 同人创作沙盒cm.frm dmkj inport PASIV + cm.frm . inport Avatar → 跨宇宙梦战

📜 许可证

MIT License ------ 自由用于个人与商业项目。


"以前,我们写宇宙。
现在,我们部署、注册、混合、查询、合并、导入思想,并编程推演宇宙。"

chenmo,让虚构世界运行于逻辑、约束、叙事动力学与显式授权的思想 之中。

------ 作者:你

------ 存储于:~/.chenmo/works/chenmo_docs/novies

相关推荐
acanab2 小时前
VScode python插件
ide·vscode·python
徐同保2 小时前
nginx转发,指向一个可以正常访问的网站
linux·服务器·nginx
HIT_Weston2 小时前
95、【Ubuntu】【Hugo】搭建私人博客:_default&partials
linux·运维·ubuntu
极海拾贝2 小时前
GeoScene解决方案中心正式上线!
大数据·人工智能·深度学习·arcgis·信息可视化·语言模型·解决方案
知乎的哥廷根数学学派3 小时前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习
小和尚同志3 小时前
又来学习提示词啦~13.9k star 的系统提示词集合
人工智能·aigc
实心儿儿3 小时前
Linux —— 基础开发工具5
linux·运维·算法
oMcLin3 小时前
如何在SUSE Linux Enterprise Server 15 SP4上通过配置并优化ZFS存储池,提升文件存储与数据备份的效率?
java·linux·运维
昨夜见军贴06163 小时前
IACheck × AI审核重构检测方式:破解工业检测报告频繁返工的根本难题
人工智能·重构