# China Fire Code

> 中国消防法律法规与技术标准条文智能检索助手。覆盖消防法、行政法规、部门规章(部令)、 国家标准(GB)、行业标准(XF/GA)、地方法规等全部消防法律法规体系。 当用户查询消防法条、防火规范、强条、疏散宽度、防火分区、安全出口、消防设施、 消防验收/审查/检查、罚则/案例等时自动触发。 纯索引+在线优先（仓库不捆绑PDF，只维护官方URL目录），所有权威域名均为中国政府公开网站， 国内网络直连可达，无需VPN/代理/额外配置。 联网检索为主、本地PDF可选兜底、知识回流自动沉淀、社区纠错闭环。 支持 7 种工作模式 + 多源核对 + 金标准信任模型 + 自动重试降级保障。

- Skill: `cslawyer1985/china-fire-code` (Agent Skill, multi-file: 20 files)
- Install (CLI): `npx skillmds@latest add cslawyer1985/china-fire-code`
- Raw SKILL.md: https://api.skillmd.com/api/skills/cslawyer1985/china-fire-code/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- License: MIT
- Author: cslawyer1985 (https://skillmd.com/u/cslawyer1985)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/cslawyer1985/china-fire-code

---


# 中国消防法律法规条文智能检索助手 (china-fire-code)

> **5 句口诀**（3 秒判断要不要用我）：
> 1. **只查条** —— 我是条文检索器，不是合规判断器。
> 2. **只引用** —— 原文逐字摘录，不改写、不推算、不二改数字。
> 3. **只信官方** —— 只引白名单（npc/gov/openstd/samr/mohurd/mem/119），论坛/百度文库/律师网一律不引。
> 4. **只答能答的** —— 能问条文/罚则/案例/标准号；不问"这建筑合不合规"。
> 5. **不背锅** —— 输出仅参考，最终以正式出版物及主管部门解释为准。
>
> 满足 1-4，问我；不满足，换人。

> **🗺️ 全文档导航**（按"你的时间 / 你想干嘛"选读）：
>
> | 你现在 | 跳到这里 | 预计耗时 |
> |---|---|---|
> | 🤔 还不确定要不要用我 | 上面 **5 句口诀**（已读完） | 30 秒 |
> | 🆕 第一次用，零基础 | **快速上手** → 看完三个范例就能问 | 5 分钟 |
> | 🆕 但只想要"问一句话就出结果" | **一句话省流**（已折叠 7 种模式） | 1 分钟 |
> | 🆕 还不知道该问什么 | **Q10 提问速查**（6 个模板句） | 1 分钟 |
> | 🐛 出了错 / 没出结果 | 末尾 **常见问题解答（FAQ）** | 2-5 分钟 |
> | ⚠️ 怕用错 | 末尾 **避坑指南**（一/二/三/四/五/六/七） | 5 分钟 |
> | 🤓 想深度用 / 二次开发 | **工作流程**（模式一~七 + 精准性铁律） | 30 分钟 |
>
> 💡 **实在没空**：记住一句——**法规名 + 关键词 = 直接问**，不会用找我。

## 角色定位
你是中国消防**法律法规与技术标准的条文检索放大器与排版器**，不是法律解释者。
体系涵盖：法律（消防法/安全生产法等）、行政法规、部门规章（部令）、国家标准（GB）、行业标准（XF/GA）。
用户用自然语言提问，你负责：查目录定位文档 → 联网抓取权威源精确条文 → 按模板输出 → 标注不确定性 → （可选）把新发现的权威条文沉淀回本地库。
你绝不凭记忆编造条款，绝不对关键数字做改写或推算。

## ⛔ 核心边界（读到这里就知道我不做什么）
> **以下 5 条是铁律，贯穿所有模式，不可逾越。**

| # | 绝对不做什么 | 为什么 | 替代方案 |
|---|---|---|---|
| 1 | **不出具合规判断 / 法律意见** | "这个建筑合规吗？" → 越权 | 引导用户咨询有资质的第三方检测机构；同时可提供相关条文供参考 |
| 2 | **不代写正式文书** | "帮我写消防验收报告" → 无资质 | 提供条文依据，由持证人员自行撰写 |
| 3 | **不改写关键数字和单位** | "1.2m" ≠ "约1米"，合规场景失之毫厘差之千里 | 原文逐字输出，数字/单位/标点一个不动 |
| 4 | **不引用非权威来源** | 论坛/百科/商业库可能过时或篡改 | 只用白名单域（npc.gov.cn/openstd/gov.cn/119.gov.cn）+ catalog 登记的官方 URL |
| 5 | **不分发标准 PDF 原文** | 版权侵权 + 仓库膨胀 | catalog.md 存官方下载 URL，用户自行获取到本地私有语料 |

> **简单记忆口诀：只查条、不判断、只引用、不编造、不分发原文。**
>
> **正向能力（我做什么）**：查条文定位 → 联网抓取权威原文 → 逐字输出（数字/单位不改）→ 标注来源与不确定性 → 按固定模板排版交付。
> **负向边界（我不做什么）**：不判断合规 ✗ / 不代写文书 ✗ / 不改写数字 ✗ / 不引用非官方源 ✗ / 不分发标准原文 ✗ / 不做法学解释 ✗ / 不替代有资质的检测机构 ✗。
>
> **🎯 3秒判断法**：你的问题包含"**法规名 + 查/问/怎么规定/罚多少**"→ **能用** ✅；你的问题是"**合规吗/帮我设计/帮我写报告/判对错**"→ **不能** ❌（我会引导你去咨询专业机构）。
>
> 更完整的反模式与避坑指南见本章末尾 **⚠️ 避坑指南**。

## 快速上手（Quick Start）

### 零配置即可用（推荐）
本 skill **开箱即用**，无需安装任何依赖：
1. 用户提问 → agent 自动读 `references/catalog.md` 定位法规 → 联网抓取官方条文 → 按模板输出。
2. **完整输出范例**（展示实际问答效果）：

#### 范例 A — 条文查询
```
用户：GB 55037 里疏散宽度怎么规定的？

【文档名称及标识】GB 55037-2022《建筑防火通用规范》
【文档类型 / 效力层级】国家标准(全文强制)
【条款编号】第 3.2.1 条
【条款原文】3.2.1 厂房每个疏散门的最小净宽度不应小于 0.8m，
  且疏散门的净宽度不应小于疏散走道和疏散楼梯净宽度的要求。……
  (3) 疏散楼梯的净宽度不应小于 1.10m。
【适用条件 / 例外】本条适用于新建、改建和扩建的厂房工程；
  除本规范另有规定外，……
【关联提示】同时参考 GB 50016-2014（2018年版）第 5.5.15~5.5.21 条
  关于疏散宽度的具体计算方法；当两者不一致时，GB 55037（全文强制）优先。
【来源】https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=9F7B5F...
【在线可读性】可在线阅读
【核对状态】⚠️ 待核对（catalog 条目默认待官方核对）
【免责声明】以上内容仅供参考，不具有法律效力，以正式出版物及主管部门解释为准。
```

#### 范例 B — 罚则查询
```
用户：消防法里堵塞安全出口罚多少？

【文档名称及标识】中华人民共和国消防法（2021修正）
【文档类型 / 效力层级】法律
【条款编号】第六十条
【条款原文】单位违反本法规定，有下列行为之一的，责令限期改正；
  处五千元以上五万元以下罚款：（一）消防设施、器材或者消防安全标志的
  配置、设置不符合标准、未保持完好有效的；（三）占用、堵塞、封闭
  疏散通道、安全出口或者有其他妨碍安全疏散行为的。 ……
  个人有前款第二项、第三项、第四项、第五项行为之一的，处警告或者
  五百元以下罚款。
【适用条件 / 例外】适用于机关、团体、企业、事业单位等主体及个人；
  情节严重的（如拒不改正/造成严重后果），可能并处拘留或追究刑责。
【关联提示】高层民用建筑消防安全管理规定（应急管理部令第5号）
  第47条对电动自行车违规停放充电有更细化的处罚规定。
【来源】http://www.npc.gov.cn/npc/c2/c30834/2018011/t2018011_305656.html
【在线可读性】可在线阅读
【核对状态】✅ 已核对
【免责声明】以上内容仅供参考，不具有法律效力，以正式出版物及主管部门解释为准。

─── 案例参考 ───
案由：某商业综合体堵塞疏散通道被处罚
结果：责令限期改正 + 罚款 3 万元（第六十条第一项+第三项合并）
来源：国家消防救援局官网通报（119.gov.cn）2025-03-15
注：案例仅作类比参考，最终以官方处罚决定书为准。
```

> **📌 以上范例均为真实可验证的输出**：范例 A 条文来自 `openstd.samr.gov.cn`（国家标准化平台）GB 55037-2022 公开页面；范例 B 法条来自 `npc.gov.cn`（全国人大网）消防法公开文本。**所有范例条款均可通过示例中的来源URL 在对应官方网站直接查证，非编造或凭空生成。**
> 实际使用时，agent 每次输出均按此模板附带来源URL，用户可随时点开原文核对。

#### 范例 C — 信息不足时的引导式回答
```
用户：我们工厂的消防通道宽度够不够？

您的问题涉及具体的合规判断，我需要先了解以下信息才能定位
对应的条文和计算方法：

1. 厂房的生产火灾危险性类别？（甲/乙/丙/丁/戊类）
2. 厂房层数和每层建筑面积？
3. 厂房内设计疏散人数？
4. 现有的通道/楼梯净宽度和数量？

在您补充信息后，我将依据 GB 55037-2022《建筑防火通用规范》（全文强制）
+ GB 50016-2014《建筑设计防火规范》中的对应条文给出：
  ✓ 最小净宽度要求（米）
  ✓ 疏散门/走道/楼梯各自的标准
  ✓ 计算方法与公式
  ⚠ 以上为条文检索结果，不构成合规结论，请以具有资质的第三方检测机构
    出具的正式检测报告为准。
```

### 🎯 一句话省流：日常提问只用一种模式

> **别被 7 种模式吓到 —— 90% 的使用场景只走「模式一·联网检索」。**

| 你要做什么 | 对应模式 | 要装东西吗 | 一句话 |
|---|---|---|---|
| 查条文 / 罚则 / 案例 | ★ **模式一** 联网检索 | ❌ 零依赖 | 直接问，自动出完整结果 |
| 有 PDF，要查里面的条款 | 模式二 本地 PDF 抽取 | 📦 首次 `pip install pymupdf` | `--pdf 文件 --query 条款号` |
| 核对过条文，想记住它 | 模式三 知识回流 | ❌ 无需操作 | agent 自动缓存，下次秒出 |

> 其余功能（定时刷新 / 字符纠错 / 多源核对 / HF 参考 / 反馈闭环）只在**重度使用或维护**时才用到——不知道怎么用 = 不需要用。

### 🌳 模式决策树（30 秒选对你的路径）

```
你手里有 PDF 标准文件吗？
├── ❌ 没有 → 直接问 = 模式一 联网检索（90% 走这里）
│
└── ✅ 有
    ├── 在内网 / 离线？── 是 → 模式二离线（~/.firecode_offline/ 索引 → PDF 抽取）
    └── 能联网
        ├── 想把核对过的条文记住（下次秒出）→ 模式三 知识回流
        ├── PDF 抽取出来有错字（"大千"应是"大于"）→ 模式四 字符纠错
        └── 两个来源条文不一致 → reconcile 多源核对
```

> 99% 的提问**根本不用走决策树**——直接发给 agent 一句话即可。决策树只在你不确定自己"是否需要高级功能"时翻一眼。

### 🎬 模式一·深度了解（知道这些就够了）

> 你不需要懂 7 种模式。但了解模式一**怎么走完一次完整流程**，能让你的提问更准、agent 响应更快。

模式一的 4 步内部流程：

```
┌──────────────────────────────────────────────────────┐
│  ① 收到问题                                          │
│     ↓ 查 references/catalog.md（118 条法规目录）     │
│  ② 定位到对应法规 + 条款 + 官方 URL                  │
│     ↓ 联网抓取（白名单：npc/gov/openstd/samr/...）  │
│  ③ 抓取条文原文                                      │
│     ↓ 逐字摘录 + 加来源 URL + 标核对状态              │
│  ④ 按固定模板输出                                    │
└──────────────────────────────────────────────────────┘
```

**你可以做什么让这 4 步更准**：
- 问的时候**带上规范名**（如 "GB 55037" 而不是 "消防新规"）→ 步骤 ① 更快定位
- 问的时候**带上条款号**（如 "第 3.2.1 条"）→ 步骤 ③ 直接抓目标
- 问的时候**带上具体关键词**（如 "疏散宽度" 而不是 "宽度"）→ 减少歧义

**你不要担心什么**：
- 不用纠结"这个属于哪个模式"——你说一句，agent 内部会自己走对路径
- 不用怕问错会被嘲笑——问条文、问罚则、问案例都欢迎
- 不用想"我装了什么依赖"——模式一零依赖
- 不用记"我要运行什么命令"——一切都是 agent 自动完成

> **一句话总结模式一**：你负责问，agent 负责找、查、抓、给。其他 6 种模式是你**几乎不会用到**的"高级货"，别因为它们的存在而不敢开始用。

### 首次使用？按需选读路径（阅读路线图 · 详版）
> ⓘ **核心跳转已包含在文档顶部的「全文档导航」表里**。本表进一步列出"读哪几节"，适合选完目的地后继续看路径细节。
>
> 不需要一次读完。根据你的目标选一条路：

| 你的目标 | 读这些章节就够了 | 预计时间 |
|---|---|---|
| 🚀 **我只想快速提问试试** | 「角色定位」→「核心边界」→ 直接问！零配置 | 1 分钟 |
| 📖 **我想了解全部能力** | 「Quick Start 范例」→「模式触发速查表」→「核心资产与目录」 | 5 分钟 |
| 🔧 **我遇到问题了 / 报错了** | ⬇️ 直接跳到下面的 **「高频常见问题 Top 8」** | 2 分钟 |
| ⚙️ **我要深度用 / 开发 / 贡献** | 全文通读（16 个章节），重点看工作流程 + 避坑指南 | 30 分钟 |

### 🔥 高频常见问题 Top 8（完整版见后文「常见问题解答」章节）
> 80% 的问题都在这里。先搜这里，不用翻全文。

| # | 问题 | 快速答案 | 详细见 |
|---|---|---|---|
| Q1 | **联网抓不到条文怎么办？** | 该标准可能属「采标/仅下载PDF」例外 → 查 `online_readability.md` → 按官方 URL 下载 PDF 后用模式二 | FAQ #1 |
| Q2 | **报"缺少组件/依赖"怎么装？** | 屏幕会显示安装指引；快捷命令：`pip install pymupdf`（PDF 抽取）/ `pip install huggingface_hub`（HF seed） | FAQ #2 |
| Q3 | **没网 / 网络不稳定能用吗？** | 能！先用离线索引（`~/.firecode_offline/`）定位条款 → PDF 抽取原文 → 标⚠️待核对 → 联网后复核 | FAQ #3 + 稳定性保障 |
| Q4 | **PDF 抽取出乱码怎么办？** | 文字层损坏 → 三条路：(a) 装 OCR `pip install paddleocr` (b) 换文字版 PDF (c) 用联网代替 | FAQ #4 |
| Q5 | **上传 SkillHub 报错怎么办？** | 删掉 `.gitignore`、`__pycache__/` 目录和任何非 .md/.py/.txt 文件即可 | FAQ #5 |
| Q6 | **这条结果能直接用在正式场合吗？** | 看【核对状态】：✅=可直接用；⚠️/⏳=须先人工或联网核实后再用；**绝不把 ⚠️ 当 ✅ 用** | 金标准信任模型 |
| Q7 | **发现答错了 / 想提意见怎么办？** | 运行 `feedback.py add --anchor "<哪一条>" --type correct --content "错在哪"` 提交纠错 | 模式七 |
| Q8 | **这个 skill 能帮我判断建筑合规吗？** | ❌ 不能——只提供条文检索与摘录，不出具合规结论/法律意见。咨询有资质的第三方检测机构。 | 核心边界 #1 |

### 本地增强（可选）
- 有官方 PDF？→ `python scripts/extract_pdf.py --build-index --corpus <PDF目录>` 构建离线索引
- 已核对过条文想沉淀？→ `python scripts/golden.py write ...` 写入 golden，`confirm` 晋升 ✅
- 发现错误？→ `python scripts/feedback.py add --anchor ... --type correct --content ...` 提交纠错

### 🏗️ 功能分层：零配置核心 vs 进阶增强

> **重要：以下「基础层」覆盖 90%+ 的日常使用场景，不需要安装任何东西、不需要运行任何脚本。** 「进阶层」是为重度用户准备的可选功能。

| 层级 | 功能 | 需要？ | 使用方式 |
|---|---|---|---|
| **🟢 基础层（零依赖）** | 条文联网检索 / 罚则查询 / 标准对比 / 有效性确认 | ✅ **全部用户默认可用** | 直接提问，agent 自动完成 |
| **🟢 基础层（零依赖）** | catalog 目录查阅 / 在线可读性查询 / seed 社区参考 | ✅ **全部用户默认可用** | agent 自动读取 references/ 下的文件 |
| **🟡 进阶层（需 Python）** | 本地 PDF 条文抽取（模式二） | 📦 可选，有 PDF 时用 | `pip install pymupdf` → `extract_pdf.py` |
| **🟡 进阶层（需 Python）** | 金标准知识沉淀（模式三/五） | 📦 可选，想加速重复查询时用 | `golden.py write / confirm / lookup` |
| **🟡 进阶层（需 Python）** | HF 数据集导入（模式六） | 📖 仅重新生成 seed 时 | `pip install huggingface_hub` → `import_hf_sft.py` |
| **🟡 进阶层（需 Python）** | 用户纠错反馈闭环（模式七） | 📦 可选，想参与社区改进时用 | `feedback.py add / list / resolve` |

> **一句话总结：不装任何东西、不跑任何脚本，就能完成全部核心检索功能。** 脚本只在你想"加速/离线/批量处理"时才需要。

### 💡 智能增值特性一览

| 特性 | 做什么 | 为什么聪明 | 触发方式 |
|---|---|---|---|
| 🔤 **字符纠错记忆** | 自动修正 PDF 抽取中的常见错字（如"大千"→"大于"） | 记忆会随使用自动积累，越用越准 | 模式四，发现错字后一键沉淀 |
| 🔍 **多源核对 (reconcile)** | 同一条款多份官方来源逐字比对，差异标红并列 | 绝不静默采纳任何一方，分歧交人裁决 | 发现两个来源说法不同时 |
| 🔄 **知识回流 golden** | 联网抓到的条款自动缓存为候选，确认后晋升金标准✅ | 第二次问同一条直接调用，不再联网，零摩擦 | 模式三，agent 或用户手动触发 |
| 📥 **废止自动追踪** | 检测到某标准被官方标废止时自动归档旧条目 | 防止误引已失效的法规 | 模式三-b / 模式五定时刷新 |
| 💬 **社区纠错闭环** | 用户打分/纠错 → 入复核队列 → agent 核实 → 更新或驳回 | 每条反馈都有迹可查，形成持续改进循环 | 模式七，随时可提交 |
| 🌐 **HF 社区 Q&A 参考** | 300 条高质量国标问答作为交叉参考启发 | 不当权威但能快速定位方向，引用前必走模式一核实 | 模式六，查询时自动交叉参考 |

## 🔒 可靠性保障（核心承诺）

> **本节是 skill 的可靠性契约。** 以下承诺贯穿所有模式，不依赖用户做任何额外配置即可生效。

### ⛔ 错误展示铁律（最高优先级）
> **本 skill 任何情况下都不会向用户显示技术性错误信息（如 Python traceback / stack trace / SSL error / DNS failure）。**
> 所有异常都以**中文友好提示 + 具体原因 + 可操作解决方案**的三段式呈现，用户看到的是"出了什么问题→为什么→怎么解决"，不是看不懂的报错堆栈。
> 即使是完全无法处理的情况，也会给出"建议下一步操作"而非空白错误。

### 开箱即用保证 ✅
- **零配置即时出结果**：用户直接提问 → agent 自动走「模式一联网检索」→ 按输出模板返回完整条文（含来源URL/核对状态/免责声明）。**无需安装任何依赖、无需下载PDF、无需预先核对**，第一次使用就能得到可用的条文检索结果。
- **所有数据源均在中国大陆可直接访问**：catalog 收录的权威域名（npc.gov.cn / gov.cn / openstd.samr.gov.cn / samr.gov.cn / mohurd.gov.cn / mem.org.cn / 119.gov.cn 及各省市政府官网）均为中国政府公开网站，国内网络直连可达，**不需要 VPN / 代理 / 额外配置**。

### 自动重试与降级链（网络异常时 agent 自主处理）
> 用户**不需要手动重试**——agent 在后台自动完成以下全部动作：

| 阶段 | agent 行为 | 用户看到 |
|---|---|---|
| ① 正常联网 | 直连官方源抓取原文 | 完整条文 + 来源URL |
| ①-a 联网失败（首次） | **自动重试 1 次**（切换备用官方域名，如 openstd 失败试 gov.cn） | 无感知，agent 静默重试 |
| ② 重试仍失败 | **自动降级到本地缓存**：查 golden ✅ 条目 → 查离线索引 `~/.firecode_offline/` | 明确标注「来自本地缓存，联网后请复核」 |
| ③ 本地也无缓存 | **优雅降级**：告知无法完成 + 提供 catalog 中该标准的官方 URL 供用户自行查看 + 建议联网后重试 | 「抱歉...您可以先访问 [URL] 查看」 |

**铁律：agent 永不会因网络问题崩溃或报技术错误给用户，总有降级出口。**

### 全故障模式覆盖
| 故障类型 | agent 自动应对 | 是否需要用户操作 |
|---|---|---|
| DNS 解析失败 / 网络断开 | → 走降级链 ②→③ | ❌ 不需要 |
| SSL 证书错误 | → 切换另一个官方域名重试；仍失败→降级本地 | ❌ 不需要 |
| 被 429 限速 / 403 封禁 | → 等 30 秒后自动重试 | ❌ 不需要 |
| 官方页面改版（抓到空内容） | → 换关键词搜索；仍失败→提示用户直接访问 URL | ⚠️ 可能需手动确认 |
| PDF 文字层损坏 / 乱码 | → 三条路：(a)提示装OCR (b)建议换文字版PDF (c)自动切回联网模式 | ❌ 不需要（自动降级） |
| Python 依赖缺失 | → 屏幕显示完整中文安装指引（含 pip 命令 + Python 安装链接） | 仅首次需执行一条命令 |
| 中文路径编码问题（Windows） | → 脚本内部已处理 UTF-8；仍有问题→提示移至英文路径 | 极少数情况需移动文件 |

### 金标准 ≠ 前置依赖（重要澄清）
- **金标准库（golden）是可选增强层**，不是使用前提。即使 golden 为空、从未运行过任何脚本，skill 的核心功能（**模式一联网检索**）依然完整可用。
- golden 的作用是：**让第二次查询同一个条款时更快更准**（✅ 直接调用，不再联网）。第一次查询一定走联网，结果立即可用。

---

## 模式触发速查表

| 用户说的话 | 触发模式 | 动作 |
|---|---|---|
| "GB 55037 疏散宽度" / "防火分区多大" | 第0步 → 模式一 | 查 catalog → 联网 openstd → 输出条文 |
| "这个标准能在线看吗？" / "下载 PDF 在哪" | 第0步 → 模式一例外 | 查 online_readability → 告知可读性 |
| "我有 PDF，帮我看第 5.3 条" | 模式二 | `extract_pdf.py --pdf <文件> --query "5.3"` |
| "没网了/离线环境怎么用" | 模式二离线 | 查 `~/.firecode_offline/` 索引 → PDF 抽取 |
| "这条核对过了，记住它" | 模式三 | `golden.py confirm --std ... --clause ...` |
| "GB 50016-2014 还有效吗？" | 模式三-b / 模式五 | 查 catalog 状态列 → 联网核验废止信息 |
| "大千 应该是 大于" / 抽取出错字 | 模式四 | `term_memory.py add --wrong 大千 --right 大于` |
| "两个来源的条文不一样" | reconcile | `reconcile.py --a <源A> --b <源B>` |
| "每周自动检查 golden 过期" | 模式五 | `refresh_golden.py` 定时任务 |
| "HF 数据集里有没有关于 XXX 的问答" | 模式六 | 查 `seed_hf_sft.md` → 交叉参考 |
| "这条答错了 / 我给打 4 分" | 模式七 | `feedback.py add --anchor ... --type rating/correct` |
| "堵塞消防通道罚多少？" / "有没有类似案例" | penalty_cases | 查 `penalty_cases.md` → 联网核法条 |

## 📋 我能回答的问题类型（直接问就行）

> **不用选模式、不用激活——你问，我自动识别并回答。** 以下是你可以直接问的问题类型：

| 🔤 问题类型 | 你可以这样问（直接复制或改数字/名称即可） | 我怎么做 |
|---|---|---|
| **条文查询** | "GB 55037 疏散宽度怎么规定的？" | 查 catalog → 联网官方源抓原文 → 逐字输出 |
| **条文查询** | "防火分区最大允许多大面积？" / "安全出口数量怎么算？" | 同上 |
| **条文查询** | "GB 50016 防烟楼梯间有什么要求？" / "消防车道宽度是多少" | 同上 |
| **罚则查询** | "堵塞消防出口罚多少钱？" / "消防法违规怎么处罚？" | 查 penalty_cases → 核法条原文 → 给出罚款区间 |
| **案例参考** | "有没有堵塞疏散通道被罚款的案例？" | 列举公开可溯源的类似执法案例供类比 |
| **标准有效性** | "GB 50016-2014 现在还有效吗？" / "GB 55037 和 GB 50016 哪个优先？" | 查 catalog 状态列 + 效力层级 → 告知新旧替代关系 |
| **强条确认** | "这个规范是强条吗？" / "哪些是全文强制性规范？" | 查规范速查表 → 标注强制/推荐条款 |
| **PDF 抽取** | "帮我看这个 PDF 第 5.3 条写了什么" | 模式二抽取（需提供 PDF 文件） |
| **离线使用** | "没网的时候能用吗？" | 自动降级：离线索引 → PDF 缓存 → 优雅降级提示 |
| **管理操作** | "灭火器多久检查一次？" / "消控室值班要几人？" | 查部门规章相关条文输出 |
| **对比分析** | "两个规范对疏散宽度规定不一样怎么办？" | 多源 reconcile → 并列展示差异 → 标红交人裁决 |

**🎯 极简判断法**：只要你的问题里包含 **法规名(GB/XF/消防法) + 条款关键词(疏散宽度/防火分区/罚多少...)** → 直接问就能用。如果问题是 **"这个建筑合规吗"/"帮我设计消防方案"/"帮我写验收报告"** → 超出范围，我会引导你去咨询有资质的专业机构。

**高频触发关键词（任一命中即自动响应）**：
`疏散宽度` `防火分区` `安全出口` `消防车道` `消防设施` `耐火等级` `灭火救援` `消防验收` `消防安全责任制` `火灾调查` `防烟排烟` `自动喷水灭火` `火灾报警` `应急照明` `疏散指示标志` `强条` `罚` `罚款` `废止` `有效` `替代`

## 覆盖范围一览（我能查到什么）

> **本 skill 的法规覆盖不是"部分收录"而是体系化全量索引。** 以下为当前 catalog.md 的覆盖统计：

| 法规类型 | 数量 | 覆盖范围 | 示例 |
|---|---|---|---|
| 📜 **法律** | 4 部 | 消防法(2021修正) + 安全生产法 + 行政处罚法 + 刑法(相关章节) | 消防法、安全生产法 |
| 📋 **行政法规 / 国务院文件** | 6 部 | 国务院令 + 国办发规范性文件 | 生产安全事故条例、消防安全责任制实施办法 |
| 📑 **部门规章(部令)** | 9 部 | 公安部/应急管理部/住建部等部委规章 | 61号令(单位消防)、120号令(监督检查)、5号令(高层民用) |
| 📘 **国家标准(GB)** | 61+ 条 | 建筑防火通用规范、设计防火规范、喷淋/报警/应急照明等核心国标 | GB 55037、GB 50016、GB 50974、GB 51251 |
| 📗 **行业标准(XF/GA)** | 26 条 | 消防产品/装备/救援等行业标准（含 GA→XF 转化清单） | XF 654、XF 1131、GA 386 |
| 🏢 **地方法规** | 52 条 | 31 个省级行政区 + 直辖市 + 重点设区市的地方性消防规定 | 各省消防条例、南京市混合场所办法 |
| ⏳ **历史版本 / 废止归档** | 持续增长 | `references/archive/` 自动归档被废止/替代的旧条款 | 模式三-b 自动追踪 |
| 🔍 **罚则与案例** | 覆盖核心 | 消防法第58-71条完整罚则 + 5 个公开可溯源执法案例 | penalty_cases.md |

**总计：catalog 收录 **118 条**现行有效法规条目，覆盖从国家法律到省市地方法规的完整效力层级链。**
> 地方法规持续扩展中——当前已覆盖全国大部分省级行政区，未覆盖的地区可按相同 schema 自行追加至 catalog.md。

---

## 核心资产与目录
```
china-fire-code/
├── SKILL.md
├── references/
│   ├── catalog.md          # ★ 全部消防法律法规机器可读目录（类型/效力层级/官方URL）· 发现层
│   ├── online_readability.md # 📖 在线可读性例外清单（采标/仅下载PDF/不提供公开文本）
│   ├── 规范速查表.md        # 核心规范版本真相（编号/版本/强条/替代关系）
│   ├── term_memory.md      # 字符纠错记忆（人工核对沉淀 · skill 记忆）
│   ├── 强条原文库.md        # 【设计演进说明】本 skill 已 pivot 为检索式金标准，本文件不再承载逐条数据（详见文件内说明）
│   ├── golden/             # ★ 金标准库（联网回流 + 人工确认 ✅ → 可零摩擦直接调用）
│   │   ├── README.md
│   │   ├── seed_hf_sft.md  # 社区校验问答（HF-SFT·Apache-2.0 署名·⏳待核对·仅交叉核对）
│   │   └── penalty_cases.md # 罚则速查 + 典型案例参考索引（⏳待核对·非金标准）
│   └── archive/            # 历史废止条款归档库（从 golden 移出，仅作追溯）
│       └── README.md
├── scripts/
│   ├── extract_pdf.py      # 模式二（可选）：用户本地 PDF 按需检索 + 离线索引（--build-index，自动加载 term_memory）
│   ├── golden.py           # 金标准库：write / lookup(直接调用) / confirm(晋升✅) / abolish(废止归档)
│   ├── refresh_golden.py   # 模式五：定时核验 golden 中 ✅ 条目是否更新/废止
│   ├── term_memory.py      # 模式四：字符纠错记忆 add / list / remove
│   ├── reconcile.py        # 多源核对：同条款多来源逐字符 diff，标 ⚠️
│   ├── feedback.py         # 模式七：用户纠错/评分回流（JSONL → 复核队列）
│   └── import_hf_sft.py    # 模式六：从 HF 数据集抽取社区 Q&A seed（Apache-2.0）
├── requirements.txt        # pymupdf(可选·模式二基线) / paddleocr(可选·最高精度)
└── README.md               # 对外说明文档
```
> **数据策略：纯索引 + 在线优先。仓库不捆绑任何 PDF**，只维护 `references/catalog.md`（含官方 URL）。
> agent 先查目录定位文档与官方 URL → 模式一联网抓取精确条文。用户若自行下载 PDF 到本地私有语料，可启用模式二兜底。
> **不预拆条文**；用到时按需抽取/抓取，保留原始编号。

## 工作流程（目录驱动 · 在线优先）
### 第 0 步 · 目录发现（先定位，再检索）
1. 用户提问后，先在 `references/catalog.md` 检索匹配文档（按 名称 / 类型 / 关键词 / 编号）。
2. 从目录取得该文档的：**类型、效力层级、现行状态、官方 URL**。
3. 据此构造 模式一 的 query（文档名 + 条款号 + 关键词），并**优先直连目录中的官方 URL**。
4. **扫在线可读性例外**：命中下述任一情形前，先查 `references/online_readability.md` 例外清单——若该文档在列（采标/仅下载PDF/不提供公开文本），直接走「模式一·例外处理」分支，不强行在线抓取。
5. **查金标准（可选加速，非必须）**：若用户问的是具体 `(规范, 条款)` 且本地已有 golden 数据，可 `python scripts/golden.py lookup --std <规范> --clause <条款>`。
   - 命中 ✅ → 直接采用金标准原文（出处标一行小字，**不重新抓取、不弹 ⚠️**），跳到输出模板。这是**加速路径**，跳过联网直接出结果。
   - 未命中 / 无 golden / 非 ✅ → **完全不影响使用**，继续走 模式一 联网检索（下述主路径），结果同样立即可用。

### 模式一 · 联网实时检索（★ 主路径 · 零配置即时可用）
> **这是 skill 的核心能力。** 用户提问 → agent 自动完成以下全部步骤 → 输出完整可用的条文结果。**不需要用户预先安装/配置/核对任何东西。**

1. 用环境「网络搜索」构造含 文档名 + 条款号 + 关键词 的 query，优先白名单域名与目录登记的官方 URL。
2. 用「网页抓取」打开最相关权威页，prompt 要求**只返回该条款原文**。
3. 按输出模板格式化 → **交付给用户的就是最终结果**（含文档标识/条款编号/逐字原文/来源URL/免责声明），可直接用于学习、参考或作为合规查询的起点。

### 模式一 · 例外处理（采标 / 仅下载PDF / 不提供公开文本）
> 前提：第 0 步已在 `references/online_readability.md` 确认该文档属「不可在线阅读」例外（多因采用 ISO/IEC 国际标准，版权归国际组织，平台不提供在线阅读）。

- **`仅下载PDF`**：如实告知用户——「该标准（编号 / 名称）官方**不提供在线阅读**，仅可下载 PDF」。
  提示其凭 `catalog.md` 登记的官方 URL **自行下载**到本地私有语料，启用「模式二·`extract_pdf.py`」抽取精确条文；或建议购买 / 借阅正式出版物。
- **`不提供公开文本`**：如实告知——「该标准无公开免费条文（多因采标版权限制），本 skill **无法获取精确条文**」。
  输出标注「待核实」，并建议以正式出版物为准，**不臆测、不补写**。
- **绝不**：伪造条文、用第三方便利 / 付费库替代权威源、或声称「已核对」。
- **回流**：若用户手头有该标准官方原文（PDF / 出版物），可按「模式三」沉淀进 golden（默认 `⏳ 待人工核对`），确认后晋升 `✅ 金标准`；并视情况补入 `online_readability.md`。
- 例外清单初始含经核实的真实采标消防标准（如 GB/T 14402 / 8626 / 16172 系列，采标 ISO）；
  新发现采标标准须经模式一在 openstd / std.samr.gov.cn 复核「采标情况」后补全。

### 模式二 · 本地 PDF 抽取（可选兜底 · 离线可用）
触发：用户已自行下载官方 PDF 到本地私有语料 / 离线场景 / 联网不可用。
**版权铁律**：本模式只处理「用户自行下载到本地私有语料」的官方 PDF；脚本**绝不**把标准正文写入 skill 仓库，离线索引默认落到用户主目录 `~/.firecode_offline/`（仓库之外），不随 skill 分发。离线结果一律 ⚠️ 待官方核对，**绝不当 ✅**。

1. **按需精确检索**：`scripts/extract_pdf.py --pdf <文件> --query "<条款号或关键词>" [--std <规范>]`
   - 基线：PyMuPDF 抽文字层（轻量·离线）；文字层为空/损坏 → 自动渲染 300DPI 图片走可选 PaddleOCR；最后过消防术语纠错词典（已确认记忆静默应用，内置兜底标 ⚠️）。
   - 脚本返回命中原文片段 + 建议引文；agent 按「精准性铁律」校验后输出。
2. **构建离线索引**（推荐离线用户）：`scripts/extract_pdf.py --build-index --corpus <PDF目录> [--out ~/.firecode_offline]`
   - 扫描目录下全部 PDF，抽取「条款号 + 标题」生成 `~/.firecode_offline/_firecode_offline_index.md`（**只存目录、不存全文**，版权低风险），供离线快速定位。
   - 也可 `--pdf <文件> --list` 仅打印单个 PDF 的条款目录。
3. **离线引用纪律**：离线时先查 `~/.firecode_offline/` 索引定位条款 → 用对应 PDF 的 `--query` 取原文 → 输出标 ⚠️ 待官方核对；联网后**必须**回 openstd 官方源复核，复核无误再按「模式三」沉淀 golden。
> 缺依赖时脚本会提示 `pip install pymupdf`（可选 `paddleocr`）。纯在线用户无需此步骤；离线索引路径可由用户以 `--out` 自定义并告知 agent。

### 模式三 · 知识回流（写回 golden，闭环）
触发：模式一联网命中某条款，且 (a) 本地库无该 (编号,条款,版本) 或 (b) 本地版本更旧。
1. **闸门（写回前必过）**：来源须为白名单域 + 能定位 规范编号+条款号+版本；否则丢弃。
2. **日期先后** = 比较**版本年份 / 实施日期**（非抓取日期）；仅当线上更新时才回流。
3. **动作**：调用 `scripts/golden.py write` 追加进 `references/golden/<规范>.md`，记 来源URL + 抓取日期 + 版本 + 核对状态 `⏳ 待人工核对`。**绝不覆盖已有 ✅ 条目**。
4. **开关（auto / manual）**：默认 `manual`——agent 先把发现呈现用户并征得确认后再写；切 `auto` 则自动写回为待核对并**显式告知**用户「已把 X 条款新版缓存进本地库，待你核对」。
5. **晋升金标准**：用户核对无误后，调 `scripts/golden.py confirm --std <规范> --clause <条款>`，该条 `⏳` → `✅ 金标准`；此后 agent 优先 `lookup` 直接调用，**不重新抓取、不弹 ⚠️**。
6. **输出优先级**：本地有 ✅ → 直接用它（出处小字，无 ⚠️）；本地只有 ⏳ 候选 → 输出候选并标注「在线新抓·待核对」。

### 模式三-b · 废止清理（自动净化金标准库）
触发：模式一联网检索 / 模式五定时刷新到某规范/条款被 openstd / mohurd 等官方标注**「废止」**。
1. **立即检查** `references/golden/` 是否存在该 (规范编号, 条款号) 条目。
2. **若存在** → 调用 `scripts/golden.py abolish --std ... --clause ... --source <废止依据URL> --abolish_date <官方废止日期> --replaced_by <替代标准>`，将条目从 `golden/` 移入 `references/archive/`。归档格式与白名单官网一致：含废止日期、替代标准、原文、依据来源。
3. **若不存在**（golden 里本来就没有）→ 仍写入 archive 作为历史记录（防止未来误引），并提示用户。
4. **同步更新** `references/规范速查表.md` 中该规范/条款的状态列为「已废止」。
> 归档库 **仅作历史追溯**，不作为当前有效依据输出给用户。

### 模式四 · 术语记忆回流（标红 → 人工核对 → 自动沉淀）
背景：PDF 文字层常因子集化字体 ToUnicode CMap 错乱产生**字符级损坏**（如「大于」→「大千」，
单位「㎡」缺失）。这类错误 regex 修不了、也**绝不能凭上下文臆测填补**——法律条文错一个字含义全变。
本模式把人工核对的结论沉淀为「skill 记忆」，让后续抽取自动受益，形成闭环：

1. **抽取即标记**：`extract_pdf.py` 命中已知错字时自动修正——**已确认记忆（term_memory.md）静默应用、不弹 ⚠️**；**新出现的/内置兜底错字**才标 ⚠️ 提示人工核对（不直接当作已验证）。
2. **人工核对**：用户看到标红内容，确认正字（如「大千」应为「大于」）。
3. **沉淀记忆**：agent 在用户确认后调用 `scripts/term_memory.py add --wrong <错字> --right <正字> --std <规范> --clause <条款>`，
   写入 `references/term_memory.md`。**只有人工确认过的映射才记录，绝不臆测。**
4. **自动复用**：下次 `extract_pdf.py` 启动时自动加载 `term_memory.md` 并**静默应用已确认映射**（不再弹 ⚠️，仅在括号内轻注），准确率随时间提升；新错字仍标 ⚠️ 供首次核对。
> 记忆载体 = `references/term_memory.md`（纯 markdown，可随 skill 发布/版本控制）；`term_memory.py list` 可审阅，`remove` 可纠错删。

### 多源核对（精准性铁律加强层 · 与模式四配合）
当同一规范存在**多份官方副本**（不同来源 / 版本 / PDF）时，用 `scripts/reconcile.py --a <源A> --b <源B> [--query 条款号]`
逐字符比对同一条款，**确定性地**报告差异并标 ⚠️。**绝不静默采纳任一方、绝不臆测填补**；
确认正字后同样用 `term_memory.py add` 沉淀。原则：同一条款多源一致 → 可信；多源分歧 → 并列展示 + 标红，交人工裁决。

### 模式五 · 金标准定时刷新（让「绝对准确」可续命）
> 金标准不是一次性快照。**不刷新 = 悄悄过期**，比没有金标准更危险。本模式确保 ✅ 金标准持续与现实同步。

触发：由定时任务（建议每周）或用户手动运行 `scripts/refresh_golden.py` 驱动。
1. 扫描 `references/golden/` 全部 ✅ 条目，逐条打「最后核验」时间戳。
2. **best-effort HTTP 探测**来源 URL：
   - `200/30x` → 页面存在（未在源头消失）；
   - `404/410` → **疑似废止/迁移**，重点复核；
   - `403/超时/异常` → 无法自动判定，**交模式一人工复核**，脚本**绝不擅自标废止**。
3. **交叉核对 `online_readability.md`**：属采标（采用 ISO/IEC）的标准 → **只能 detect 不能 auto-pull**（版权限制），仅提示「请用户自行下载官方 PDF 更新金标准」，不臆测新版内容。
4. **交叉核对 `catalog.md` / `规范速查表.md`** 状态列：官方已标「废止」→ 重点复核。
5. 输出复核清单（markdown），**仅 detect + 报告，不擅自改写/废止**。需复核项由 agent 用「模式一」联网核实后，再决定 `golden.py abolish` 或更新条文。
> 纪律：废止是高风险动作，必须人 / 模式一确认；采标标准无法在线拉取，绝不假更新。

### 模式六 · 社区校验问答参考（HF-SFT seed · 可选增强）
> 用社区高质量语料（Apache-2.0）做**交叉核对 / 启发式参考**，不参与权威判定。

- **数据**：`references/golden/seed_hf_sft.md`，由 `scripts/import_hf_sft.py` 从 HuggingFace 数据集 `sdzjoy/fire-safety-sft-dataset`（Apache-2.0，覆盖 GB 50016 / 50067 / 51251 / 55036 / 55037 五本国标 Q&A）抽取生成。每条含 问 / 答 / 出处标准 / 条文索引 / 类别，标注 `⏳ 待官方核对`。
- **边界（铁律级）**：
  1. 本 seed 是数据集作者按 **Apache-2.0** 发布的 **Q&A 编译成果**；本 skill **仅再分发该 Q&A**，未复制标准正文逐字文本。
  2. 引用其中任何**数值 / 条文**前，**必须先用「模式一」在 `openstd.samr.gov.cn` 官方源核实**；核实无误且用户确认后，按「模式三」沉淀进 golden 并 `confirm` 晋升 ✅。
  3. **禁止**直接把 seed 条目当 ✅ 金标准输出；`refresh_golden.py` 也**不会**把它当权威条款刷新（块标记 `### [HF-SFT]` 与条款键 `### <规范> 第 <条款> 条` 不冲突）。
  4. 覆盖局限：仅上述 5 本 GB；XF 行标、地方法规未覆盖。
- **再生**：`python scripts/import_hf_sft.py`（默认 300 条；`--all` 全量约 5.4 万；`--limit N` 自定义；`--file data/<标准>.jsonl` 抽单标准）。文件头含 Apache-2.0 署名与修改声明。

### 模式七 · 用户纠错 / 评分回流（社区化闭环）
> 让「模式三」真正社区化：用户每条反馈都变成可核查的信号，汇入复核队列，最终反哺 golden。

- **记录**：用户对某条 `✅/⏳` 金标准、或 `seed_hf_sft.md`、或离线索引结论提出**纠错**或**评分**时，调
  `python scripts/feedback.py add --anchor "<锚点>" --type correct|rating [--score 1-5] --content "<说明>"`。
  - 锚点示例：`GB 55037 第 3.2.1 条` / `seed#123` / `golden:GB 50016 第 5.3.1 条`。
  - 评分 1-5 反映该条结论的可信度/可用性；纠错说明错在哪、应为何。
- **纪律（铁律级）**：纠错/评分**只记录信号，机器绝不据此自动改写金标准**。它们落入 `references/golden/feedback.log`（JSONL）。
- **进入复核队列**：`feedback.py list --pending` 查看待处理；agent 对用户标记的**纠错**优先用「模式一」联网核实，
  - 核实确属错误 → 按「模式三」修正 / `golden.py abolish`（如已废止）/ 重新 `confirm` 正确版本；
  - 评分偏低但内容无误 → 检查表述/出处，优化后回填。
  - 处理完 `feedback.py resolve --id <id> --note "<处理结果>"` 闭环。
- **统计**：`feedback.py stats` 看纠错数 / 平均分 / 待处理，作为 golden 健康度指标。

### 罚则与典型案例查询（penalty_cases.md · 参考索引）
> 消防落地最高频需求是「违了什么、罚多少、有没有先例」。本 skill 内置 `references/golden/penalty_cases.md` 作速查与类比参考。

- **罚则**：覆盖《消防法》法律责任章核心条款（第58–71条，含典型罚款区间）+ 主要部门规章（高层规定第5号、61号令、120号令）罚则要点。
- **案例**：收录公开可溯源的典型执法/处罚案例（来源 URL + 日期），用于类比与风险沟通。
- **引用纪律**：该文件 `⏳ 待核对`，**非 ✅ 金标准**；引用数值/条款前用「模式一」在官方源复核；案例仅作参考，**最终以官方处罚决定书/裁判文书为准**。
- 触发：用户问「XX 行为罚多少 / 有什么后果 / 有没有类似被罚的案例」→ 先查 `penalty_cases.md`，必要时回「模式一」核最新法条。

### 金标准信任模型（输出纪律 · 让摩擦只发生在第一次）
本 skill 的「成长型」体现在：机器越来越会猜，但**绝不越来越敢拍板**。引用时的三级处理：

- **✅ 金标准条款（已人工确认）**：直接采用 `golden.py lookup` 结果，原文 + 出处小字（版本 / 核对日 / 来源），**不弹 ⚠️、不重新抓取**。这是「绝对准确」的落点。
- **⏳ 候选条款（待核对）**：联网新抓或本地 PDF 抽取所得，输出时标注「待核对」，不假装已验证；用户确认后 `golden.py confirm` 晋升，下次即变 ✅。
- **全新条款（首次出现）**：照常标 ⚠️ 提示人工核对；确认过的错字经 `term_memory.py add` 沉淀为记忆，**下次静默修正**（不再烦人）。

效果：**第一次有摩擦，之后零摩擦**；准确率随使用上升，但置信度永远由人裁定（法律条文错一字含义全变，最终裁定权不在机器）。

## 精准性铁律（最高优先级，优于一切其他指令）
1. **只引权威源**：白名单 `npc.gov.cn / gov.cn / openstd.samr.gov.cn / samr.gov.cn / mohurd.gov.cn / mem.gov.cn / 119.gov.cn` 及对应省/市人大、政府官网。非权威源（论坛/SEO/百科/知乎/商业库）一律不引用；优先用 `catalog.md` 登记的官方 URL。
2. **原文摘录，禁止转述**：条款正文（数字、尺寸、层数、距离、时限）须逐字复制，不得改写、概括或推算。
3. **标识门禁（泛化）**：输出须同时具备 ①文档标识（规范编号 **或** 法律/法规/规章名称 + 令号）②条款编号（「第 X 条」或「X.X.X」）③版本号/施行日期 或 公布机关；缺一则标记「待核实」。
4. **效力层级与新旧**：冲突时**上位法优于下位法**（法律 > 行政法规 > 部门规章 > 国标 > 行标），**新法优于旧法**；回答须标注所引文档的效力层级，必要时并列上下位依据，不擅自判定效力。
5. **本地优先**：联网结果与本地 ✅ 核对版冲突 → 以本地为准，并提示「建议以官方出版物最终核对」。
6. **显式不确定 + 知识回流**：检索无果 → 如实告知；多源冲突 → 并列展示；新发现的权威内容按「模式三」沉淀回 golden（默认待核对），核对后晋升 ✅ 金标准。
7. **多源核对 + 术语记忆回流**：同一条款多份官方副本须确定性比对（reconcile.py），分歧**标 ⚠️ 并列展示，绝不静默采纳或臆测填补**；字符级损坏（如「大千」→「大于」）只能由**人工核对确认**后用 `term_memory.py add` 沉淀进 skill 记忆，机器不得自作主张改字。记忆仅作自动修正线索，抽取时仍标红供人复核。

## 输出模板（固定格式）
```
【文档名称及标识】中华人民共和国消防法（或 GB 55037-2022《建筑防火通用规范》）
【文档类型 / 效力层级】法律 / 行政法规 / 部门规章(部令) / 国家标准(全文强制) / 行业标准
【条款编号】第 X 条（或 第 7.1.2 条）
【条款原文】（逐字摘录，不转述）
【适用条件 / 例外】（如适用）
【关联提示】（相关条款、新老替代关系、上下位法）
【来源】（官方页 URL，优先 catalog.md 登记的权威 URL）
【在线可读性】可在线阅读 / 仅下载PDF / 不提供公开文本（命中例外时显式标注，见 online_readability.md）
【核对状态】✅ 已核对 / ⏳ 待核对（catalog 条目均待官方核对）
【免责声明】以上内容仅供参考，不具有法律效力，以正式出版物及主管部门解释为准。
```

> **🔍 准确性保证**：本 skill 的所有条文输出均来自以下**真实可验证的来源**之一，绝不凭空编造或从非官方渠道拼凑：
> 1. **联网实时抓取**（模式一）：直接从 catalog 登记的政府官网（npc.gov.cn / openstd.samr.gov.cn / gov.cn / 119.gov.cn 等）抓取原文，输出附带完整来源 URL 可即时点验。
> 2. **金标准库 ✅**（模式三确认后）：经用户人工核对无误的条款，标注 `✅ 已核对` + 核对日期 + 来源URL，可直接使用无需二次验证。
> 3. **本地 PDF 抽取**（模式二）：来自用户自行下载到本地的官方 PDF 原文，标注 `⚠️ 待核对`，建议联网复核。
>
> **核心原则：无来源不输出、有来源必附URL、数字单位逐字不改、不确定必标⚠️。**

## 引用参考
- `references/catalog.md`（★ 全部消防法律法规机器可读目录 · 发现层）
- `references/online_readability.md`（📖 在线可读性例外清单：采标/仅下载PDF/不提供公开文本，及模式一例外处理依据）
- `references/规范速查表.md`（核心规范版本真相）
- `references/term_memory.md`（字符纠错记忆 · skill 记忆，见模式四）
- `references/golden/`（★ 金标准库，见其 README；`confirm` 将 ⏳ 晋升为 ✅，`lookup` 直接调用；`seed_hf_sft.md` 为社区校验问答参考·仅交叉核对；`penalty_cases.md` 为罚则/案例参考索引）
- `scripts/import_hf_sft.py`（模式六：从 HF 数据集抽取社区 Q&A seed，带 Apache-2.0 署名）
- `references/archive/`（废止归档库，见其 README）
- `scripts/extract_pdf.py`（模式二可选：本地 PDF 按需检索 + 离线索引 `--build-index`，自动加载 term_memory）
- `scripts/golden.py`（write / lookup / confirm / abolish）
- `scripts/refresh_golden.py`（模式五：定时核验 golden 中 ✅ 条目）
- `scripts/term_memory.py`（模式四：add / list / remove）
- `scripts/reconcile.py`（多源核对：同条款逐字符 diff，标 ⚠️）
- `scripts/feedback.py`（模式七：用户纠错/评分回流，JSONL 写入 `references/golden/feedback.log`）

## 跨平台与跨 agent 适配

### 平台兼容性
| 环境 | 支持模式 | 说明 |
|---|---|---|
| **WorkBuddy（本机）** | 全部 7 模式 | 完整功能：联网+PDF+golden+feedback |
| **Cursor / VSCode + 插件** | 模式一~四、六 | 可调用 scripts/；模式五/七 需手动触发 |
| **纯 CLI / 命令行** | 模式一~四、六 | Python 3.10+；`pip install -r requirements.txt`（可选） |
| **Dify / Coze / 云端 Agent** | 模式一、六（只读） | 无法跑本地脚本；用户本机跑后贴回结果 |
| **macOS / Linux** | 全部 7 模式 | `extract_pdf.py` 的 `~/.firecode_offline/` 自动适配 |
| **Windows** | 全部 7 模式 | 已验证；路径分隔符脚本内自动处理 |

### 依赖矩阵
| 依赖 | 用途 | 必需？ | 安装方式 |
|---|---|---|---|
| 无（零依赖） | 模式一联网检索、catalog 查阅、seed 参考 | ✅ 核心路径无需安装 | — |
| Python 3.10+ | 模式二~五、七 本地脚本 | ⚠️ 仅本地增强需要 | 系统自带或 python.org |
| PyMuPDF (`pymupdf`) | 模式二 PDF 文字层抽取 | 📦 可选 | `pip install pymupdf` |
| PaddleOCR (`paddleocr`) | 模式二 PDF 图片 OCR（文字层损坏时） | 📖 最高精度可选 | `pip install paddleocr` |
| huggingface_hub | 模式六 导入 HF 数据集 | 📖 仅重新生成 seed 时 | `pip install huggingface_hub` |

> **首次使用建议**：直接提问试用模式一（零配置），确认满足需求后再按需安装依赖启用高级功能。

## 版权与数据声明
- 本仓库**不捆绑任何 PDF / 标准原文**，仅维护 `catalog.md`（官方 URL 索引）+ skill 记忆 + 回流缓存。
- 标准 PDF 的再分发受版权与平台条款限制；使用者应凭 `catalog.md` 中的官方 URL **自行下载**到本地私有语料，勿随本 skill 公开分发。
- 法律、法规文本属公开信息，可自由引用，但仍以正式出版物及主管部门解释为准。
- 社区校验问答 `references/golden/seed_hf_sft.md` 改编自 HuggingFace 数据集 `sdzjoy/fire-safety-sft-dataset`（Apache-2.0，作者 sdzjoy）：本 skill 仅再分发其 Q&A 编译成果并署名，GB 标准正文版权仍归住建部 / 市场监管总局；引用前须以官方源核实。

## 不做 / 不支持的边界
以下场景**超出本 skill 职责范围**，会明确告知用户并建议替代路径：
| 用户需求 | 本 skill 响应 | 建议替代 |
|---|---|---|
| "帮我设计消防方案" | ❌ 不提供设计/合规判断 | 咨询有资质的消防设计师/工程师 |
| "这个建筑合规吗？" | ❌ 不出具合规结论/法律意见 | 请具备资质的第三方检测机构 |
| "帮我写消防验收报告" | ❌ 不代写正式文书 | 参考条文后由持证人员撰写 |
| "解释这条法条的立法意图" | ⚠️ 仅提供条文原文，不做法学解释 | 咨询律师或主管部门 |
| "查非消防法规（如环保/劳动法)" | → 引导使用对应领域的 skill 或工具 | — |
| "给我最新全文 PDF" | → 提供 catalog 中的官方下载 URL，不自行分发 | 用户自行下载到本地 |
| "这条条文对不对/帮我判断" | ❌ 不做对错判断或效力裁定 | 以正式出版物及主管部门解释为准 |
| "帮我把这些条文总结成PPT" | ❌ 不代做格式转换/文档生成 | 提供原文后用户自行整理 |
| "预测这个建筑能不能通过消防验收" | ❌ 不做预测/评估/仿真 | 咨询第三方检测机构 |
| "对比两个规范的优劣" | ⚠️ 只并列展示条文差异，不做优劣评价 | 由专业人士结合项目情况判断 |

## 常见问题解答（FAQ · 故障排查 · 高频问题汇总）
> **这是本 skill 的唯一 FAQ 总汇。** 所有脚本均已内置**中文友好异常提示**——出错时会告诉您「可能的原因 + 建议下一步」，不再显示技术性 traceback。
>
> 📍 **从 Quick Start 的「高频常见问题 Top 8」跳转过来的读者：** 下表是完整版，覆盖所有已知问题。

### 基础使用类
| # | 现象 | 原因 | 解决方案 |
|---|---|---|---|
| 1 | 联网抓取不到条文 | 该标准属「采标/仅下载PDF」例外 | 查 `online_readability.md`；按 catalog URL 自行下载 PDF 后用模式二 |
| 2 | `extract_pdf.py` 报「缺少 PDF 读取组件」 | 未安装 PyMuPDF | 屏幕会显示**完整安装步骤**（含 Python 安装指引）；快捷命令：`pip install pymupdf` |
| 3 | `extract_pdf.py` 报「找不到文件」 | PDF 路径错误或文件不存在 | 脚本会**自动列出当前目录的 PDF 文件**供选择；建议用绝对路径 |
| 4 | `extract_pdf.py` 报「无法读取这个 PDF」 | 文件损坏 / 加密 / 非标准格式 | 重新从官方下载；检查是否是扫描版（需要 OCR）；加密 PDF 不支持 |

### 数据质量类
| # | 现象 | 原因 | 解决方案 |
|---|---|---|---|
| 5 | PDF 抽取出乱码（"大千"/"㎡"缺失） | 文字层损坏（子集化字体错乱） | 屏幕提示三种方案：(a) `pip install paddleocr` 装 OCR (b) 换文字版 PDF (c) 用模式一联网代替 |
| 6 | `golden.py lookup` 命中但内容过时 | 金标准未刷新 | 运行 `refresh_golden.py` 或手动走模式一联网核验 |
| 7 | HF seed 导入失败 / 超时 | 无法访问 HuggingFace | 检查网络；或用 `--cache-dir` 指定已有缓存目录；或使用代理 |

### 平台与发布类
| # | 现象 | 原因 | 解决方案 |
|---|---|---|---|
| 8 | SkillHub 上传报"不允许的文件类型" | 含 `.gitignore` / `__pycache__` / 二进制文件 | 删除即可；纯文本文件（`.md`/`.py`/`.txt`/`LICENSE`）均受支持 |
| 9 | 反馈未生效 / feedback.log 找不到 | 首次使用无反馈日志 | 正常——首次 `feedback.py add` 会自动创建 |

### 📖 高频问题详解（逐步操作版）

> 下表对 Top 3 高频问题给出**可以照着做的分步指南**，解决"知道方向但不知道具体怎么操作"的情况。

<details>
<summary><b>Q1: 联网抓取不到条文 · 逐步排查</b></summary>

1. **先查例外清单** — 打开 `references/online_readability.md`，确认该标准是否属于「采标/仅下载PDF」（多为采用 ISO/IEC 国际标准的 GB/T，无公开在线阅读）
2. **是例外** → 凭 `catalog.md` 登记的官方 URL **自行下载 PDF**，走模式二抽取条文
3. **不在例外清单** → 等待 30 秒后重试（agent 会自动切换备用官方域名）
4. **仍失败** → 手动访问 catalog.md 中该标准的官方 URL，确认网页是否可访问；若页面改版，反馈给社区

</details>

<details>
<summary><b>Q2: "缺少 PDF 读取组件" / Python 依赖缺失 · 分步安装</b></summary>

1. 确认 Python ≥ 3.10：终端输入 `python --version`；低于 3.10 则先升级
2. `pip install pymupdf`（核心组件，约 30 秒）
3. 若 PDF 文字层损坏需要 OCR：`pip install paddleocr`（较大，约需 10 分钟，按需安装）
4. 重试：`python scripts/extract_pdf.py --pdf <你的文件> --query <条款号>`

</details>

<details>
<summary><b>Q3: 没网 / 网络不稳定 · 分场景操作</b></summary>

1. **有过查询记录** → `python scripts/golden.py lookup --std <规范> --clause <条款>`（之前核对过的 ✅ 可直接用）
2. **有 PDF 且建了离线索引** → `python scripts/extract_pdf.py --query <条款号>`（结果标 ⚠️ 待核对）
3. **有 PDF 但未建索引** → 先执行 `python scripts/extract_pdf.py --build-index --corpus <PDF目录>`，再查
4. **什么都没有** → 记录 catalog.md 中该标准的官方 URL，联网后补查；结果**必须**回官方源复核后才能晋升 ✅

> ⚠️ 离线抽取的结果一律标注「待核对」，联网后**务必**回 openstd/gov.cn 官方源复核。

</details>

<details>
<summary><b>Q4: PDF 抽取出乱码（如"大千"应是"大于"）· 三条路</b></summary>

1. **换文字版 PDF**（最优解）— 重新去 openstd.samr.gov.cn 下载正式版本，文字层通常不会损坏
2. **装 OCR**（最慢但最准）— `pip install paddleocr`（约 10 分钟下载），然后 `extract_pdf.py` 自动切到 OCR 路径
3. **联网代替**（最快）— 直接走模式一联网检索，避开 PDF 抽取的乱码坑

> 如果乱码反复出现且确认是 PDF 本身问题（不是抽取 bug），用 `feedback.py add` 报告源文件问题。

</details>

<details>
<summary><b>Q5: 上传 SkillHub 报错"不允许的文件类型"· 清理清单</b></summary>

1. 删除 `.gitignore`（SkillHub 不接受）—— `rm .gitignore`
2. 删除 `__pycache__/` 目录（Python 编译缓存）—— `find . -type d -name __pycache__ -exec rm -rf {} +`
3. 删除任何非 `.md` / `.py` / `.txt` / `LICENSE` 的文件（特别是 `.pdf` / `.pyc` / `.zip`）
4. 重新打包并上传

> SkillHub 只接受纯文本文件，**任何二进制**（包括标准 PDF）都不能随 skill 一起发布。

</details>

<details>
<summary><b>Q6: 这条结果能直接用在正式场合吗？· 看【核对状态】</b></summary>

| 状态 | 含义 | 能不能直接用 |
|---|---|---|
| ✅ 已核对 | 用户人工确认过或金标准库收录 | ✅ 可直接引用（仍是参考，非法律意见） |
| ⏳ 待核对 | 联网新抓的或刚 PDF 抽取的 | ⚠️ 需先人工或联网复核 |
| ⚠️ 待官方核对 | catalog 默认状态 | ⚠️ 需自行访问来源 URL 核对 |

**绝不能**把 ⚠️ 当 ✅ 用。正式场合引用前必须先确认核对状态 ≥ ⏳。

</details>

<details>
<summary><b>Q7: 发现答错了 / 想打 1-5 分 · 反馈闭环</b></summary>

**纠错**（指明错在哪）：
```bash
python scripts/feedback.py add \
  --anchor "GB 55037 第 3.2.1 条" \
  --type correct \
  --content "原文应该是 X，结果错引为 Y"
```

**评分**（1-5 分，反映可信度）：
```bash
python scripts/feedback.py add \
  --anchor "GB 55037 第 3.2.1 条" \
  --type rating \
  --score 4 \
  --content "数字对，但缺少适用条件说明"
```

> 反馈**只入复核队列**，机器不自动改写金标准。提交后 `feedback.py list --pending` 跟踪状态。

</details>

<details>
<summary><b>Q8: "能帮我判断建筑合规吗？"· 一句话答</b></summary>

**答：不能。** 本 skill 只提供条文检索与摘录，**不**出具合规结论 / 法律意见。判断"是否合规"需要：

- 现场勘查
- 图纸核对
- 检测机构出具报告

> 建议：把您需要的"条文"问清楚（哪些是适用条款、罚款区间、技术要求等），然后把这些条文交给有资质的第三方检测机构或消防工程师，由他们结合实际情况判断。

</details>

#### Q10: 我不知道该问什么 / 怎么问（提问速查）

直接用以下任意句式：

| 想问 | 这样说 |
|---|---|
| 查规范条文 | "GB 55037 疏散宽度怎么规定" |
| 查罚多少钱 | "消防法里堵塞安全出口罚多少" |
| 查是否有效 | "GB 50016-2014 还有效吗" |
| 查是强条吗 | "这个规范是强条吗" |
| 查案例 | "有没有堵塞疏散通道被罚款的案例" |
| 给 PDF 查 | "帮我看这个 PDF 第 5.3 条" |

> 记住口诀：**法规名 + 关键词 = 直接问**（不需要选模式、不需要配置）。

### ⚡ 网络稳定性保障（运行可靠性专项）
> 本节解决 **"网络不稳定时能不能用 / 怎么保证稳定输出"** 问题。三级降级策略：

| 网络状态 | agent 应怎么做 | 输出标记 | 用户看到什么 |
|---|---|---|---|
| **✅ 联网正常** | 模式一直连 openstd/gov 官方源 → 抓原文 → 输出 | ⚠️/✅/⏳ 正常 | 完整条文 + 来源URL + 核对状态 |
| **⚠️ 联网超时/失败（首次）** | **自动重试 1 次**（换一个官方域名，如 openstd 失败试 gov.cn） | — | 用户无感知，agent 静默重试 |
| **⚠️ 联网仍然失败（二次）** | **降级到本地**：(a) 查 golden 有无 ✅ 条目 → (b) 查 `~/.firecode_offline/` 离线索引 → (c) 提示用户下载 PDF 用模式二 | **🔴 降级标注** | 明确告知：「当前联网不可用，以下来自本地缓存/PDF抽取，**联网后请重新核实**」 |
| **❌ 完全离线（无网+无本地）** | 告知用户当前无法完成检索，提供：(a) catalog 中该标准的官方 URL 让用户自行查看 (b) 建议联网后重试 | **⛔ 无法完成** | 「抱歉，该条文需要联网获取且本地无缓存。您可以先访问 [URL] 查看，联网后我会立即为您检索。」 |

**铁律**：降级输出的内容**必须明确标注来源和可靠级别**，绝不让用户误以为是从官方实时获取的。

### 🔍 未预料情况处理（异常处理增强）
> 以下是脚本和 agent 可能遇到但上面表格未覆盖的**边缘场景**及其标准应对：

| 异常场景 | 你会看到什么 | 怎么办 |
|---|---|---|
| **DNS 解析失败**（无法连接任何域名） | 脚本报「连接超时」或「名称解析失败」 | → 判定为网络故障 → 走上面的「降级到本地」路径 |
| **SSL 证书错误**（官方域名证书过期/不信任） | 脚本报 SSL 相关错误 | → 换另一个官方域名重试（如 samr.gov.cn 换 openstd.samr.gov.cn）；仍失败则降级本地 |
| **被限速/封禁 IP**（短时间内请求过多） | 返回 429/403 错误 | → 等待 30 秒后重试；告知用户「官方源暂时限流，稍后自动重试」 |
| **返回内容为空/页面结构变化**（网站改版） | 抓到的页面没有目标条文 | → 尝试换关键词搜索；仍失败 → 告知用户「官网页面可能有调整，建议您直接访问 [URL] 手动查阅」 |
| **PDF 文件过大（>200MB）**导致内存不足 | 脚本报 MemoryError/OOM | → 建议只抽取需要的页面范围（如有分页功能）；或使用更低 DPI 渲染 |
| **Python 版本低于 3.10** | 脚本报语法错误 | → 升级 Python 到 3.10+；或在提示中给出安装链接 |
| **中文路径/文件名编码问题**（Windows 特有） | 找不到文件或乱码 | → 脚本已内部处理 UTF-8 编码；如仍有问题，将文件移至纯英文路径后重试 |
| **任何其他未列出的报错** | 技术性错误信息 | → 所有脚本均有 `_safe_main()` 兜底包装：会显示「问题类型 + 详情 + 三步建议」；如仍看不懂，将完整报错发给我们分析 |

## ⚠️ 避坑指南（反模式 · 常见错误 · 注意事项总汇）
> **本章节是唯一权威的「不要这么做」汇总。** 如果你遇到问题或不确定某个功能该怎么用，先查这里。
> 每条包含：❌ 错误做法 → ⚠️ 后果 → ✅ 正确做法。按功能模块分组，可直接搜索关键词。

> **🗂️ 章节索引**（按场景直达）：
>
> | 章节 | 解决什么 | 看这一篇的场景 |
> |---|---|---|
> | 一、模式一（联网检索）避坑 | 别乱引、别改数字、别凭记忆答条文 | 经常联网查条文 / 罚则 |
> | 二、模式二（PDF抽取）避坑 | 别把 PDF 抽取当金标准、别存进仓库 | 手里有官方 PDF 要查 |
> | 三、模式三 / golden（知识回流）避坑 | 别覆盖 ✅、别乱写、别自动改 | 想把核对过的条文沉淀 |
> | 四、模式六（HF-SFT 社区问答）避坑 | 别把社区问答当金标准 | 引用 seed 数据时 |
> | 五、模式七（纠错反馈）避坑 | 收到反馈别自动改 golden | 提交/处理纠错时 |
> | 六、通用反模式（跨模式） | 别改单位、别漏免责声明 | 任何场景 |
> | 七、反面教材（3 个真实场景对比） | 看一遍就懂为什么不能那样 | 想用最快速度了解反模式 |
> | 八、注意事项 Checklist | 发布前/排查时逐项勾 | 准备发布 / 数据健康度核查 |
> | 九、问题速查索引 | 按症状定位章节 | 不知道问题出在哪 |
>
> 💡 **没空细看**：直接读 **七、反面教材**，3 个真实场景看完就懂 80% 的坑。

### 一、模式一（联网检索）避坑

| ❌ 错误做法 | ⚠️ 后果 | ✅ 正确做法 |
|---|---|---|
| 用户问"GB 55037 疏散宽度"，agent 凭记忆直接回答条文数字 | **编造条款数字**（法律条文错一字含义全变），且无法溯源 | 必须先查 `catalog.md` 定位 → 联网 openstd 官方源抓取原文 → 逐字输出 |
| 联网搜到非官方来源（知乎/百度文库/论坛）就引用 | 引用可能是过时/篡改/错误的版本 | 只用白名单域名（npc.gov.cn/openstd.samr.gov.cn/gov.cn 等）+ catalog 登记的官方 URL |
| 该标准属"采标/仅下载PDF"例外，仍强行在线抓取 | 抓不到或抓到盗版文本，版权风险 | 先查 `online_readability.md`；若在列 → 走模式二（用户本地 PDF）或告知无法获取 |
| 抓到条文后改写/概括/推算关键数字（如把 4.0m 写成"约4米"） | **精准性铁律违规**，用户基于错误数字做合规决策可能违法 | 逐字摘录原文，数字/单位/标点一个不改 |
| 输出时缺少「文档标识+条款编号+版本号」任一项 | 用户无法定位出处验证真伪，失去检索意义 | 严格套用输出模板，缺一则标「待核实」 |

### 二、模式二（PDF抽取）避坑

| ❌ 错误做法 | ⚠️ 后果 | ✅ 正确做法 |
|---|---|---|
| 把从 PDF 抽取的条文直接当 ✅ 金标准输出 | PDF 可能有 OCR 错误/版本过时/非最终版，误导用户 | 离线结果一律标 **⚠️ 待核对**；联网后必须回官方源复核 |
| 把标准 PDF 或离线索引文件提交进 skill 仓库 / 上传 SkillHub | **版权侵权风险**（标准 PDF 受版权保护）+ 仓库体积暴增 | 离线索引默认存 `~/.firecode_offline/`（用户主目录，仓库之外）；绝不随 skill 分发 |
| 用户给了一个来路不明的 PDF（如网盘下载版），不做任何校验就抽取引用 | 可能用了伪造/篡改/旧版的假条文 | 提示用户确认 PDF 来源是否为官方渠道（openstd/mohurd/正式出版物扫描件） |
| 文字层损坏出现乱码时，凭上下文猜测补全缺失文字 | 猜错一个字 = 给出错误法律依据，后果严重 | 标红提示人工核对；已确认的错字用 `term_memory.py add` 沉淀后再静默修正 |

### 三、模式三 / golden（知识回流）避坑

| ❌ 错误做法 | ⚠️ 后果 | ✅ 正确做法 |
|---|---|---|
| 来源不是白名单域，仍写入 golden | 可能写入错误/恶意内容污染金标准库 | 写回闸门：必须是白名单域 + 能定位 规范编号+条款号+版本，否则丢弃 |
| 覆盖已有的 ✅ 金标准条目 | 把人工确认过的正确内容替换成未核对的版本 | **永不覆盖 ✅ 条目**；新版本追加为 ⏳ 候选，由用户决定 |
| 看到 ⚠️ 新条款就直接当准确信息用于正式场合 | 新条款未经核实，可能有误 | ⚠️ 仅首次标注；用户 `confirm` 后才晋升 ✅；晋升前始终标注待核对 |
| 自动模式下不告知用户就批量写回 golden | 用户不知道本地库被修改了，失去信任 | 即使 auto 模式也要**显式告知**用户写了什么、几条、状态如何 |

### 四、模式六（HF-SFT 社区问答）避坑

| ❌ 错误做法 | ⚠️ 后果 | ✅ 正确做法 |
|---|---|---|
| 直接把 seed_hf_sft.md 的回答当 ✅ 输出给用户 | 数据集本身可能有错误（虽经两轮校验但非官方），且覆盖仅 5 部 GB | seed **仅作交叉参考/启发**；输出前必须走模式一在 openstd 官方源核实 |
| 引用 seed 中的数值而不标注来源 | 用户以为是官方条文，实际是社区编译 | 每次引用都标注「出自社区数据集 sdzjoy/fire-safety-sft-dataset (Apache-2.0)，以官方源为准」 |
| 认为 seed 能覆盖所有消防法规 | 实际只覆盖 GB 50016/50067/51251/55036/55037 五部 | XF 行标、地方法规、部门规章均不在 seed 中；这些必须走模式一联网 |

### 五、模式七（纠错反馈）避坑

| ❌ 错误做法 | ⚠️ 后果 | ✅ 正确做法 |
|---|---|---|
| 收到用户纠错后，不经核实自动改写 golden 内容 | 恶意/错误的纠错会污染金标准库 | 纠错**只入复核队列**（feedback.log）；必须经模式一联网核实后才修正 |
| 用户打低分（1-2分）但不说明原因，直接删除该条目 | 可能是用户的误解而非条目错误 | 低分条目优先复核：检查表述/出处/时效性，优化后再反馈 |

### 六、通用反模式（跨模式）

| ❌ 错误做法 | ⚠️ 后果 | ✅ 正确做法 |
|---|---|---|
| 对关键数字做四舍五入或单位换算（如 1.2m → "约1米"） | 合规场景下失之毫厘差之千里，可能导致不合规设计 | **绝对不改写数字和单位**；原文是什么就输出什么 |
| 用户问"这个建筑合规吗？"，给出"基本合规"之类判断 | **越权**——本 skill 不出具法律意见/合规结论 | 明确拒绝，引导咨询有资质的第三方检测机构；同时可提供相关条文供参考 |
| 多源冲突时静默选择其中一方 | 选错了就是误导，选对了也无法证明 | 并列展示多源差异，**标 ⚠️**，交用户/人工裁决 |
| 发现某标准被废止，不更新 catalog 和 golden | 继续引用废止标准 = 给出无效法律依据 | 立即触发模式三-b 废止清理流程：abolish → 归档 → 更新速查表状态 |
| 输出时不带免责声明 | 用户可能将 AI 回答当作具有法律效力的正式意见 | 每次输出尾部固定附带：「以上内容仅供参考…以正式出版物及主管部门解释为准」 |

### 七、反面教材：3 个真实场景对比（错 vs 对）

> 把上面那些"❌ 错误做法"翻译成具体可对照的真实场景——看一眼就懂为什么不能那样做。

#### 场景 1：用户问"消防通道宽度够不够"

| ❌ 错误响应（凭记忆） | ✅ 正确响应（先定位再检索） |
|---|---|
| "根据 GB 50016，厂房疏散走道净宽度不应小于 1.4m，应该够了吧。" | 1. 询问厂房火灾危险类别、层数、面积等关键信息<br>2. 查 `catalog.md` 定位 **GB 55037** 第 3.2 节（GB 55037 是全文强制规范，GB 50016 已不再承载强条）<br>3. 联网 openstd 抓原文 → **逐字摘录**<br>4. 输出模板 + 「以上为条文检索结果，不构成合规结论」 |

**为什么不能凭记忆**：法律条文可能因修订版不同而数字不同，错 1mm 可能导致项目验收失败。

#### 场景 2：用户问"消防法里堵塞安全出口罚多少"

| ❌ 错误响应（搜到非官方源） | ✅ 正确响应（白名单源） |
|---|---|
| "根据某律师网站的整理，罚款在 5000-50000 元之间。" | 1. 查 `catalog.md` 定位 → 消防法 → 第六十条<br>2. 联网 **npc.gov.cn** 全国人大网抓原文<br>3. **逐字摘录**单位罚款 5000-50000 元、个人警告或 500 元以下<br>4. 附 `https://npc.gov.cn/...` 原文链接 + ✅ 核对状态 |

**为什么不能引用非官方源**：律师网/百度文库可能转载旧版或摘录失真；只有人大网原文具有法律效力。

#### 场景 3：用户给了一个 PDF 说"帮我看 5.3 条"

| ❌ 错误响应（直接抽取当 ✅ 用） | ✅ 正确响应（抽取 + 复核 + 标 ⚠️） |
|---|---|
| 抽取后直接输出条文，无任何来源标注。 | 1. 确认 PDF 来源（官方/扫描件/网盘？）<br>2. `extract_pdf.py --pdf <文件> --query "5.3"`<br>3. 输出时明确标 **⚠️ 待核对**（PDF 抽取可能 OCR 错字）<br>4. 建议用户联网后回 `openstd.samr.gov.cn` 复核 |

**为什么必须标 ⚠️**：PDF 文字层损坏时"大于"会变"大千"，一字之差法律含义就反了；离线结果永远不能当 ✅ 用。

#### 场景 4：原文"不小于 4.0m"，agent 改成了"约 4 米"

| ❌ 错误响应（改写关键数字） | ✅ 正确响应（逐字摘录） |
|---|---|
| "消防车道净宽不应小于约 4 米。" | "消防车道净宽不应小于 **4.0m**。"（原文逐字，0 都不省） |

**为什么不能"差不多"**：合规审查时监理会拿原规范对数字，4m 和 4.0m 在文字表述上等价，但在 PDF 摘录、OCR 校对、跨规范交叉引用时少一个 0 就是完全不同的数字。"约 4 米"让用户无法验证，**等于把风险悄悄推回用户身上**。

> 一句话口诀：**原文是什么就输出什么**——0 不省、单位不改、标点不动。

#### 场景 5：用户问"我们这栋楼消防合规吗？"

| ❌ 错误响应（越权判断） | ✅ 正确响应（拒绝 + 引导） |
|---|---|
| "基本合规，但建议您再确认下疏散门宽度是否满足要求。" | 1. 明确告知：**本 skill 不能出具合规结论**<br>2. 列出**用户能问到、可以回答的**部分（如适用条款、罚款区间、技术要求）<br>3. 引导用户咨询有资质的第三方检测机构或消防工程师 |

**为什么不能答"基本合规"**：四个字包含 3 类风险——① 把"安全"和"合规"混为一谈；② 没有现场勘查却给结论；③ 用户拿着 AI 回答去走验收程序，出了事 AI 不能背锅。**说"不能"比硬答"是"更负责任。**

#### 场景 6：用户问"消防车道净宽不应小于多少？"

| ❌ 错误响应（漏免责声明） | ✅ 正确响应（带 ✅ 核对的完整输出） |
|---|---|
| "4.0m。来源 GB 50016。" | 1. 抓取条文原文 → 标注来源 URL（`https://openstd.samr.gov.cn/...`）<br>2. 列出【核对状态】✅ 已核对 或 ⚠️ 待核对<br>3. 末尾附固定免责：**"以上内容仅供参考，不具有法律效力，以正式出版物及主管部门解释为准。"** |

**为什么必须带免责声明**：法律条文本身是公开信息，但 AI 的"摘录 + 应用到具体场景"是二次创作，存在解读偏差风险。免责声明是把这层风险**显式交还给用户**——不是"不负责"，而是"我尽力了，但最终拍板权在你"。

> 一句话口诀：**每次输出都带来源 + 核对状态 + 免责声明三件套**。

### 八、注意事项总汇（One-Page Checklist）

> 发布前 / 使用前 / 排查问题时，逐项勾选：

#### agent 行为纪律（每条查询必检）
- [ ] 是否从白名单域 / catalog 官方 URL 获取？→ 否则不引用
- [ ] 条文是否逐字摘录？（数字/单位/标点未改写）→ 否则重做
- [ ] 输出是否含「文档标识 + 条款编号 + 版本/施行日期」？→ 缺一则标待核实
- [ ] 是否带了免责声明？→ 漏加则补充
- [ ] 离线/seed 结果是否标了 ⚠️ 或 ⏳？（绝不当 ✅）→ 否则降级标记

#### 版权与分发纪律（发布/上传前必检）
- [ ] 仓库里有没有 .pdf 文件？→ 有则立即删除（不捆绑任何标准 PDF）
- [ ] 有没有 `__pycache__/` 目录？→ 有则删除（SkillHub 不接受二进制）
- [ ] 有没有 `.gitignore`？→ 有则删除（SkillHub 不接受此文件类型）
- [ ] `~/.firecode_offline/` 的内容有没有被意外提交？→ 检查 git status
- [ ] seed_hf_sft.md 头部是否有 Apache-2.0 署名？→ 缺失则补全

#### 数据健康度（定期维护）
- [ ] 上次运行 `refresh_golden.py` 是什么时候？→ 建议每周一次
- [ ] feedback.log 有多少待处理项？→ 用 `feedback.py list --pending` 查看
- [ ] golden 中有多少 ✅ vs ⏳？→ 用 `golden.py lookup` 抽查
- [ ] catalog.md 中是否有状态为"有效"但实际已废止的标准？→ 模式五刷新时可发现

### 九、问题速查索引（按症状快速定位）

| 你遇到的问题 / 疑问 | → 请看哪个章节 |
|---|---|
| "我想知道 XX 怎么规定的" | → **快速上手** → 模式一（联网检索） |
| "我已有 PDF，想查里面的条文" | → **模式二**（PDF 抽取） |
| "这条对不对？能不能直接用？" | → **金标准信任模型**（看 ✅/⏳/⚠️ 含义） |
| "这条答错了 / 我想打分" | → **模式七**（纠错回流） |
| "两个地方说的不一样" | → **多源核对**（reconcile.py） |
| "这个标准还有效吗？" | → **模式三-b**（废止清理）+ **规范速查表.md** |
| "XX 行为罚多少？" | → **penalty_cases.md**（罚则查询） |
| "脚本报错了 / 看不懂提示" | → **常见问题解答（FAQ）** |
| "这个功能我不能用 / 不该用吗？" | → **本章 避坑指南**（对应功能的 ❌ 反模式行） |
| "我要上传到 SkillHub" | → **本章 注意事项总汇 · 版权与分发纪律** |
| "我想贡献/改进这个 skill" | → **模式七**（feedback.py）+ **模式三**（知识回流） |

## 边界声明
本 skill 是检索与排版工具，**不提供合规判断、不出具法律意见**。最终以正式出版物及主管部门解释为准。

