字如其人 · 笔迹心灵解码
一、定位(必读)
- 性质:生成性解读(generative interpretation),不是科学测量。
- 科学边界:笔迹→人格的预测性在严格心理学实证中证据薄弱(Dean 1992 元分析 200+ 研究,r≈0.12;Neter & Ben-Shakhar 1989:效度主要源于文字内容而非笔迹;英国心理学会将笔迹学与占星术并列评「零效度」)。有支持的仅限:① 笔迹同一认定(司法,需 2 年以上训练);② 笔迹运动学→神经/生理状态(帕金森小写症等,需在线时序数据)。
- 明确禁用:不得作为招聘筛选、司法认定、医学诊断或任何对他人正式评价的唯一/主要依据;不得作为唯一事实推翻他人自述。
- 使用方式:自我探索、创作辅助、教学案例、家庭/朋友间的趣味对照。报告强制带证据链、反证、置信度与可证伪预测,让用户可独立验证。
二、触发方式
当用户上传或指向书写笔迹(图片/PDF/数位笔数据)并希望分析其「人物特征、性格、心理、能力、能量、九型人格」等时触发。即:
> "分析一下这页字迹"、"@字如其人 + 图片"、"这是我的手写,看看性格"、"用笔迹分析 ta/我" 等。
三、输入规范
| 类型 | 要求 |
|---|---|
| 静态图片 | JPG/PNG/HEIC;≥300 dpi;自然书写(非刻意临摹);注明工具(钢笔/圆珠/毛笔)、书写姿势与时间(如"晨间咖啡后 5 分钟随手写")。提供签名页最佳 |
| 扫描件同图片要求;含至少 1 页正文 + 1 页签名 | |
| 在线笔迹 | 数位笔/Wacom/Apple Pencil 采集的 JSON(pressure/xyz/timestamp),须≥30 秒自然书写 |
> 样本越自然、越放松、越多样(不同心境多页),解读的鲁棒性越高。
> 默认分析契约(v4.2.0):导入照片笔迹后,即根据书写者笔迹分析并判断其性格特点,从多个维度进行解读——性格倾向、处事风格、情感特征、价值观取向等;每项判断给出支撑判断的具体依据(特征 → 规则 → 证据链);最后以简明扼要的方式总结该人物的整体性格画像(收口形态见「六、运行流程」第 5 步:一段 300–800 字连贯文字)。
四、工作流(五层)
① 输入层 接受 静态图片 / PDF / 在线笔迹 JSON
② 感知层 scripts/extract_features.py 跑预处理 + AUTO 特征(OpenCV:墨浓度/笔画宽度/字高/字间距/行距/边距/倾斜/基线/紧凑度/连笔/整洁度/抖动 等约 12 维硬数据)
③ 词典层 references/features.yaml 读 G8 八维特征定义 + 汉字专属项
④ 推理层 双引擎并行:
A) 规则引擎:references/knowledge_base.yaml 的 when/counter/weight 规则聚合 → 六维假设 + 证据链
B) VLM 视觉:调用方(WorkBuddy / 用户)读取原图,把 汉字专属项 + form_niveau + rhythm + style_consistency + 竖画九型(f_shu_*) 等软特征判读后写入 features.json 的 `features.<id>.value`(method 标记为 vlm),详见 references/extract_api.md;按"防巴纳姆三闸门"逐一交证据、反证、可证伪
⑤ 输出层 scripts/report.py 渲染 HTML 交互报告(雷达图 + 证据表 + 反证表 + 流派出处);`--mode teaching` 另出教学精简可打印版(决策卡优先 + 纵向要点 + 实证横幅)
五、防巴纳姆三闸门(必须执行)
- 双证据规则:任何假设必须绑定 ≥2 个独立特征
- 强制反证:每条假设必须主动输出"反证特征"与"何时结论不成立"
- 可证伪预测:每条假设附一句可由用户当场对照的具体行为描述(避免"有时外向有时内向"类万能句)
六、运行流程(WorkBuddy 调用时)
1) 用户上传/指向笔迹
2) 调用方执行:
python3 scripts/extract_features.py --input <path> --output <features.json> [--mock]
- 若调用方为 WorkBuddy,再读取原图作 VLM 视觉补全,将竖画九型(f_shu_*)等写入 <features.json> 的 features.<id>.value
- 注:f_char_height / f_line_gap / f_word_gap 已统一为「相对字高/字宽」的 0-1 归一比值(与知识库规则阈值一致);角度类单位为度。
3) 调用方执行:
python3 scripts/report.py --features <features.json> --output <report.html> --kb references/knowledge_base.yaml --feat features.yaml
4) present_files 报告 HTML
5) 最终输出收口(v4.2.0 强制):
- 报告 HTML 等结构化产物照常生成并 present_files 交付;
- 但对话的**最终文字回复只输出一段 300–800 字的连贯文字**,总结书写者的核心性格特征(性格内外向、情绪稳定性、做事风格、人际交往倾向等);
- 语言客观流畅、逻辑清晰;**禁止分点罗列、禁止小标题、禁止列表**;
- **不涉及健康或道德层面的评判**(不作健康/疾病暗示,不作道德褒贬);
- 段内沿用既有结论,不引入任何未经验证的新判断;开头可用一句「笔迹分析报告已生成」衔接交付,其后即进入该段总结,段落之外不再追加任何解释、提醒或附言(科学边界声明已内置于报告,不重复)。
七、脚本与依赖
- 依赖(隔离 venv):
pymupdf opencv-python-headless numpy pyyaml pillow ruamel.yaml - 入口:
scripts/extract_features.py— 预处理 + 特征提取(支持--mock演示模式)scripts/report.py— 推理引擎 + 综合层调度 + 分层 HTML 报告渲染(--depth brief|standard|deep默认 standard;--mode standard|teaching默认 standard;--banner on|off默认 on,仅 teaching 生效)scripts/synthesis.py— v1.2.0 综合层:把命中规则组织成 headline/人格画像长文/张力/维度画像/九型画像scripts/reading_adjudicator.py— v3.0 判读仲裁:多轮判读合并 + 一致性 + 三档可判定性分级 + 多路径交叉验证scripts/mechanism_engine.py— v3.0 机制引擎:动机需求排序 + 四条关系机制 + 签名专项落差scripts/state_trait_splitter.py— v3.0 状态-特质双轨分离(无锚点→不可验证;--disable-state可整体关闭)scripts/precision_dashboard.py— v3.0 精度仪表盘:证据强度/流派支持/判读稳定性/可验证性四维 + 无监督校准scripts/corpus_manager.py— v3.0 样本库:person_id+date+context 索引、纵向漂移、群体分布scripts/v3_layer.py— v3.0 表现层:决策卡 / 仪表盘 / 机制画像 / 双轨 的构建与渲染scripts/evidence_audit.py— v4.0 实证校验层:双轨渲染(传统主张 vs 实证校验并列、永不合并)+ 全局否证横幅 + 《效度审计报告》生成(md/html);文献只标注、不改判、不参与权重scripts/literature_patrol.py— v4.0 巡检:检索 SemanticScholar/arXiv/PubMed 写入references/literature_candidates.yaml候选区;红线:永不自动改写 evidence_base.yaml,网络不可达安静降级- 知识库:
references/features.yaml— 65 项可量化特征(G8 八维 + 汉字专属 8 项 + 竖画九型 11 项 + 派生聚合 8 项)references/knowledge_base.yaml— 9 流派/来源溯源 + 57 条映射规则(33 条原规则 100% 带 intensity_bands+narrative_ref;另 24 条「传统学派补遗」低证据 C 级规则,覆盖此前无规则引用的 18 个笔画/布局特征,按红线不挂 narrative_ref,只进发现层/教学纵向要点,不参与叙述层 prose)+ conflict_pairs 7 对消解口径 + 校准源references/narrative_bank.yaml— v1.2.0 叙述库:24 条人格条目(9 字段)+ 九型档案 9 份(置信恒 C)+ 14 条跨维组合解读;全部特征绑定、反巴纳姆审计入库references/mechanism_model.yaml— v3.0 机制模型:6 项动机需求(需求/恐惧/满足路径/被消耗路径/可证伪)+ 4 条关系机制×3 模式(信任建立/越界反应/冲突策略/断联触发)references/signature_module.yaml— v3.0 签名专项:6 种「自我呈现 vs 实际运转」落差模式(缺 f_sig_* 时整段不出)references/extract_api.md— features.json 字段约定references/ima-distill-register.md— ima 三库蒸馏登记(来源/目录实据/诚实边界)references/evidence_base.yaml— v4.0 实证证据库:global_coverage(8 条全局否证) / dimension_verdicts(7 维) / feature_verdicts / rule_verdicts;证据分级 evidence_tier + 裁决 verdict(支持/部分支持/存疑/否定/无数据)+ applicability 四维(personality/state/gender/performance);流派主张标「传统经验·无实证」,现代实证标「有数据·可验证」references/evidence_state_layer.yaml— v4.0 状态层·非医学判读点(7 个:抖动/停顿比/节律/在线速度/流畅度/在线压力/涂改率),全部 verdict=部分支持,medical_boundary 锁「禁诊断/患病概率表述」references/evidence_gaps.md— v4.0 缺口清单:原著页码级缺失(韩进/徐庆元/赵庆梅/黄瀚琳 4 本原著不可达)+ 无数据项 + 处理边界references/效度审计报告.md/.html— v4.0 《效度审计报告》(特征裁决分布:部分支持13/无数据47/否定3/支持1/存疑1;规则 33;全局否证 8)references/literature_candidates.yaml— v4.0 巡检候选区(本方本次运行命中 35 篇;数量随网络/源可达性浮动,仅登记待人工研判后升库,绝不自动改写 evidence_base.yaml)- 验收:
scripts/acceptance_v120.py(v1.2 判据 18 项)、scripts/acceptance_v300.py(v3.0 判据 34 项,含 v1.1/v1.2 回归)
八、校准(calibration_log.yaml + calibration_kit.md)
首次使用建议用 ≥10 份已知自评样本(自评大五/九型+笔迹)对 features 与规则权重做本地校准,阈值不通用。所有校准记录写入 calibration_log.yaml,保持可复现。
采集规范见 references/calibration_kit.md(每份样本的笔迹拍摄/自评量表/干扰因素登记要求,及 v1.1.0 新增的 r_cross_* 译介规则一致性专项回测与降权规则)。
九、安全审计(P2)
- 无文件破坏、无 shell 执行
- 仅读写用户指定输入与输出路径
- 不上传任何数据
- 例外(v4.0 巡检):
scripts/literature_patrol.py仅向 SemanticScholar/arXiv/PubMed 发起只读检索,结果只写入references/literature_candidates.yaml候选区,永不自动改写references/evidence_base.yaml;网络不可达时安静降级(不报错、不落盘),绝不替用户改判。
十、版本
- v1.0.0 — 初始版本(流派规则库 + G8 特征 + 规则引擎 + VLM 协同)
- v1.1.0 — 蒸馏并入 ima 三库(心理咨询智库/全息字象学/性格测评·职场基因解码库):新增
sources_external来源登记、2 笔来源标签 school、4 条跨类型"参考译介"规则(MBTI E-I/S-N·DISC·霍兰德)、vocation 输出增 compat_frameworks 项;全息字象学按"体系不混用"铁律隔离、不进主规则引擎。登记口径见 references/ima-distill-register.md。 - v3.0.0 — 「更高级别识别分析能力」专项:P0 判读工程(多轮判读仲裁 + 三档可判定性分级 + 多路径交叉验证);P1 签名专项(6 种呈现/运转落差模式);P2 机制模型层(动机需求排序 + 四条关系机制,回答「他怎么运转」而非「他是什么型」);P3 样本库与纵向漂移(person_id+date,实测方差分离状态/特质);P4 状态-特质双轨(无锚点→「不可验证·不进决策结论」,可
--disable-state关闭);P5 四维精度仪表盘(证据强度/流派支持/判读稳定性/可验证性,无监督校准:跨流派互证 + 重复判读 + 内部一致性,诚实声明「提升的是内部一致性,不等于预测效度」);L6 表达层新增决策卡(一句话判断+三条依据+三个风险点+三条「去验证什么」)置于报告最前。验收 34/34 PASS,v1.1 brief 结构 diff=0、v1.2 置信度不变性保持。 - v4.0.0 — 「实证校验层」专项(在 v3.0 之上加双轨并列、永不合并):E1 建
references/evidence_base.yaml(全局否证 8 条 + 7 维/65 特征/33 规则裁决,证据分级 evidence_tier + 裁决 verdict + applicability 四维);E2 全局反方覆盖(8 条否证跨流派,横幅强提示);E3 双轨渲染(传统主张 vs 实证校验 badge 并列、绝不互相覆盖,report.py 默认开启、--no-evidence-track可关,brief 强制关以保回归);E4 状态层非医学新增(7 个状态判读点evidence_state_layer.yaml,state_trait_splitter.py注入[实证·部分支持]标记,medical_boundary 锁死禁诊断/患病概率);E5 独立《效度审计报告》evidence_audit.py(特征裁决分布诚实披露:部分支持13/无数据47/否定3/支持1/存疑1);E6 巡检命令literature_patrol.py(一条命令触发,候选入库、绝不改写证据库)。三条红线:①永不自动改判定;②反方证据必录;③医学不越界。验收 34/34 PASS 维持(含 brief 结构 diff=0 回归)。 - v4.1.0 — 「能力迭代专项(用户驱动)」:A) 新增
scripts/char2hand.py(性格→笔迹特征卡反向生成器,从既有正向规则逆向派生,用于创作角色笔迹人设/手写稿性格校验/批量多角色档案/正反派笔迹反差);B/C) 新增scripts/batch_report.py(批量报告编排 + 多角色对比 + 正反派笔迹反差视图 + 纵向漂移);D)extract_features.py增图像增强管线(光照均匀化/透视校正/CLAHE/偏斜旋转)+ 质量门(清晰度判增强前拉普拉斯方差,诚实降级,不误判低质为清晰,避免增强伪造清晰度);E)report.py增--mode teaching(教学精简可打印版:决策卡优先 + 纵向逐条要点 + 白底黑字可打印版式,默认显示实证效度横幅--banner on,--banner off可隐;读取features[meta][image_quality],若 verdict=low 自动注入「结论已收敛·仅作教学示意」提示);F)literature_patrol.py实跑产出候选区(本轮 35 篇),并新增 24 条「传统学派补遗」C 级规则(knowledge_base.yaml33→57 条),覆盖此前无规则引用的 18 个笔画/布局特征,提升特征规则覆盖(红线:全部低证据 C 级、不改动既有判定、不自动写入证据库)。修复synthesis._dim_prose在「仅有未挂 narrative_ref 的低证据规则触发」时strong[0]越界崩溃的潜在 bug。验收维持 34/34 + 18/18 PASS。 - v4.2.0 — 「输出收口与分析契约专项(用户驱动)」:① 默认分析契约——导入照片笔迹后即做多维解读(性格倾向/处事风格/情感特征/价值观取向等),每项判断附支撑依据(特征→规则→证据链);② 报告 HTML 等结构化产物照常生成,但对话最终文字回复收敛为一段 300–800 字连贯文字,总结书写者核心性格特征(性格内外向/情绪稳定性/做事风格/人际交往倾向等),语言客观流畅、逻辑清晰、禁止分点罗列、不涉及健康或道德层面评判;段内仅沿用既有结论,不引入新判断;科学边界声明内置于报告不重复。仅改 SKILL.md 与 agent 输出纪律,不动脚本与判定逻辑,34/34 + 18/18 验收基线不受影响。
- v1.2.0 — 综合层升级("判断对了,但没说透"专项):新增
scripts/synthesis.py综合层与references/narrative_bank.yaml叙述库(24 条目×9 字段 + 9 型档案 + 14 跨维组合);33 条规则全量补intensity_bands三档强度句 +narrative_ref;新增conflict_pairs7 对显式消解口径;report.py 新增--depth brief|standard|deep分层渲染(先给人看再给证据:摘要卡→人格画像→六维画像→张力→九型→术语表→证据附录);红线 R1-R5 全部脚本化断言,验收 18/18 PASS(见scripts/acceptance_v120.py)。加厚的是"说明",不是"确定性"——置信度评级一字未动。
十一、交付与验证状态(2026-09-10 · v4.0.0)
v4.0.0 新增(在 34/34 PASS 验收基线之上,实证校验层,不动原判定逻辑)
- references/evidence_base.yaml:8 条全局否证 + 7 维裁决 + 65 特征裁决 + 33 规则裁决;证据分级 evidence_tier(元分析/多研究/机构评估/对照/实验/临床记录/专家主张/无研究)+ 裁决 verdict(支持/部分支持/存疑/否定/无数据)+ applicability 四维(personality/state/gender/performance);流派主张标「传统经验·无实证」,现代实证标「有数据·可验证」。
- references/evidence_state_layer.yaml + scripts/state_trait_splitter.py:7 个非医学状态判读点(抖动/停顿比/节律/在线速度/流畅度/在线压力/涂改率),全部 verdict=部分支持;splitter 在状态解读注入 [实证·部分支持] {fid}={val}:{interpretation};medical_boundary 锁「禁诊断/患病概率表述」。
- scripts/evidence_audit.py:双轨 HTML 块(传统主张 vs 实证校验 badge 永不合并)+ 全局否证横幅 + 《效度审计报告》生成(md+html),特征裁决分布诚实披露(部分支持13/无数据47/否定3/支持1/存疑1;规则33;全局否证8)。
- scripts/report.py:新增 --no-evidence-track(默认开启双轨层;brief 模式强制关闭以保 v1.1.0 结构回归 diff=0);standard 报告实测 1 横幅 + 20 双轨块 + 21 处「实证校验」标记;brief 报告 0 双轨(回归安全)。
- references/evidence_gaps.md:缺口清单(韩进《笔迹学——从笔迹看性格》《从笔迹看人生》、徐庆元《笔迹与心迹》、赵庆梅《笔迹分析与测试》、黄瀚琳《字如其人》4 本原著不可达→标「不可达」)+ 无数据项 + 处理边界。
- scripts/literature_patrol.py + references/literature_candidates.yaml:一条命令巡检(SemanticScholar/arXiv/PubMed),命中 9 篇候选写入候选区;红线:绝不自动改写 evidence_base.yaml,网络不可达安静降级。
v3.0.0 新增(验收 34/34 PASS,scripts/acceptance_v300.py)
- scripts/reading_adjudicator.py:多轮判读合并(数值中位数/类别多数票)+ 组内一致性 + 三档分级(T1 可稳定 20 / T2 易漂移 23 / T3 VLM 软特征 21)+ 压力·速度·稳定性三路交叉验证;实测判读稳定性 0.886,检出低一致特征 3 项、路径冲突 1 处。
- scripts/mechanism_engine.py + references/mechanism_model.yaml:动机需求 6 项(需求/恐惧/满足路径/被消耗路径/可证伪)+ 关系机制 4 条×3 模式(信任建立/越界反应/冲突策略/断联触发),全部特征绑定、全部带反证与可证伪。
- references/signature_module.yaml:签名落差 6 模式(展示/内敛/一致/防御/仪式/塌陷),缺 f_sig_* 时整段不出(闸门)。
- scripts/state_trait_splitter.py:特质层 49 / 状态层 12 分离;anchors=0 → 标记「不可验证·不进决策结论」;--disable-state 整体关闭。
- scripts/precision_dashboard.py:四维评分(vocation 0.858 高 → psyche_state 0.473 低)+ 无监督校准模式 + 无锚点诚实上限声明。
- scripts/corpus_manager.py:add/list/drift/cohort;实测 2 份同人样本漂移 → 稳定层(energy_field/enneagram)vs 易变层(ability_domain/big_five/psyche_state/relation_mode/vocation)。
- scripts/v3_layer.py + report.py:决策卡置顶(实测「高能量输出者 × 强执行收口型|独特驱动|信任方式:利益绑定型」)+ 精度仪表盘 + 机制画像 + 双轨;standard 正文 12285 字、deep 17328 字。
回归:--depth brief 与 v1.1.0 基线结构 diff = 0 行;dim_summary confidence 与 v1.1.0 全等;v1.2 验收 18/18 仍全过。
scripts/extract_features.py:OpenCV 预处理 + 全特征宇宙提取(auto/vlm/derived 三类),支持--mock/图片/PDF/在线数据;RGBA/灰度/彩色均兼容;端到端验证(mock 触发 22 规则覆盖 7 维度;真实 RGBA 扫描页 42/64 特征落地)。scripts/report.py:规则引擎(防巴纳姆三闸门 + 冲突消解 + 双证据闸门 + 反证削弱 + 量级因子)+ v1.2.0 三档渲染(brief=v1.1.0 回归锚点 / standard=摘要卡+画像+维度+张力+九型+术语表+证据附录 / deep=另加全字段 trait 卡+分档句+完整证据表)+ R1 置信度不变断言 + 术语表(≥20 条白话)+ f_* 白话括注 + 强度分档条。scripts/synthesis.py(v1.2.0 新增):综合层——headline(≤30字/≥2维) + 六段人格画像长文 + 7 对冲突消解 + 跨维张力检测 + 六维 200-350 字画像 + 九型画像(竖画数据缺失整段不出);全部叙述块以【证据:f_*=…】收尾,R2 特征绑定可审计。references/features.yaml:65 项特征(G8 八维 + 汉字专属 8 项 + 竖画九型 11 项 + 派生聚合 8 项)+ 六维输出模型(含 enneagram 与 vocation.compat_frameworks)。references/knowledge_base.yaml:9 流派/来源 + 57 条规则(33 条原规则 intensity_bands+narrative_ref 100% 非空;另 24 条「传统学派补遗」低证据 C 级规则,覆盖此前无规则引用的 18 个笔画/布局特征,按红线不挂 narrative_ref,只进发现层/教学纵向要点,不参与叙述层 prose;仅f_est(冗余 r_self_est) 与f_hanzi_radical_pos(方位类不可阈值化) 仍故意不挂规则)+ conflict_pairs 7 对 + sources_external ima 三库登记 + 校准源。references/narrative_bank.yaml(v1.2.0 新增):24 人格条目×9 字段(plain_define/daily_signs×3/at_work/in_relation/strength/cost_and_blindspot/flip_condition/growth_hint/self_check×2)+ enneagram_profiles 1-9 号(核心动机/压力/安全/侧翼/误读,置信恒 C)+ cross_pairs 14 条。scripts/acceptance_v120.py(v1.2.0 新增):验收脚本 18 项判据——R5 brief 结构 diff=0、standard≥2500 字、deep≥4000 字、narrative≥1200、六维画像 200-350、术语≥20、R2 全量绑定、R3 万能句=0、R4 边界不弱化、反巴纳姆取反/换人/动词三测试。当前 18/18 PASS。- 已知边界:零规则触发的维度保持诚实短句(R2 优先于字数);叙述加厚不改变任何 confidence 评级。
references/ima-distill-register.md:ima 三库蒸馏的来源、目录实据、贡献与诚实边界(正文为整本书库,未逐字机器提取)。- 注意:规则阈值含人群相对量,首次使用须以 ≥10 份已知自评样本本地校准(写 calibration_log.yaml)。
附录 A:六维输出模型
- 大五人格坐标(参考性):开放性、严谨性、外向性、宜人性、神经质
- 能量场:精力水平、内驱力、行动力、心理韧性
- 能力域:逻辑思维、发散思维、执行规划、社交共情、审美创造、专注细致
- 心理态:情绪稳定性、当下压力、防御方式
- 关系模式:边界感、控制欲、信任倾向、依恋风格
- 职业倾向:优势倾向、风险点、成长建议、compat_frameworks(参考译介:MBTI E-I/S-N·DISC·霍兰德,C级,非独立测量)
- 九型人格镜像(黄瀚琳体系):1-9 号概率分布与最可能主型
附录 B:核心命令
# 提取特征
python3 scripts/extract_features.py --input sample.jpg --output features.json
# 生成报告(默认 standard 模式)
python3 scripts/report.py --features features.json --output report.html
# 教学精简可打印版(决策卡优先 + 纵向要点 + 实证横幅;低质样本自动收敛提示)
python3 scripts/report.py --features features.json --output teach.html --mode teaching
# 关闭教学横幅(避免把笔迹学当事实讲授)
python3 scripts/report.py --features features.json --output teach.html --mode teaching --banner off
# 演示(无图)
python3 scripts/extract_features.py --mock --output features.json