Skip to main content

atlisp-dwg-kb

基于本体(Ontology)的 CAD 图纸知识库管理系统。将历史 DWG 图纸转化为可检索、可追溯的知识图谱。

功能

  • DWG 元数据提取: 从 DWG 文件提取图层、块、文字标注等元数据(支持多进程并行、断点续传)
  • OWL 本体: 形式化知识表示 (15类 + 20属性)
  • RDF 三元组存储: rdflib 图存储,规模随图纸量增长
  • 自动推断: 设计演进链、跨专业关联、共享构件
  • SPARQL 查询: 支持自然语言关键词和 SPARQL 查询
  • REST API: FastAPI 服务端 (15+ 端点)
  • Web UI: Gradio 界面 (7 标签页)
  • Neo4j 导出: 可选导出到 Neo4j 图数据库

对设计人员的价值

十年积累的图纸散落在几百个项目目录里,找一张图要翻目录、记文件名、问老同事。本系统把这些 DWG 变成可提问的档案库:

1. 秒级找图,告别翻目录

"列出所有暖通图纸"
"2023 年港达项目有哪些结构图"
"所有节点详图"

按专业(建筑/结构/暖通/电气/给排水)、项目、年份、图纸类型直接筛选,不再依赖个人记忆和目录命名习惯。

2. 版本与审图轮次自动追溯

系统自动识别 _t3、(1)、日期等版本标记,以及"意见/审图/二次意见/答复"等审图轮次关键词,还原每张图的设计演进链:

  • 这个节点大样改过几版?每版属于哪一轮审查?
  • 初版和最终版之间图纸经历了什么过程?

3. 跨专业关联一目了然

自动发现图纸间的坐标/引用关系和共享构件——做专业协调时,快速定位"这张建筑图对应哪些结构图、机电图",减少扯皮和漏配。

4. 标准件与详图复用

识别跨项目重复使用的图块(标准节点、设备图例、大样),新项目直接参考过往做法,不再重复画详图。

5. 团队经验沉淀

历史方案(绿建、人防、消防等专题图纸)从"存在某人电脑里"变成全团队可检索的素材库,人员流动不再带走经验。

定位:它是图纸档案的检索与追溯工具,不替代 CAD——设计、绘图仍在 CAD 中完成,本系统解决"找、查、追、复用"的问题。

安装

# 本地开发(全部依赖)
pip install -e ".[all]"

# 按需选择 extras
#   [dwg]    ezdxf (DWG 提取)
#   [ui]     gradio (Web 界面)
#   [neo4j]  neo4j (图数据库导出)
#   [watch]  psutil (CPU 空闲自动构建)
#   [service] pywin32 (Windows 服务)
#   [all]    以上全部

安装后提供 atlisp-dwg-kb 命令;未安装时也可从仓库根直接运行:

PYTHONPATH=src python -m atlisp_dwg_kb.cli <command>

系统依赖:DWG 提取(atlisp-dwg-kb extract)需要 [dwg] extra(ezdxf),且 dwg2dxf(libredwg)必须安装到系统 PATH,Python 依赖不够。

# Ubuntu/Debian
sudo apt install libredwg-tools
# Windows 无官方二进制,需自行编译,或在 Linux 上先完成提取

数据处理流程

raw/ (DWG 源) ──atlisp-dwg-kb extract──▶ dwg-extract/ (JSON+MD)
                                               │
                              atlisp-dwg-kb build
                                               │
                                    ~/.dwg-kb/ (RDF + 图谱)
                                               │
                     query / stats / API(:8000) / UI(:7860) / export-neo4j

使用

1. 提取 DWG 元数据

# 试跑 50 个文件
atlisp-dwg-kb extract raw --limit 50

# 全量提取(默认 8 进程并行,--workers/-w 可调)
atlisp-dwg-kb extract raw -w 8

# 断点续传(跳过 dwg-extract/.processed.json 中已处理的文件)
atlisp-dwg-kb extract raw --resume

# 只处理某年份子目录 / 指定输出目录
atlisp-dwg-kb extract raw --project 2025
atlisp-dwg-kb extract raw -o /data/dwg-extract
  • 源目录需按年份组织(2016–2025),项目名取自年份目录的下一层
  • 输出为每张图一个 <stem>.json + <stem>.md,保留源目录结构
  • 另有 extraction.log 与 summary.json 记录运行日志和统计

2. 构建知识库

atlisp-dwg-kb build --extract-dir raw/dwg-extract

产物(默认写入 ~/.dwg-kb/):

  • rdf/knowledge.trig — RDF 三元组
  • graph/knowledge.json — NetworkX 图谱 + 社区检测
  • graph/graph.html — 自包含交互式图谱(Cytoscape.js,可直接浏览器打开)

