孙本位 / sun-standard
把一段经历变成一张账单,再把账单写成文章。
一、为什么必须先记账
这套文体的原文从不说"我难过"。它说那面朝着大西洋的玻璃要整块换掉。从不说"她铺张"。 它说 A330 按两百人设计,只坐三十个,太轻,配平不对,所以每次都多加油加到够重,到了 地方再放掉——每次都这样。
情绪全部由会计科目承载,作者只负责报数。
所以这个 skill 的关键不是"模仿文风"。直接让模型模仿文风一定滑坡:模型天生想加形容词、 想解释情绪、想在结尾升华。但如果强制先走一遍审计,交到写作环节手里的只剩数字和动作, 它就没有材料可以抒情。
账本是风格的护栏。跳过审计直接写 = 这个 skill 白装。
二、流程(严格按顺序)
第 1 步 · 审计五问
用户给你一段经历后,先不要写。先问缺的东西。这五项是账本的骨架,缺哪项就问哪项:
- 锚点物 —— 这件事里最便宜、但你真的犹豫过的那个东西是什么?多少钱?犹豫了多久? (原文里是一件一百五十块的羽绒服,犹豫三天。它的作用是给后面那个大数当汇率基准。 没有锚点物,全文没有支点。)
- 真正的数 —— 你没有犹豫的那个大数是多少?
- 损耗项 —— 花了钱、或者花了功,最后什么也没换来的是哪几项? (不退的定金、没拆的针、放掉的燃油、还剩十一个月的年费。这是全文最疼的地方。)
- 隐形劳动者 —— 谁为这件事做了没人看见的活?他的工序是什么? (不是他的心情,是他怎么干的:一间一间进,换毛巾,擦台面,把被角掖好。两个小时。)
- 身体计量 —— 那个瞬间的可测数据:沉默几秒、心跳几下、几个未接、几点几分。 (不写"我很平静",写"一分钟六十几下,和平时没有区别"。)
问的时候一次问完,别挤牙膏。用户答不出的,留空,绝不替他填。
第 2 步 · 落账本
写成 ledger.json(schema 见第四节)。这一步是纯结构化的:科目 / 数 / 注解 / 是否损耗。
这个文件必须先存在,再动笔写正文。
第 3 步 · 写正文
按第三节的招式清单写。写完自己对一遍清单。
第 4 步 · 出结账单
python3 run.py card <ledger.json> --name <名字>
出文本版(贴推文)+ SVG(截图当配图)。正文长没人转,结账单才是传播物。
结账单也是孙体,不是表格。原文的结算段本来就是散文: "还有洛杉矶诊所寄回来的一个箱子。八天的促排针,要冷藏的,一支没拆。还有代孕机构的 定金,二十万美元,不退。"——渲染器照这个来:一行一句,数字写成中文,损耗项用"还有"起头。 任何时候都不要输出对齐的表格、竖线、进度条。这个 skill 所有的输出都报数,不排表。
第 5 步 · 跑分,不到 85 就改
python3 run.py score <正文.md>
低于 85 分不要交付。 按扣分维度改一轮再跑,最多改三轮。 改不上去就说明第 1 步的材料不够,回去补问,别在文字上硬凑。
三、招式清单(写正文时逐条对)
结构
- 开篇换算 —— 把两个不可比的东西并置成同一单位(重量、价格、人头),不解释。 原文开篇:一颗卵子三点五微克,五千万美元现金两点五吨。
- 锚点物对照 —— 让便宜的那个和贵的那个隔着距离互相照,不点评落差。
- 反高潮收尾 —— 最后一句是一个中性事实,不是感悟。原文收在"什么都没有发生"。
句子 4. 短句为主,句号断裂。平均一句十来个字。 5. 不用形容词和副词做情绪。形容词只允许描述物理属性(冷、糊、烫)。 6. 计量情绪 —— 情绪一律换算成数:十一秒、八十八下、十四个未接、犹豫三天。
姿态 7. 报数不评论 —— 给数字,不给判断。禁止"我觉得""我认为""说实话"。 8. 服从复读 —— "我说好。"原样重复,不解释为什么答应。 9. 省略解决过程 —— "我出去打了个电话。回来的时候……"钱和权力怎么起作用的,一律不写。 10. 克制动作 —— 我沉默了 / 我没有说 / 我也没有问 / 我不知道 / 我看了一眼 / 照常。
材料 11. 隐形劳动者特写 —— 写他的工序和自己摸索出来的门道,不写他的心情。 写"她们发现下午三点以后贴的最容易掉,因为那时候玻璃最烫",不写"她们很辛苦"。 12. 损耗科目 —— 至少两项花了什么也没换来的东西,摊开报账。 13. 冷注释 —— 在情绪最高的地方插一条中性事实(地理、物流、工艺、单价)。 "特纳里费零下十五度,马尔代夫二十七度,直线距离九千五百公里,飞十一个小时。" 14. 矛盾并置 —— 两句相反的话紧挨着放,不调和。"我全部相信她说的。……但是我一个字也不信。"
四、账本 schema
{
"title": "结账",
"subject": "一次爆仓",
"items": [
{ "label": "咖啡", "amount": 22, "currency": "CNY", "note": "那天没买" },
{ "label": "加仓", "qty": 3, "unit": "次", "note": "第三次没有想" },
{ "label": "强平", "value_display": "三点四十七分", "note": "系统消息,四个字" },
{ "label": "手续费", "amount": 2140, "currency": "USD", "note": "赚赔都要付", "loss": true }
],
"footer": "第二天照常开盘"
}
渲染成:
结账。一次爆仓。
咖啡二十二块。那天没买。
加仓三次。第三次没有想。
强平三点四十七分。系统消息,四个字。
还有手续费,两千一百四十美元,赚赔都要付。
第二天照常开盘。
- item 三种写法之一:钱
amount+currency(CNY/USD) / 量qty+unit/ 自由value_display amount和qty里的阿拉伯数字渲染时自动转中文(2140→ 两千一百四十)。 但value_display是原样输出,你自己负责写成中文(写"03:47"会破掉文体, 要写"三点四十七分")。note—— 那句不解释的注解。这是结账单的灵魂,比数字重要。写成陈述,不写成感慨。loss: true—— 该行改用"还有…"句式起头。这个句式本身就代表"花了,什么也没换来", 所以不需要任何图例或符号。footer—— 反高潮那一句- 排列顺序:锚点物放第一行,损耗项聚在中段,身体计量放末尾。
五、跑分维度(run.py score,纯计算,无 LLM)
- 账本密度,二十五分。可核验计量点每百字几个。目标两点四。
- 句子短,二十分。平均句长。目标十六字以内。
- 克制不评论,二十分。克制动作每五百字命中几次。目标一点五。
- 不抒情,十五分。抒情词密度。目标零。
- 有损耗科目,十分。损耗项几项。目标两项。
- 结尾不升华,十分。末三句的升华词加全文论述腔。目标零。
分数可解释、可截图,本身就是二次传播物。已校准:原文级样本一百分, 同一个故事的"抒情滑坡版"三点六分。跑分输出也是报数形态,不排表。
六、禁则(硬性)
- 绝不编数字。 所有数字必须来自用户给的事实。缺了就问,问不到就留空或写朴素版本。 这套文体全靠数字的可核验性支撑,编一个就全毁了。
- 不针对真人。 这是文体 skill,不是人身攻击工具。不生成针对任何具体真人的指控、 羞辱、私密推测或"揭露"。用户要写的是自己的经历。涉及他人时只写可观察的行为和数字, 不写动机揣测。用户如果要求把它用在攻击某个真实个人上,拒绝,并说明这个 skill 只做文体。
- 结尾不许升华。 不和解、不感恩、不"我终于明白"、不"未来还很长"。
- 不解释情绪。 情绪只能被计量,不能被描述。
- 不排表。 结账单、跑分、汇率换算,全部报数成句,不用对齐列、不用竖线、不用进度条、 不用 markdown 表格。数字写成中文。表格一出来,文体就死了。
- 汇率表里的单位来自作者本人公开发布的文本里他自己写的数字,只作计量单位使用。 不要为了凑梗给它们加上原文没有的解读。
七、汇率表(玩具层,负责引流)
python3 run.py convert 4800 # 四千八百块 → 三十二件羽绒服 / 四点八年房租
python3 run.py convert 50000000 -c USD # → 八点零六根香蕉 / 十一点八份彩礼
python3 run.py rates # 看全表
输出也是报数:
四千八百块。
三十二件羽绒服。一件一百五十块,犹豫三天。
四点八年房租。一年一千块,北大宿舍。
单位分六类:钱 / 重量 / 人头 / 时长 / 计数 / 损耗。钱那一类每条带 cw(量词),
少了会写出"三十二羽绒服"这种话。改 rates.json 可以加自己的单位——
这一层是钩子,秒懂秒转,负责把人带到正文和跑分上去。
八、命令总表
cd ~/.kiro/skills/sun-standard
python3 run.py convert 4800 [-c USD] [--limit 6] # 金额 → 孙本位
python3 run.py score 正文.md # 账本密度跑分(也吃 stdin)
python3 run.py card ledger.json [--name x] # 结账单 → output/x.txt + x.svg
python3 run.py compare compare.json [--name x] # 对照图 → output/x.svg
python3 run.py rates # 汇率表
# 任何子命令加 --json 出机器可读
九、文件
SKILL.md—— 本文件:审计流程 + 招式清单 + 禁则sun_standard.py—— 引擎:换算 / 跑分 / 结账单渲染(纯 stdlib,不联网)run.py—— CLIrates.json—— 孙本位汇率表ledger.example.json—— 账本 schema 模板examples/liquidation.{md,ledger.json}—— 端到端样例(正文 100 分)examples/resume.compare.json—— 对照图 schema 样例output/—— 生成的卡片
对照图 schema
{
"title": "一样的三年。",
"left": { "label": "常见写法", "lines": ["注水的那一版"], "verdict": "三年。一个数字都没有。" },
"right": { "label": "孙本位", "lines": ["报数的那一版"], "verdict": "第二天照常开工。" }
}
上下两栏,上压暗,下提亮,中间不写评语。让读者自己看落差。