Skip to content

Repository files navigation

企业标准多模态体检系统(原型 / MVP)

对"待体检的企业标准"(含图、表、文字的多模态文档)完成两条体检线:

  1. 指标体检:抽取正文/表格中的技术指标,结构化入库。
  2. 规范性体检:对照 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/10 成功(含水印干扰场景,二值化预处理有效)
指标抽取 9/10 抽到指标(4-118条),1份为规格类无数值指标(合理)
规范性体检 7/10 fail=0,3/10 各1个 fail(OCR个别标题/前言丢失)
水印检测 10/10 检出真实水印/页眉(打标签不删除)
行业泛化 食品/涂料/农药/饲料/电缆/轮胎 均覆盖

已知边界 case(后续迭代)

  • 微生物"采样方案限量"式指标(n/c/m/M 结构)未抽——需专门解析器。
  • 小数点 OCR 偶有丢失(如 0.0500 000)——二值化阈值或 OCR 后处理可改善。
  • 横向指标表单位分离不完美(mg/kg 偶被切为 kg)——指标名/值/运算符正确,单位待优化。
  • 电缆类大量规格参数表偶有过度抽取(型号/标称值),范围正则收紧后大幅改善但未完全消除。
  • 定性描述性条款偶被误抽为指标——需判断指标值是否为纯数值。
  • 表题归属偶有错位——PP-Structure 版面分割限制。
  • 个别标题 OCR 丢失导致 C5 父级缺失(已降为 warn)/ C1 前言缺失。
  • 规格类标准(如轮胎尺寸表)无数值指标,0 条为合理结果,可在报告标注。

演进路径(已预留)

  • 稳定后按"解析/规范性/指标/入库"拆成多 Agent,中间 JSON 契约使拆分近乎零成本。
  • 扫描件走同一视觉通路(PP-StructureV3 天然支持)。
  • 引入 LLM 语义兜底:对含糊指标表述("应符合X要求")用大模型补抽。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages