水利工程强制性条文符合性检查(可复用流程)
一、触发条件
用户上传任意格式的工程/规范文档(PDF / Word(.doc/.docx) / TXT / 图片(JPG/PNG等) / 扫描件 / 其他可解析文本),并要求:
- "对照 2020 版强制性条文 / 水利规范知识库,列出涉及的强制性条文"
- "判断是否符合,不符合给出补充工作"
- "以 EXCEL 表格形式输出"
核心交付物:《强制性条文符合性检查表》EXCEL(三工作表:说明与项目概况 / 符合性检查表 / 需补充工作清单)。
> 输入格式不限;无文本层(图片型 PDF、纯图片、扫描件)自动走 OCR,有文本层(Word/TXT/可解析PDF)直接提取,统一进入步骤 2。
二、前置条件
- ima-mcp 连接器必须已连接(本 skill 依赖 IMA「水利规范知识库」中的官方原文)。若未连接,先
workbuddy_request_mcp_connection(servers=["ima-mcp"])。 - Python 运行环境:
C:/Users/公用账户/.workbuddy/binaries/python/versions/3.13.12/python.exe,包装在 venvC:/Users/公用账户/.workbuddy/binaries/python/envs/default。 - 可能需要的 Python 包(按需安装到上述 venv):
pdfplumber(提 PDF 文本)、pymupdf(渲染图片型 PDF)python-docx(读 .docx);老版 .doc 经 IMAfetch_media_content取正文(见步骤 1 / 2)rapidocr-onnxruntime(中文 OCR,纯 onnxruntime,轻量;勿用 cnocr/cnstd,会拉 torch+ultralytics 数 GB)openpyxl(生成 xlsx)
三、关键陷阱(务必先看,踩过坑)
- IMA 库内检索用错工具 = 第一失败点
-search_knowledge_base只能按"知识库名称/描述/创建者"搜,搜不到库内文档内容。
- 正确工具是search_knowledge(参数knowledge_base_id+query),它在指定知识库内搜文档内容。
- 知识库列表:get_knowledge_base_list(个人库)或get_addable_knowledge_base_list(含共享/订阅库)。「水利规范知识库」常是共享/订阅型,ID 形如7314992311316458,不在个人库列表里,需用get_addable_knowledge_base_list或search_knowledge才能触达。
- 定位具体文档:get_knowledge_list(knowledge_base_id + limit,可sort_type="TITLE_SORT_TYPE")取media_id。 fetch_media_content大文件被硬隔离
- 全文超约 11 万字符会落盘到C:\Users\公用账户\.workbuddy\projects\...\tool-results\,且 Read / Grep / Bash 对该目录均被拒。
- 绕行:用 PowerShell 读取([System.IO.File]::ReadAllText+IndexOf/Substring按标准编号截取窗口),再用WriteAllText写回工作区普通目录,最后用 Read 读工作区副本。
- 原文通常是单行(含\n字面量),用IndexOf循环按标准编号(如 "SL 279—2016")截取窗口文本即可。- 图片型 PDF(扫描件/无文本层):
pdfplumber提文本为空 → 用 PyMuPDF(fitz) 渲染 PNG(约 170 DPI)→rapidocr-onnxruntimeOCR。 - 强条数量必须逐条核对官方原文,不要轻信 WebSearch 片段——网页常把"推荐条款"当"强条",会多列(例:SL 677-2014 实际仅 2 条强条,网页可能列 6+ 条;SL 377-2007 实际仅 1 条)。所有判断以 IMA 官方原文黑体条文为准。
四、标准流程(6 步)
步骤 1|识别上传文档内容(格式无关,先判定后提取)
按文件扩展名/类型走对应分支,最终都得到一份可读取的工程文本 ocr_all.txt(或等价文本),再 Read 确认工程参数(等别、建筑物、隧洞洞径/工法、混凝土标号、灌浆方案、穿越不良地质如煤层气/湿陷性黄土等)。
- TXT / 纯文本:直接读取即可。
- Word(.doc / .docx):用
python-docx读 .docx;.doc 老格式(如本知识库那份 "2020版…doc")需经 IMAfetch_media_content取正文(见步骤 2 的 PowerShell 绕行)。本地 .docx 也可直接 Read。 - PDF 有文本层:
pdfplumber提文本;若为空再降级到图片分支。 - PDF 图片型 / 纯图片(JPG、PNG、扫描件):渲染或直接使用图片,再 OCR:
python import fitz, os # 图片型 PDF:逐页渲染;单张图片直接送入 OCR doc = fitz.open(src); n = doc.page_count for i in range(n): if not (doc[i].get_text() or "").strip(): doc[i].get_pixmap(dpi=170).save(f"page_{i+1:02d}.png")
再用rapidocr-onnxruntime对全部 PNG(或图片)做中文 OCR,合并为ocr_all.txt。 - 其他格式:优先尝试转文本(如复制进工作区的 md/html 直接读);实在无法解析时,请用户补充可读取的文字版或截图,不要凭空编造工程参数。
步骤 2|在 IMA 定位「水利工程建设标准强制性条文」最新版
- 用
search_knowledge(knowledge_base_id=水利规范知识库ID, query="水利工程建设标准强制性条文")定位汇编文档;或用get_knowledge_list按标题排序找最新版(标题可能含年份,如"2020版…doc",选最新)。 - 取
media_id,fetch_media_content取全文(用 PowerShell 绕行读取,见陷阱 2)。 - 从文末「标准名称及强制性条文索引」确认强条总数与每项标准的强条条数(2020 版:94 项标准 / 557 条),作为筛选与核对基准。
步骤 3|按文档内容检索"相关的其他规范"强条
- 依据步骤 1 识别出的工程类型/工法,列出相关标准(如引调水→SL 430;PCCP→SL 702;压力钢管→SL 281;长隧洞/TBM→SL 279/SL 378/SL 377;地下工程→SL 642/SL 303;泵站→SL 266;验收→SL 223 等)。
- 这些标准的强条已在步骤 2 的汇编全文中(2020 版汇编含全部 557 条原文),用 PowerShell 按编号抽取对应窗口即可;若某标准不在汇编中,再用
search_knowledge在该知识库检索该标准单独文档并抽取其黑体强条。 - 把每条强条归到四篇之一:工程设计 / 工程施工 / 劳动安全与卫生 / 工程验收。
步骤 4|逐条比对,形成判断
判断取值(驱动 EXCEL 颜色):
- 不符合(需补充)——前置判定项未明确(工程等别/级别/洪水标准)或文档自认未做但属设计应补。
- 不符合(设计缺口)——文档明确"尚未进行"的设计(如穿河埋深/抗浮)。
- 待补充细化——原则已提但缺计算/专篇。
- 施工中应执行——属施工阶段强制要求。
- 验收阶段执行——属验收阶段强制要求。
- 可能涉及需核实——需结合最终参数确认。
步骤 5|生成 EXCEL(数据驱动)
- 把结果整理成
rows.json(结构见templates/rows_example.json): meta:标题/数据来源(注明已对照IMA官方原文)/项目识别结论/对照范围/更正说明/图例/重要提示rows:每行[篇章, 标准, 条款号, 黑体条文内容, 项目涉及内容, 判断, 补充工作]todo:每行[优先级, 关联条文, 需补充工作, 责任阶段]- 运行本 skill 自带脚本:
bash python templates/checklist_builder.py <rows.json> <输出xlsx路径>
脚本自动生成三工作表并套用颜色分级(红=不符需补/深红=设计缺口/黄=待补/绿=施工中/蓝=验收/灰=核实)。
步骤 6|交付与提示
present_files交付 xlsx。- 必须提示:初设/可研深度下部分"不符合"实为"未达施工图深度需补充论证";正式报批/验收前以官方黑体原文逐条复核。
五、复用资产
templates/checklist_builder.py:数据驱动的 EXCEL 生成器(读 rows.json → 三表带格式 xlsx)。templates/rows_example.json:rows.json 字段示例,照此填充即可。
六、常见标准强条条数速查(2020 版,已核实,用于核对是否多/漏列)
- SL 252—2017 等级划分及洪水标准:强条见 3.0.1/4.7.1/5.2.1 等
- SL 279—2016 水工隧洞:仅 5.1.2(1)(2)、9.8.8、10.1.1
- SL 62—2014 水泥灌浆:仅 8.1.1
- SL 677—2014 水工混凝土:仅 3.6.1、10.4.6(无"碱含量 6.0.8"强条)
- SL 377—2007 锚喷支护:仅 9.1.17
- SL 378—2007 地下开挖:共 15 条(含 5.2.2/11.1.1/11.2.8/13.2.6/13.2.7/13.2.10/8.4.2/8.4.11/8.4.12/12.3.7/12.4.5 等)
- SL 430—2008 调水导则 / SL 702—2015 PCCP / SL 281—2003 压力钢管 / SL 642—2013 地下施工组织 / SL 303—2017 施工组织 / SL 223—2008 验收 / SL 266—2014 厂房 等,均应按官方索引条数核对。