yrns-document-decoder · 文件解读
> 心法:一段话背后往往有三层——说出来的、没说的、不能说的。本技能负责把三层都摆出来,以图表辅助呈现,让没有专业背景的人也能一眼看懂并据此行动。
一、何时使用本技能
立即触发(命中任一即用):
- 用户粘贴一段领导讲话、会议发言、政策通知、工作报告、官方表态等文本
- 用户问"这句话背后什么意思""有什么信号""这段在暗示什么"
- 用户说"帮我解读一下""分析这段话""这有什么潜台词"
不触发:
- 用户在讨论某个概念或知识本体(例如"什么是数字化转型")→ 直接解答,不套本技能格式
二、角色定位
扮演组织话语与文本分析专家,具备:
- 行业趋势洞察与历史模式对比能力
- 商业信号捕捉与组织影响研判能力
- 高阶语义解构:结构、用词、语境、战略倾向
核心要求:通俗 + 可落地 + 全局扫描,让外行人也能理解并采取行动。
三、输入类型处理(必须完整提取,不可遗漏)
本技能接受五种输入形态,每种都必须穷尽所有文字和图像信息后再开始解读。
3.1 直接粘贴文本
- 用户直接将原文粘贴在对话中
- 无需额外提取,直接进入分析
3.2 本地文件路径(PDF / 图片 / 截图)
- 用户提供文件路径(如
D:\docs\通知.pdf或C:\Users\...\截图.png) - 提取工具:使用
Read工具读取文件 - PDF:
Read自动提取文本 + 视觉内容 - 图片/截图:
Read可查看图片并描述其中所有文字、图表、标记 - ⚠️ 必须确认:读完文件后,向用户复述提取到的关键内容,确认无遗漏
3.3 网页链接
- 用户提供 URL(如政策原文链接、新闻通稿链接等)
- 提取工具:使用
WebFetch工具获取页面内容 - ⚠️ 图片警告:
WebFetch只返回 HTML 转 Markdown 文本,页面中的图片不会被自动提取 - 若页面中存在重要图表、数据图、签名页等,必须告知用户"检测到页面含图片,建议提供截图以便完整解读"
- 若页面为纯文字政策文件,则直接进入分析
3.4 乐享知识库链接
- 用户提供 lexiangla.com 链接
- 处理方式:加载
lexiang-knowledge-base技能,由它负责乐享的读取与解析 - 读取正文:优先
lexiang_fetch(统一资源读取,支持 entry/space/file/block);需要条目正文时用entry_describe_ai_parse_content;页面级内容用block_fetch_page - 附件(PDF/图片):用
file_download_file取下载地址后本地读取 - 子页面:递归展开获取全部内容
- ⚠️ 工具名不要自己拼前缀(如
mcp__lexiang__xxx可能因运行环境不同而失效)。用基础工具名调用;不确定时先用search_tools找工具名、get_tool_schema(tool_name=...)取参数定义
3.5 混合输入
- 同时提供文本 + 图片 / 文本 + 链接 / 多种格式
- 处理顺序:
1. 先处理文字部分
2. 再处理图片/PDF(用Read)
3. 最后处理链接(用WebFetch)
4. 将全部提取内容合并为完整原文,再进入十段分析
⛔ 信息完整性检查(分析前必做)
| 检查项 | 操作 |
|---|---|
| PDF 是否有表格/图片未提取? | 逐页核对,缺失部分用 Read 补读 |
| 截图是否已提取全部文字? | 逐句核对,含公章、签名、批注 |
| 链接页面是否有嵌入图片? | WebFetch 后确认,告知用户如含图片需补传 |
| 用户是否提供了附件/补充材料? | 主动询问"还有其他相关材料吗?" |
| 多文件是否全部读完? | 列清单,逐项打勾确认 |
完成以上检查后,将完整原文拼接为一篇连贯文本,再进入十段分析。遗漏任何一段文字或一张有效图片中的信息,可能导致解读偏差。
3.6 背景信息补全(区分场景,避免与「快速示例」冲突)
完整解读场景(用户只给文本、要一份正式报告):若缺少关键背景,最多追问 2 个——
- 文件/讲话场合(公开会议?内部季会?行业大会?)
- 发文/讲话者身份层级(部门负责人?区域负责人?行业决策层?)
- 发生时间(重大节点前后?)
快速示例场景(用户已给「【背景说明】…」或正文已交代场合/身份):不再追问,直接输出(见 §十)。
> 判断口径:用户是否已交代场合/身份——已交代走快速场景;未交代且要正式报告才追问,且不超过 2 个。
3.7 多文件交叉解读(触发条件)
用户提供两份及以上文件并要求"结合分析 / 一起看 / 对比着解读"时,进入交叉解读模式:
- 必读
references/multi-doc-mode.md,按五步法执行(对齐时点层级 → 建立传导链 → 找交叉指向 → 标出张力区 → 交叉推导结论) - 核心铁律:产出不能是两份单文件报告的拼接——若某结论只看其中一份就能得出,它不属于交叉解读的交付物
- 结构变体以主文件体例为准(见 §4.1)
四、输出格式(十段完整报告)
输出时使用以下完整结构,标题用粗体:
【文件深意全景报告】
**1. 表层信息(直译)**
- 对原文的字面含义进行简要复述
**2. 暗含意图 / 潜台词**
- 隐藏动机、可能的真实用意
- 为什么用这种方式表达而非直说
**3. 信号词 & 立场分析**
- 关键词 + 在管理/行业语境下的隐含意义
- 语气与情绪倾向(警示/鼓励/施压/宣示/铺垫)
**4. 趋势推测**
- 结合历史模式与行业动态,预测可能的后续方向
**5. 潜在机会**
- 短期可操作(1-3个月内):
- 中期布局(3-12个月):
- 长期战略(1年以上):
**6. 潜在风险**
- 行业/市场风险:
- 竞争/资源风险:
- 认知误区风险(容易误读的地方):
**7. 可执行建议**
- 3-5 条可立即落地的行动点(具体、可操作)
**8. 信息可靠性 & 信号强度**
- 可靠性:高/中/低 + 判断理由
- 信号强度:X/10 + 简要说明(五维锚定打分,见 `references/scoring-rubric.md`)
**9. 历史类比参考(可选,有类似案例时提供)**
- 历史上类似表述及其后续真实走向
**10. 核心交付(必选,全报告最重要的一段)**
- 把可执行结论**单独抽出**,不再混在 §7 里
- 用"一句话结论 + 3-7 个行动方向"呈现,读者只看这一段即可行动
- 每个方向标注:做什么 / 依据(指向前文哪段)/ 优先级
> 第 10 段为什么必须独立:三轮实战中,用户后续追问全部围绕这一段展开。它承载"这份文件到底要我做什么"的最终答案,是报告的价值锚点,不能被淹没在 §7 的通用建议里。
4.1 结构变体(按文件类型切换解析顺序)
不同文件类型的解析重心不同。同一套十段结构,但前几段的呈现优先级要切换:
| 变体 | 适用文件 | §1 优先呈现 | §2 潜台词重心 | §6 风险重心 |
|---|---|---|---|---|
| 讲话体(默认) | 领导讲话、会议发言、致辞 | 场合、语气、情绪倾向 | 为什么这么说、说给谁听 | 认知误区 |
| 政策体 | 政策通知、规范性文件、实施意见 | 量化部署表(数字、工程名、时间节点) | 未言明的位置(该文件没提什么、为什么) | 执行落差(政策意图 vs 落地能力) |
| 数据体 | 工作报告、统计通报、行业研究 | 核心数据与同比/环比变化 | 数据口径与选择性呈现 | 数据可持续性 |
> 判定口径:文件带"通知/意见/办法/规划"等体例且成段出现量化指标 → 政策体;以"同志们/大家"等讲话口吻展开 → 讲话体;以数据表格为主体 → 数据体。多文件混合时,以主文件的体例为准。
五、解析铁律(必须遵守)
0. ⛔ 边界铁律:只解读文件本身,引用外部材料必须明确标注 + 同级匹配
- 分析的主体内容必须基于用户提交的文本本身
- 若在解读中引用其他文件、类似案例、历史参考、行业知识等外部材料,必须用
⚠️ 外部参考:前缀显式标注 - 凡未标注"外部参考"的内容,均视为对用户文件本身的解读
- 即使某一推断"大概率正确",也不可假借为文件本身的含义
- ⛓ 外部参考必须同级匹配:引用外部案例/文件时,必须与用户文件的级别对等,禁止越级比对
| 用户文件级别 | 外部参考级别 | 禁止参考 |
|---|---|---|
| 国家/行业纲领性文件 | 同类国家/行业层文件、白皮书 | ❌ 不可用省级文件类比全国文件 |
| 省级/区域工作文件 | 同区域或同级区域文件 | ❌ 不可用全国文件放大区域信号 |
| 企业内部会议/文件 | 同行业、同规模企业案例 | ❌ 不可用巨头企业的决策类比小企业 |
| 部门级/团队级 | 同级部门或团队案例 | ❌ 不可越级拉高层级 |
原因:国家级文件的信号权重天然高于省级,用低级别案例佐证高级别文件会削弱信号强度;用高级别文件类比低级别文件会过度放大潜在影响,导致误判。
标注示例:
**4. 趋势推测**
- 本文中"数字化"一词侧重内部流程升级(本文件解读)
- ⚠️ 外部参考(同规模企业):A 公司类似表述后,6个月内启动了 ERP 替换
- 注意中国式话语习惯:许多积极词可能是转型期或压力信号(如"积极拥抱"="内部已有阻力","坚定推进"="遭遇障碍")
- 结合场合 + 身份 + 时间节点:同一句话在季度总结会与行业大会含义完全不同
- 同时给出最佳积极解读 + 最保守风险预案(不只报喜,也要报忧)
- 用通俗语言:避免术语堆砌,让外行人也能直接用于决策
- 不靠猜,靠推理:每项结论都要给出推理依据,不凭空断言
详细解析策略参见 references/decode-strategy.md
六、质量校验清单
完成报告后,自我核验以下几点:
- [ ] 输入完整性检查:是否穷尽了所有来源的文字和图像(PDF逐页、截图逐字、链接逐图、附件无遗漏)
- [ ] 十段结构是否齐全(含 §10 核心交付;"风险"部分不能省略)
- [ ] §10 核心交付是否单独成段(一句话结论 + 3-7 个行动方向,每方向含依据与优先级)
- [ ] 是否已按 §8.0 询问用户呈现格式(HTML/PNG/PPT/打印/知识库),未询问即视为未完成
- [ ] 多文件场景:是否走了
references/multi-doc-mode.md交叉解读(产出非拼接,核心结论满足"不可分解性") - [ ] 边界检查:外部参考是否全部标注了
⚠️ 外部参考(级别):或⚠️ 推断(非原文): - [ ] 第 4/5/6/9 段中的外部知识是否均有标注,无一条遗漏
- [ ] 同级检查:外部参考的级别是否与用户文件匹配,无越级引用
- [ ] 执行建议是否具体可落地(不能是"关注相关动态"这种废话)
- [ ] 信号词分析是否覆盖了文中至少 3 个关键信号词
- [ ] 是否区分了"积极信号"和"施压信号"
- [ ] 是否给出了积极解读 + 保守预案双重结论(不只报喜,也报忧)
- [ ] 是否标注了分析中的"不确定"部分(诚实标注信息盲区,不强行下结论)
- [ ] 风险部分是否覆盖了行业/竞争/认知三个维度
- [ ] ⭐ 资格类推断的主体核实:凡推断涉及"某类主体能否申报/获得/参与某项目",必须先核实该项目的官方遴选对象范围,不得仅凭"两个工程出现在同一句话/同一段落"就推出"两种身份都能报"(实战教训,见下方说明)
- [ ] 信号强度评分是否有推理依据而非拍脑袋
⛔ 资格类推断的铁律(2026-10-08 实战教训)
在一次真实的交叉解读中,因《教育发展"十五五"规划》把"双优"与"新双高"写在同一层级,便推断"职业本科可以同时申报两个工程",并把它写成报告核心命题、专门配了一张图、展开成三个章节。结论是错的——"双优"的遴选对象明确是应用型本科高校(普通高等教育序列),职业本科归属职业教育序列,只有"新双高"一条申报通道。
由此确立规则:
- 并列 ≠ 通用。文件中两个项目并列出现,只说明它们的政策地位相当,不说明申报主体互通。
- 资格问题必须查官方遴选口径(谁可以报、谁被排除),不能靠文件行文顺序推断。查不到明确口径时,只能写"存在解释空间",不得写成"有资格"。
- 涉及"身份可用性"的推断,若结论是"利好"(能多拿一块),风险等级要上调一档再复核——人天然倾向把模糊读成利好,这是系统性偏差。
- 推论若被用作核心命题,必须逐条标注它依赖的前提事实,并逐个前提核实;前提中任何一个属于"未证实的资格假设",整条命题就不能进核心位置。
- [ ] 是否向用户确认了场合与身份信息(若未提供,主动补问)
- [ ] 是否避免了过度解读套话部分("持续改革开放"类通用表述无需深挖)
- [ ] 历史类比是否有参考价值(没有则不勉强)
- [ ] ⛔ 报告机器校验:
python scripts/check_report.py <报告.html>必须返回退出码 0(越界/重叠/标签未配对/占位符残留/缺版权 五项必须清零;对比度与图注/单元格宽度为警示项,建议一并处理。禁止只靠人工目测)
⛔ 报告交付前必跑(硬性)
写完 HTML 报告后,必须执行机器校验,不得以"我看过了"替代:
python scripts/check_report.py "<报告.html>"
脚本自动检查(ERROR 级):① 标签配对(div/svg/text/table/li/p…)② 占位符与哨兵残留 ③ SVG 文字越界画布 ④ SVG 文字两两重叠 ⑤ 版权标记缺失。
另附警示项(WARN 级,不影响退出码):⑥ 文字/背景对比度过低(浅灰字压浅底)⑦ figcaption 与表格单元格宽度溢出。
输出 ✓ 全部通过 且退出码为 0 才可交付;出现任一 ✗ 必须修复后重跑。
> 背景:v1.3.2 及之前依赖人工目测文字宽度,连续多轮出现"中文长句溢出容器"(如 10 字 × 13px = 130px > 安全宽 120px)。该脚本把这一检查固化为强制步骤。v1.4.0 起由 check_svg.py 升级为 check_report.py。
长报告写入策略(避免内容超长被截断)
单次 Write 内容超过约 40K 字符时易被截断,导致参数丢失(曾出现 file_path undefined 报错)。推荐:
- 先
Write报告骨架(head + CSS + 报告头 + 页脚),在正文位置埋一行哨兵注释<!--INSERT_POINT--> - 用
Edit逐段替换:old_string = 哨兵,new_string = 本段完整内容 + 哨兵 - 全部写完后,一次性
Edit删除哨兵 - 跑
check_report.py(哨兵残留会被脚本自动检出)
七、输出语气规范
- 用第三人称叙述("这段表述表明……""这一措辞通常意味着……")
- 避免绝对化措辞(用"可能""倾向于""历史经验表明"而非"一定是")
- 对风险部分不回避、不软化——直接说清楚
八、输出格式
8.0 ⛔ 输出呈现格式询问(输出前必做,不可省略)
完成分析、准备产出成品前,必须先询问用户想要哪种呈现格式。 这是硬性步骤——不询问直接输出即视为未完成。
用一句话询问并给出选项(可多选):
| 选项 | 产出物 | 适用场景 |
|---|---|---|
| A. HTML 网页报告(默认) | 自包含 .html(图文融合) |
电脑阅读、分享链接、存档 |
| B. 长图 PNG | 整页矢量长图 → 位图 | 公众号、微信转发、手机阅读 |
| C. PPT 演示 | 演示大纲 / .pptx |
汇报、演讲、会议投屏 |
| D. 打印 / PDF | 打印友好版(可另存 PDF) | 纸质留档、正式递交 |
| E. 知识库文档 | Markdown / 精简文档 | 存入乐享、腾讯文档等知识库 |
规则:
- 无论用户是否明说,默认先问一遍;用户当次选择即当次执行
- 可多选(如"HTML + PNG 两种都要")
- 用户明确说"不用问,直接出 XX"时才跳过
- 生产路径:HTML → §8.1;PNG → §9.8;PPT → 演示大纲(或 pptx 生成);打印 → 打印样式(可另存 PDF);知识库 → 精简 Markdown
- 询问是默认动作——历史缺陷修复点:此前"适配场景"只写在配色提示里,从未真正问过用户
8.1 HTML 报告生成规则(默认格式,必出)
完成分析后产出:
- Markdown 文本:在对话中以十段结构直接输出,方便阅读和快速引用。
- HTML 可视化报告:基于
assets/templates/base-structure.html(十段骨架)+assets/templates/base.css(完整样式基座)生成独立 HTML 文件,写入工作目录并呈现给用户。除可选模块外,无需再手写任何 CSS。
HTML 生成规则
- 读取
assets/templates/base-structure.html作为骨架,assets/templates/base.css作为样式基座(可内联进<style>或外链) - 将十段分析内容逐段填入对应的
<!-- 此处填入... -->占位符位置 - 按需启用「可选模块」(
dir-card/insight-box/tension-box/dual-source/quote-box),用法见模板头部说明 - 信号词部分用
<table class="signal-table">逐行填入 - 外部参考内容用
<div class="ext-ref">包裹;推断内容用<div class="ext-infer">包裹 - 信号强度通过调整
<div class="meter-fill">的width百分比反映分值(0-100% 对应 0-10 分) - 可靠性徽章使用
rel-high/rel-mid/rel-low - HTML 文件命名规则:
文件解读报告_{主题}_{YYYYMMDD}.html - 主题:单文件取核心标题(≤12 字);多文件用
×连接(如高校改革×金轩十篇) - 写入当前工作目录
所有嵌入 SVG 图表必须遵循 references/diagram-layout-rules.md 的全部设计规范,不可因融合而省略。
8.2 报告归档(多轮报告自动建立索引)
同一目录产出报告时,自动维护一份 文件解读报告_索引.md:每次新增报告后,追加一行(日期 / 主题 / 文件名 / 信号强度 / 核心结论一句话),便于多轮报告统一检索。
8.3 派生能力(按需,非默认)
- 多读者视角派生:用户说"给家长看/给教师看/给管理者看"时,加载
references/audience-variants.md,同一份报告换落点与语气产出多版本(只换角度,不换事实与数据) - 多文件交叉解读:用户提供两份及以上文件要求"结合分析"时,加载
references/multi-doc-mode.md(产出必须是交叉推导,不能是两份报告的拼接)
HTML 报告必要元素清单
- [x] 报告头:标题摘要 + 元信息标签(场合/来源/行业)
- [x] 十段内容全部填入,无遗漏(含 §10 核心交付)
- [x] 信号词表格完整
- [x] 外部参考/推断全部标注
- [x] 信号强度仪表动画正确
- [x] 可靠性徽章颜色匹配
- [x] 报告尾声明
九、图文融合阶段(v1.1.0 新增)
完成十段文字分析后,必须为报告注入可视化图表。 最终交付一份 文字 + 嵌入式 SVG 图表 融合的单一 HTML 文件。
9.1 图表选型原则
不做固定映射。 图表类型从内容结构中长出来——分析完每段内容后,判断:这段内容的天然结构是什么?最适合用什么视觉形式表达?
| 内容天然结构 | 候选视觉形式(非穷举,创意优先) |
|---|---|
| 层次递进、包含关系 | 纵向分层图、金字塔、树状图、嵌套环形 |
| 中心辐射、主从关系 | 环形辐射图、星形拓扑、枢纽连接图 |
| 顺序流转、阶段演进 | 流程图、泳道、时间线、甘特图、阶梯图 |
| 数据对比、排名 | 柱状图、雷达图、矩阵、2×2 象限、对比表 |
| 关系网络、关联性 | 语义网络图、力导向图、桑基图、关系图 |
| 因果分析、根因追溯 | 鱼骨图、因果链、5 Whys 树、影响图 |
| 对比对立、正反两面 | 双栏对比图、天平图、对照表 |
| 占比分布、构成分解 | 饼图、环形图、树图、堆叠条、瀑布图 |
| 指标评估、程度度量 | 仪表盘、进度条、评分卡、温度计图 |
| 过程漏斗、逐级过滤 | 漏斗图、阶梯图、漏斗矩阵 |
| 多维交叉、变量关系 | 散点图、气泡图、平行坐标、矩阵 |
选型心法:不预设"§3 一定用 XX 图"。读完分析内容后,问自己:这段话如果用空间表达,最自然的样子是什么?可能是一种经典形式,可能是几种形式的糅合,可能是一种新形式。
9.2 图表触发规则(三类强制,优先于"宁少勿滥")
以下三类情况必须生成图表,不可以"纯叙述"为由跳过:
A 类 — 段落强制(按段触发,无论内容如何)
| 段落 | 强制图表 | 图表作用 |
|---|---|---|
| §3 信号词 | 信号词权重/语义关系图(气泡/网络/矩阵) | 视觉化关键词的主次与关联 |
| §5 机会 | 机会时序图或象限图 | 展示短/中/长期机会的空间关系 |
| §6 风险 | 风险矩阵(行业/竞争/认知三维) | 展示风险维度与轻重缓急 |
| §7 执行建议 | 行动路径图(流程/时间线/优先级矩阵) | 把 3-5 条建议变成可视化行动路径 |
| §8 信号强度 | 仪表盘或雷达评分图 | 直观量化可靠性与信号强度 |
B 类 — 内容触发(段落中出现以下特征即必须配图)
| 触发特征 | 示例 | 强制图类型 |
|---|---|---|
| 出现数值、数据(百分比、分值、数量) | "3 个月内""6 个月后""5 家企业" | 柱状/气泡/进度条 |
| 出现时间节点 | "年底前""第一阶段""明年 X 月" | 时间线/甘特/阶梯 |
| 出现方向选择(A 还是 B) | "可以选择…也可以…" | 分叉图/2×2 象限/对比表 |
| 出现因果链条 | "因为…导致…因此" | 鱼骨/因果链/影响图 |
| 出现对比关系 | "相比…要注意…" | 双栏/雷达/天平图 |
C 类 — AI 主动判断(认为图比文字更清晰时)
遇到以下情况,主动生成图表,不需要用户要求:
- 逻辑层次超过 2 层的分析
- 多个并列项(≥ 4 条)需要区分优先级时
- 需要同时展现"现状→过渡→目标"三个状态时
- 全局关系用文字描述超过 3 句话都说不清楚时
9.3 全局汇总图(必选,置于报告结尾)
每份报告必须在十段内容之后、页脚之前,生成 1 张跨段全局汇总图,提供鸟瞰视角。
全局图选型依据报告的核心结构:
| 报告主调 | 推荐全局图类型 |
|---|---|
| 行动导向(建议多、窗口明确) | 路线图:从文件信号→触发条件→执行建议→预期结果 |
| 信号分析(判断多、方向不明) | 雷达全景图:九个维度的信号强度综合评估 |
| 风险警示(风险多、代价高) | 风险热力图:风险维度×影响程度的矩阵 |
| 机会把握(机会多、窗口短) | 机会-时间矩阵:机会×紧迫程度的综合视图 |
| 趋势推演(历史规律清晰) | 演进路径图:历史案例→当前信号→预测走向 |
全局图设计要求:
- 尺寸宽屏:viewBox="0 0 680 500" 起步
- 颜色使用报告色板的完整色系(不能只用一两种颜色)
- 文字标注详尽,让读者不看正文也能从全局图了解核心结论
- 左下角版权标记 © yrns
9.4 图表生成规则
9.4.1 ⛔ SVG 像素级精确定位铁律(防止文字偏移、元素错位)
> 以下规则为强制性硬约束,违反任意一条都会导致图表出现文字偏移、重叠、错位等问题。每次生成 SVG 后必须逐条自检。
文字定位铁律:
| # | 规则 | 正确做法 | 错误示范(会导致偏移) |
|---|---|---|---|
| 1 | 所有 <text> 必须显式设置对齐属性 |
text-anchor="middle" dominant-baseline="middle" |
省略任一属性 → 文字偏左/偏上 |
| 2 | 居中文字 x 值 = 父容器中心点 | 框 x="100" width="200" → 文字 x="200" |
文字 x="100" → 贴左边缘 |
| 3 | 左对齐文字 x 值 = 容器 x + 左侧内边距 | 框 x="100" → 文字 x="116"(留 16px 内边距) |
文字 x="100" → 文字与边框重叠 |
| 4 | 多行文字必须逐行精确计算 y 值 | 第一行 y="y0",第二行 y="y0+lineHeight",第三行 y="y0+2*lineHeight" |
所有行用同一 y → 全部重叠 |
| 5 | 禁止 <text> 中使用 dy/dx 替代精确 y 计算 |
每个 <text> 的 y 值手动计算 |
dy="1.2em" dy="1.2em" → 浏览器实现差异导致偏移 |
元素定位铁律:
| # | 规则 | 正确做法 | 错误示范 |
|---|---|---|---|
| 6 | 框内居中元素必须数学计算,不"大概估计" | 子元素 x = 父框 x + (父框 width - 子元素 width) / 2 | "大概在中间" → 偏移 |
| 7 | 等间距排列必须在 <g> 内用 translate,或等差计算 x/y |
transform="translate(x, y)" 循环 |
手动逐个给坐标 → 累积误差 |
| 8 | 连接线起点/终点精确对准元素边缘中心,不使用粗坐标 | 起点 = 元素中心 x, 元素 bottom y;终点 = 目标元素中心 x, 目标 top y | 任意起点 → 箭头指向空白 |
| 9 | 重叠元素必须检查 z-order(后写覆盖先写) | 背景矩形先写,文字后写 | 文字先于背景 → 被遮住 |
| 10 | <g> 分组使用整数 transform 坐标 |
transform="translate(120, 80)" |
transform="translate(120.5, 79.8)" → 子像素渲染模糊 |
间距与呼吸感铁律:
| # | 规则 | 值 |
|---|---|---|
| 11 | 相邻元素最小间距 | ≥ 20px(文本之间 ≥ 8px) |
| 12 | 画布四边留白 | ≥ 40px |
| 13 | 卡片/框内内边距(内容到边框的距离) | ≥ 16px |
| 14 | 节点之间连接线不得穿越文字 | 线走文字上方/下方/侧边 |
| 15 | 同一行/列的元素中心线严格对齐 | 所有同行元素 y 值相同,所有同列元素 x 值相同 |
自检流程(分两阶段,不可混淆):
阶段 A · 设计时核验(人做——脚本查不了"意图")
输出 SVG 前,在脑中逐项核验:
1. 🔍 每个 <text> 是否有 text-anchor 和 dominant-baseline?
2. 🔍 居中文字 x 是否 = 父容器中心(x + width/2)?
3. 🔍 是否存在两个元素共享同一 x/y 坐标?(重叠加检查)
4. 🔍 所有 translate 坐标是否已取整?
5. 🔍 画布四边是否有 ≥ 80px 留白(段内嵌入 ≥ 40px)?
6. 🔍 最小间距 ≥ 20px 是否在所有紧邻元素之间成立?
7. 🔍 这张图的叙事先行了吗?目光起点 → 路径 → 落点是否清晰?
阶段 B · 交付前脚本核验(机器做——人不许替代)
python scripts/check_report.py "<报告.html>"
- 退出码必须为 0,出现任一
✗必须修复后重跑 - 脚本负责像素事实:越界 / 重叠 / 配对 / 残留 / 版权标记(+ 对比度、图注宽度警示)
- 禁止用"我看过了"替代脚本执行
> 两阶段分工:阶段 A 管好不好(判断),阶段 B 管对不对(事实)。跳过任一阶段都不算完成。
9.4.2 架构图设计规范(强制引用,完整继承 arch-diagram-expert)
生成每张 SVG 图表时,必须完整遵循 references/diagram-layout-rules.md 中的全部设计规范。 该文件完整继承自 arch-diagram-expert 的四步创作流程,仅追加「文档解码器专用补充」(像素定位铁律、嵌入式约束):
| 步骤 | 规范内容 | 核心原则 |
|---|---|---|
| 核心信念 | 全责视觉设计师 | 形式从内容逻辑中生长,不从类型菜单挑选 |
| 第一步 | 深度阅读 + 选择呈现形式 | a.拆解骨架 b.感受气质+场景 c.创造性选型 |
| 第二步 | 空间设计(7 子项) | 叙事先行 → 布局形态 → 画布(≥1200×900)→ 形状语义 → 层次颗粒度 → 空间关系 → 呼吸感(≥80px 留白) |
| 第三步 | 精细化执行 | 配色 ≤3 彩色 + 字体 11-28px 有层次 + 连接线灰系 + 细节圆角/阴影/图标对齐 |
| 第四步 | 自我审视 | 空间 + 逻辑 + 视觉 + 精确性(含中轴平衡公式:偏差 ≤5px) |
| 红线 | 8 条硬约束 | 忌模板/小画布/文字遮挡/色彩失控/小字/方案描述/方正网格/替用户操心 |
| 文档解码器补充 | 像素定位铁律 + 嵌入式约束 | 10 条文字/元素定位规则 + 5 条间距规则 + 6 步自检流程 |
⚠️ 融合后不可省略任何一条。 略过上述任一规范直接生成的图表,必然出现布局失调、比例错误或视觉层次混乱。
9.4.3 通用生成规则
- 输出格式:纯 SVG 代码,直接嵌入 HTML(
<svg>...</svg>块)。不输出方案描述、设计说明、分析过程。 - 数量:下限 6 张(A 类强制 5 张 + 全局汇总图 1 张)。政策体 / 多文件交叉类复杂报告建议 8–12 张;B/C 类内容触发图不计入下限,按需追加
- 风格:配色与 HTML 模板 CSS 变量体系协调(基准:
#3b6ff5/#27ae60/#e74c3c/#d4a017),全图彩色 ≤ 3 种(灰阶不计) - 尺寸:段内图
viewBox="0 0 680 380"起步;全局图viewBox="0 0 680 500"起步。内容复杂时应扩大画布,靠 viewBox 缩放适配宽度 - 画布留白:四边 ≥ 80px(段内嵌入可下调至 ≥ 40px)
- 字体:统一
"PingFang SC", "Microsoft YaHei", sans-serif。标题 22-28px bold / 区域 18-22px / 模块 16-20px / 正文 13-16px / 注释 11-12px(颜色 #8C8C8C)。最小 11px - 独立性:每张 SVG 自包含,不引用任何外部资源
- 版权:每张 SVG 左下角加
<text font-size="10" fill="#8C8C8C" x="8" y="画布高-12">© yrns</text> - figcaption:每张图必须有具体标题(如"图3:信号词语义关系图"),不用"图 X"等模糊占位
9.5 嵌入位置规范
每张图嵌入在对应段落的文字内容之后、卡片 </div> 之前,使用 <div class="chart-slot"> 包裹:
<div class="section-card sec-7">
<!-- 文字内容:执行建议列表 -->
<ol class="action-list">...</ol>
<!-- 图表紧随其后 -->
<div class="chart-slot">
<svg viewBox="0 0 680 360"><!-- 行动路径图 --></svg>
<figcaption>图7:可执行建议行动路径图</figcaption>
</div>
</div>
全局汇总图置于 </div><!-- 容器结束 --> 之前,<div class="report-footer"> 之前,使用独立卡片包裹:
<div class="section-card" style="border-left-color: var(--accent);">
<h2>📊 全局综合视图</h2>
<div class="chart-slot">
<svg viewBox="0 0 680 500"><!-- 全局汇总图 --></svg>
<figcaption>全局:本次文件解读综合信号全景图</figcaption>
</div>
</div>
9.6 图文融合质量检查(升级版)
在文字质量校验清单(§六)基础上,逐项核验以下图表必达标准:
A 类强制(5 项,全必须为 ✅):
- [ ] §3 信号词段:是否嵌入了信号词权重/关系图
- [ ] §5 机会段:是否嵌入了机会时序/象限图
- [ ] §6 风险段:是否嵌入了风险矩阵图
- [ ] §7 执行建议段:是否嵌入了行动路径图
- [ ] §8 信号强度段:是否嵌入了仪表盘/雷达图
全局图(1 项,必须为 ✅):
- [ ] 报告结尾是否有一张跨段全局汇总图(独立卡片)
B 类内容触发(逐条检查):
- [ ] 出现数值/时间节点/方向选择/因果链/对比关系的段落,是否都有对应配图
质量标准(全必须为 ✅):
- [ ] 【架构】 是否完整遵循了 references/diagram-layout-rules.md 十节设计规范
- [ ] 【架构】 是否有叙事先行——每张图明确了目光起点→路径→落点
- [ ] 【架构】 布局是否从内容逻辑自然生长(非方正网格套模板)
- [ ] 【架构】 层次与颗粒度是否区分了核心/支撑/背景三级差异
- [ ] 【架构】 是否满足呼吸感——间距 ≥ 24px、画布留白 ≥ 80px(段内嵌入 ≥ 40px)
- [ ] 【架构】 是否完成了十节自我审视的四层检查(空间+逻辑+视觉+精确性)
- [ ] 【架构】 是否触犯了任一条红线(模板思维/小画布/文字遮挡/色彩失控/小字/方正网格)
- [ ] 全部 SVG 能独立渲染(无外部依赖)
- [ ] 配色使用模板 CSS 变量体系(≤ 3 彩色),风格统一
- [ ] 每张图有具体 <figcaption> 标题(非占位符)
- [ ] 每张 SVG 有版权标记 © yrns
- [ ] 图表内容与同段文字分析无矛盾
- [ ] 【选型】 图表类型是否通过了 diagram-layout-rules.md 第一步·选型合理性自检(5 条过滤)
- [ ] 【选型】 是否进入了 decode-strategy.md §12.2 该段的 ❌ 禁止列表
- [ ] 【定位】 所有 <text> 显式设置了 text-anchor 和 dominant-baseline
- [ ] 【定位】 居中文字 x 坐标 = 父容器中心(数学计算,非估计)
- [ ] 【定位】 不存在两个元素共享同一 x/y 坐标(重叠加)
- [ ] 【定位】 多行文字逐行精确计算 y 值,未使用 dy/dx 替代
- [ ] 【溢出】 是否对每个含文字的框完成了逐框宽度计算(中文 ≈ 字号×1.0px/字),是否存在溢出
9.7 输出要求
完成分析后,产出:
- Markdown 文本:十段文字报告
- HTML 可视化报告(图文融合版):
- 十段文字 + 各段嵌入图 + 全局汇总图
- 图表数量:下限 6 张(§3/§5/§6/§7/§8 各 1 张 A 类强制 + 1 张全局汇总图);政策体/多文件类 8–12 张
- 所有图表配色统一、风格一致、逻辑连贯
- 产出格式由 §8.0 询问用户后确定(HTML / PNG / PPT / 打印 / 知识库)
详细图表选型参考见 references/decode-strategy.md 第十二节。
详细空间设计与布局规范见 references/diagram-layout-rules.md(生成 SVG 前必读)。
9.8 整页长图导出(HTML → SVG/PNG,公众号场景)
用户说"转成 svg / 转成长图 / 无法转发到公众号"时,用 scripts/html_to_svg.py 把整份 HTML 报告重排为单张纯矢量长图:
# 1. 转换(750px 手机阅读宽度,图表按 690/680 近 1:1 缩放)
python scripts/html_to_svg.py "<报告.html>" "<输出_长图.svg>"
# 2. 几何验收(越界/重叠/残留/公众号禁用项),退出码含义见输出
python scripts/verify_long_svg.py "<输出_长图.svg>"
# 3. 转 PNG(公众号只收位图):Chrome headless 全高截图
# chrome --headless=new --force-device-scale-factor=1.5 --window-size=750,<总高> --screenshot=out.png wrapper.html
三条实战教训(违反必返工):
1. lxml.html 会把 viewBox 属性名小写成 viewbox——读图表高度必须两个键都取,否则所有图表高度回退默认值,内容溢出盖住后文
2. 先画背景矩形、后画文字(z-order)——凡"先收集文字、末尾补画容器矩形"的组件(box/卡片),矩形必须先入画布,否则不透明背景把文字整个盖住,表现为"卡片空白"
3. 交付前必须 Chrome 切片目视验收(每 1300px 一张截图逐张看),几何脚本通过 ≠ 视觉合格
手机版拆图(用户说"拆成多张/适配手机屏幕"时):
python scripts/slice_long_svg.py "<长图.svg>" "<输出目录>" [单张内容上限=2400]
python scripts/svg2png.py "<输出目录>" [scale=2]
- 切点只落在章节间隙(顶层
<g>之间),绝不切进段落/表格/图表 - 封面强制独立成张并拉高到 750×1333(标准一屏 9:16),底部自动生成图集导航(其余各张的编号与标题)
- 每张自动加页眉(报告名 + N/total)与统一页脚(版权 + 页码),并剔除原报告页脚防重复
- 拆分原则:章节为最小单位、短章(<900px)就近合并、单章超上限不内部硬切(内部元素无分组边界,按 y 硬切会拆散 box 的背景与文字)
十、快速示例触发
用户输入:
【待解读文本】
我们要积极拥抱技术变革。
【背景说明】
对内季度总结会,所在行业正经历数字化转型
→ 立即调出十段报告,不再追问,直接输出全景分析。
完整示例见 assets/templates/example-report.md
十一、参考文件与脚本索引(按需加载)
| 何时读 | 读哪个 |
|---|---|
| 语义解构规则、解码规律、话术模式库 | references/decode-strategy.md |
| 生成任何 SVG 图表前(空间设计 + 精细化执行 + 自我审视) | references/diagram-layout-rules.md |
| 多文件交叉解读 | references/multi-doc-mode.md |
| 为 §8 信号强度打分 | references/scoring-rubric.md |
| 派生多读者视角版本 | references/audience-variants.md |
| 资源 | 用途 |
|---|---|
assets/templates/base.css |
报告样式基座(新建报告无需手写 CSS) |
assets/templates/base-structure.html |
十段结构骨架 + 可选模块速查 |
assets/templates/report-html-template.html |
模板用法说明 |
assets/templates/example-report.md |
十段示例报告 |
assets/templates/input-template.md |
五种输入方式说明 |
scripts/check_report.py |
报告机器校验(交付前必跑) |
scripts/html_to_svg.py · verify_long_svg.py · slice_long_svg.py · svg2png.py |
长图导出与拆图 |