3. 查询

atlisp-dwg-kb query "列出所有暖通图纸"
atlisp-dwg-kb stats

4. 启动服务

atlisp-dwg-kb serve          # API: http://localhost:8000
atlisp-dwg-kb ui             # UI:  http://localhost:7860
atlisp-dwg-kb all            # 同时启动(UI 在 port+1,即 8001)
atlisp-dwg-kb export-neo4j   # 导出 Neo4j Cypher 到 ~/.dwg-kb/graph/

5. 管理多个 DWG 目录

合并为一个知识库:各目录分别提取到不同输出目录,构建时指向它们的共同父目录。build 会递归加载所有 *.json,同名图纸按源文件绝对路径区分,不会互相覆盖:

atlisp-dwg-kb extract /data/root1 -o /kb/extract/root1
atlisp-dwg-kb extract /data/root2 -o /kb/extract/root2
atlisp-dwg-kb build --extract-dir /kb/extract        # 合并 root1 + root2

各自独立知识库:用 DWG_KB_DATA_DIR 隔离存储(build / query / stats / serve / ui 需带同一变量):

DWG_KB_DATA_DIR=~/.dwg-kb/root1 atlisp-dwg-kb build --extract-dir /data/root1/dwg-extract
DWG_KB_DATA_DIR=~/.dwg-kb/root1 atlisp-dwg-kb query "列出所有暖通图纸"

注意:不要让两个源目录提取到同一个 -o 目录(每张图输出为 <相对目录>/<stem>.json,相对结构重叠时会互相覆盖)。

6. 空闲时自动构建(autobuild)

常驻守护:定时采样 CPU,连续多次低于阈值(默认 30%)且源目录有更新时,自动执行 extract --resume + build 全流程。适合放在夜间/空闲时段自动跟进新图纸。

# 需要 [watch] extra (psutil) 与 [dwg] extra (ezdxf)
atlisp-dwg-kb autobuild raw

# 自定义:采样 30s,CPU<20%,连续 3 次空闲触发,仅提取 2025 年
atlisp-dwg-kb autobuild raw --interval 30 --cpu-threshold 20 --idle-checks 3 --project 2025

# 只跑一轮(等到空闲构建一次即退出),适合 cron/计划任务
atlisp-dwg-kb autobuild raw --once
  • 触发条件:knowledge.trig 不存在,或源 *.dwg / 提取 *.json 的 mtime 晚于上次构建
  • --interval 既是 CPU 采样窗口也是检查周期;需连续 --idle-checks 次空闲才触发(默认 3 次 × 60s ≈ 3 分钟)
  • 后台/服务场景用 --log-file <path> 追加带时间戳的日志
  • 按 Ctrl-C 退出

Windows 后台运行(服务)

在 Windows 上把 autobuild 注册为服务:开机自启、崩溃重启、无需登录。两种方式任选。

方式一:内置命令(pywin32,推荐)

pip install -e ".[dwg,watch,service]"     # [service] = pywin32
# 以管理员 PowerShell 运行:
atlisp-dwg-kb service install D:\dwg --interval 60 --cpu-threshold 30 --idle-checks 3 --log-file D:\dwg\dwg-kb-service.log

atlisp-dwg-kb service status
atlisp-dwg-kb service stop
atlisp-dwg-kb service start
atlisp-dwg-kb service uninstall
  • service install 把运行参数写入 %PROGRAMDATA%\atlisp-dwg-kb\service.json,再注册并启动服务(SERVICE_AUTO_START)。
  • 需管理员权限;若 pywin32 的服务宿主未注册,运行 python Scripts\pywin32_postinstall.py -install。
  • 仅 Windows 可用,其他平台会提示 Windows service is only supported on Windows。

方式二:NSSM 脚本

  1. 下载 NSSM,将 nssm.exe 加入 PATH。
  2. pip install -e ".[dwg,watch]"。
  3. 管理员 PowerShell 运行仓库脚本:
powershell -ExecutionPolicy Bypass -File .\scripts\windows\install-service.ps1 -DwgRoot D:\dwg

管理:

nssm status atlisp-dwg-kb
nssm restart atlisp-dwg-kb
powershell -ExecutionPolicy Bypass -File .\scripts\windows\install-service.ps1 -Uninstall

注意:提取依赖 dwg2dxf.exe(libredwg)在 PATH 中;libredwg 无官方 Windows 二进制,需自行编译,或先在 Linux 完成提取再拷回提取结果。

配置

