对"待体检的企业标准"(含图、表、文字的多模态文档)完成两条体检线:
- 指标体检:抽取正文/表格中的技术指标,结构化入库。
- 规范性体检:对照 GB/T 1.1-2020 等元标准,检查结构/编号/引用/术语/图表标题等规范性。
- 架构:单 Agent + Skills(确定性能力封装为 Skill,LLM 仅做语义兜底)。
- 多模态识别:本地 GPU(RTX 3050)+ PaddleOCR PP-StructureV3,彻底解决中文乱码 PDF(CID/Identity-H 字体编码),完整提取图/表/文字,免 API 额度、数据不出域。
- 视觉 API 版保留为兜底引擎(
--engine vision),额度到位即可切换。
run_all.py(编排,单 Agent)
│
├─ skills/parse_standard 解析 → intermediate.json(章节树+表+图清单+引用)
│ ├─ paddle_engine.py 本地 GPU 引擎(PP-StructureV3,默认)
│ ├─ prompts.py 视觉 API 引擎的 prompt 库
│ └─ parse.py 双引擎入口(--engine paddle|vision)
├─ skills/extract_indicators 指标抽取(表格+正文,确定性正则)
├─ skills/store_indicators 指标入库 SQLite(+查询)
├─ skills/check_compliance 规范性体检(对照 GB/T 1.1-2020,11 条规则)
└─ scripts/
├─ llm_client.py 公共视觉/文本 LLM 客户端(OpenAI 兼容)
├─ pdf_render.py PDF→PNG 渲染
└─ run_all.py 一键全流程 → 体检报告.md
所有 Skill 共享唯一数据契约:output/<doc_id>/intermediate.json(见 schema.md)。
这是未来演进到"多智能体"时的关键解耦点——拆分 Agent 无需改动数据流。
# 首次:双击 安装环境.bat(自动创建 .venv 并安装 GPU 依赖)
# 之后命令行请先激活虚拟环境,或直接双击 体检标准.bat(已内置走 .venv)
.venv\Scripts\activate
# 一键全流程(解析→指标抽取+入库→规范性体检→报告)
python scripts/run_all.py <标准.pdf> --doc-id <编号> --pages 1-30
# 用真实样本前先配好 API(视觉引擎需要,或用默认本地paddle引擎无需)
copy scripts\.env.example scripts\.env # 编辑填 Key(仅 vision 引擎需要)
# 支持的第②段路径:提取、审核、生成准入证据,并仅在获准时入库
python scripts/stage2_extract.py output/<id> --engine regex
# 原始提取仅生成 indicators.json;它不审核、不生成准入证据,也不能直接写入 SQLite
python skills/parse_standard/parse.py <pdf> --engine paddle # 解析
python skills/extract_indicators/extract.py output/<id>/intermediate.json
python skills/check_compliance/check.py output/<id>/intermediate.json
# 查询指标库
python skills/store_indicators/store.py --list --doc-id <id>
python skills/store_indicators/store.py --search 抗拉- 默认使用
regex提取;显式选择 LLM 时,结果仍是候选项,必须needs_review,不会自动入库。 - 未执行提取审核时不得入库。
- 入库必须具有与当前指标结果相匹配的、
accepted的准入证据。
- 解析引擎:PaddleOCR PP-StructureV3(GPU,paddlepaddle-gpu 3.0.0 / CUDA 11.8),针对 4GB 显存精简(关公式/图表模型)。
- PDF 渲染:PyMuPDF(180dpi)。
- 视觉 API 兜底:OpenAI 兼容协议(智谱 GLM-4.5V / 通义 / OpenAI)。
- 入库:SQLite。
- 规范性体检:确定性规则(结构/编号/引用/图表/格式 11 条)。
- 步骤0 环境 + 目录
- 步骤1 parse_standard(本地GPU引擎,中文乱码PDF验证通过)
- 步骤2 指标抽取 + 入库
- 步骤3 规范性体检(11条规则)
- 步骤4 Agent 串联 + 体检报告(端到端通过)
- 优化:水印双层处理(图像二值化预处理 + 跨页检测打标签)、续表合并、表注清洗、标题截断标记、识别文本.md导出
- 步骤5 真实样本验证(10份企业标准,跨食品/涂料/农药/饲料/电缆/轮胎多行业,指标库202条)
- 校准(真实样本驱动):①指标名/单位分离(±/斜杠单位) ②误抽过滤(动词描述) ③C5严重度调整 ④横向指标表支持 ⑤范围正则收紧(排除型号编号误抽)
| 维度 | 表现 |
|---|---|
| 多模态识别 | 10/10 成功(含水印干扰场景,二值化预处理有效) |
| 指标抽取 | 9/10 抽到指标(4-118条),1份为规格类无数值指标(合理) |
| 规范性体检 | 7/10 fail=0,3/10 各1个 fail(OCR个别标题/前言丢失) |
| 水印检测 | 10/10 检出真实水印/页眉(打标签不删除) |
| 行业泛化 | 食品/涂料/农药/饲料/电缆/轮胎 均覆盖 |
- 微生物"采样方案限量"式指标(n/c/m/M 结构)未抽——需专门解析器。
- 小数点 OCR 偶有丢失(如
0.050→0 000)——二值化阈值或 OCR 后处理可改善。 - 横向指标表单位分离不完美(
mg/kg偶被切为kg)——指标名/值/运算符正确,单位待优化。 - 电缆类大量规格参数表偶有过度抽取(型号/标称值),范围正则收紧后大幅改善但未完全消除。
- 定性描述性条款偶被误抽为指标——需判断指标值是否为纯数值。
- 表题归属偶有错位——PP-Structure 版面分割限制。
- 个别标题 OCR 丢失导致 C5 父级缺失(已降为 warn)/ C1 前言缺失。
- 规格类标准(如轮胎尺寸表)无数值指标,0 条为合理结果,可在报告标注。
- 稳定后按"解析/规范性/指标/入库"拆成多 Agent,中间 JSON 契约使拆分近乎零成本。
- 扫描件走同一视觉通路(PP-StructureV3 天然支持)。
- 引入 LLM 语义兜底:对含糊指标表述("应符合X要求")用大模型补抽。