通过环境变量配置(见 src/atlisp_dwg_kb/config.py):

变量 说明 默认值
DWG_KB_DATA_DIR 知识库存储目录 ~/.dwg-kb
DWG_EXTRACT_DIR DWG 提取结果目录(build 默认读取) ./dwg-extract
NEO4J_URI Neo4j 连接地址 bolt://localhost:7687
NEO4J_USER Neo4j 用户名 neo4j
NEO4J_PASSWORD Neo4j 密码 (空)
# 自定义知识库存储目录
export DWG_KB_DATA_DIR=/my/data
atlisp-dwg-kb build --extract-dir /my/dwg-extract

注意:仓库内的 data/ 是本地构建产物(已 gitignore),不是运行时默认路径。

命令一览

命令 说明
atlisp-dwg-kb extract <dwg-root> [--limit N] [--resume] [--project YYYY] [-w N] [-o DIR] 从 DWG 提取元数据
atlisp-dwg-kb build --extract-dir <dir> 从提取结果构建知识库
atlisp-dwg-kb autobuild <dwg-root> [--interval N] [--cpu-threshold P] [--idle-checks K] [--once] [--log-file F] CPU 空闲时自动提取+构建
atlisp-dwg-kb service {install,uninstall,start,stop,status} Windows 服务管理 (pywin32)
atlisp-dwg-kb query "..." 命令行查询
atlisp-dwg-kb stats 显示统计
atlisp-dwg-kb serve [--port N] 启动 FastAPI 服务 (默认 8000)
atlisp-dwg-kb ui [--port N] 启动 Gradio 界面 (默认 7860)
atlisp-dwg-kb all 同时启动 API + UI
atlisp-dwg-kb export-neo4j 导出 Neo4j Cypher

项目结构

dwg-knowledge-base/
├── src/
│   └── atlisp_dwg_kb/          # 核心包
│       ├── extract.py          # DWG 元数据提取 (DWG→DXF→JSON/MD)
│       ├── ontology/           # 本体(ttl) + RDF 填充 + SPARQL 查询
│       ├── graph/              # 图谱构建 + 演进追踪 + 跨专业 + Neo4j 导出
│       ├── api/                # FastAPI REST
│       ├── ui/                 # Gradio Web UI
│       ├── cli.py              # CLI 入口
│       └── config.py           # 配置 + 领域关键词表
├── tests/                      # pytest 测试
├── raw -> /media/data/...      # 本机 DWG 档案符号链接(勿提交)
├── data/                       # 本地构建产物(gitignore)
└── pyproject.toml

本体类层次

owl:Thing
├── Project
├── Drawing
│   ├── ArchitecturalDrawing
│   ├── StructuralDrawing
│   ├── HVACDrawing
│   ├── ElectricalDrawing
│   ├── DetailDrawing
│   └── GeneralDrawing
├── Layer
├── Block
│   ├── BuildingComponent
│   └── Equipment
├── ReviewRound
├── Discipline
└── TextAnnotation

依赖

  • Python 3.10+
  • rdflib (RDF 处理)
  • networkx (图算法)
  • fastapi + uvicorn (API 服务)
  • ezdxf (可选, DWG 提取)
  • gradio (可选, Web 界面)
  • dwg2dxf (系统依赖, libredwg, DWG 转 DXF)

Metadata

Release files for atlisp-dwg-kb 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for atlisp-dwg-kb 0.1.0
File Size Uploaded
atlisp_dwg_kb-0.1.0.tar.gz 53.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for atlisp-dwg-kb 0.1.0
File Interpreter ABI Platform
atlisp_dwg_kb-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 99.3 kB

Release files / atlisp_dwg_kb-0.1.0.tar.gz

Download URL atlisp_dwg_kb-0.1.0.tar.gz
Size 53.8 kB
Tags Source
SHA-256 checksum
How to use checksums
fd0bdf22edf6a750a4cc54365c6535f66fbb3f2cc4051bd6b4d305df331bef72
BLAKE2b-256 checksum
How to use checksums
bd879944ddae0c955c899fdc76ddfef69f9bdd110fdffe4598de8869c041f627
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.1

Release files / atlisp_dwg_kb-0.1.0-py3-none-any.whl

Download URL atlisp_dwg_kb-0.1.0-py3-none-any.whl
Size 45.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
711fdb0de54537ef0d1526f11d4ad950c5e4f710e55fb25a8c10db26d6166a28
BLAKE2b-256 checksum
How to use checksums
c286acea3a85b09ad908ebbd094e66d95294d84ab9e36d082c636e4f8bbe1275
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.1

Release history Release notifications | RSS feed

0.2.0

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page