P&ID vers graphe de connaissances

Convertit les P&ID (schémas de tuyauterie et d'instrumentation) et PFD sous forme de PDF, vectoriels ou numérisés, en un graphe de connaissances de procédé couvrant la connectivité des équipements (amont/aval), les emplacements des instruments et les variables mesurées, ainsi que les boucles de régulation. La sortie est un fichier JSON, un fichier DuckDB et un résumé Markdown prêt pour l'IA.

Qu'est-ce que P&ID vers graphe de connaissances ?

Ce skill permet de transformer des schémas P&ID et PFD (PDF vectoriels ou numérisés) en un graphe de connaissances complet, structuré et interrogeable. Il est destiné aux ingénieurs et aux experts en automatisation qui souhaitent numériser, analyser ou construire une couche de contexte à partir de schémas d'usine. Le skill utilise une approche hybride : des scripts automatisent la classification des pages (vectorielles ou scannées) et la construction du graphe, tandis que l'utilisateur (ou l'agent IA) effectue l'extraction détaillée de chaque feuille en lisant visuellement les dessins. Le processus inclut une boucle de contrôle qualité rigoureuse avec validation des erreurs et vérification des avertissements. Les résultats sont stockés dans un graphe JSON canonique, une base DuckDB interrogeable en SQL, et un résumé Markdown optimisé pour les LLM. Le skill prend en charge les requêtes d'analyse, comme la détermination des équipements amont/aval, l'inventaire des instruments, et l'export vers des outils de visualisation de graphes (yEd, Gephi, Neo4j).

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ScottDuncanAI/PID-to-Knowledge-Graph/tree/HEAD/skills/pid-to-kg

Installed? Explore more Recherche et analyse de données skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait P&ID vers graphe de connaissances ?

Le travail est réparti entre des scripts déterministes et vous :

  • Les scripts classifient les pages (vectorielles vs scannées), les rendent sous forme de tuiles lisibles, collectent les indices OCR/texte, puis construisent, vérifient, stockent et interrogent le graphe.
  • Vous lisez les dessins et écrivez un fichier d'extraction structuré par feuille. La reconnaissance des symboles et le tracé des lignes relèvent du raisonnement visuel, et c'est la partie que les scripts ne peuvent pas bien faire.

Tous les scripts se trouvent dans scripts/ à côté de ce fichier. Appelez-les par leur chemin complet (les commandes ci-dessous l'abrègent en scripts/), et conservez le répertoire de travail dans le dossier courant de l'utilisateur, par exemple work/<usine>.

Installation. De nombreux utilisateurs sont des ingénieurs, pas des programmeurs, alors gérez l'installation vous-même. Les scripts nécessitent Python 3.10+. Avant la première exécution, installez les dépendances avec pip install -r <dossier du skill>/scripts/requirements.txt (utilisez un environnement virtuel si le Python de l'utilisateur est partagé avec d'autres travaux). Si Python est manquant, dites à l'utilisateur de l'installer depuis python.org et arrêtez-vous là.

Règles de base

  • Seulement les pages P&ID. Les dessins se trouvent souvent dans un long rapport de permis ou de conception. Si l'utilisateur nomme les pages, passez-les avec --pages. Sinon, et si le PDF a plus de quelques pages, explorez-le, regardez les aperçus des pages ou demandez à l'utilisateur, puis relancez l'exploration avec --pages afin que les étapes suivantes ignorent les rapports, les légendes et les dessins non P&ID.
  • Une usine, un répertoire de travail, un graphe. Ne placez jamais des feuilles de différentes usines dans le même répertoire de travail : les étiquettes fusionneraient entre des usines non liées. Si l'utilisateur fournit plusieurs usines, exécutez l'ensemble du flux de travail séparément pour chacune.
  • Une configuration par graphe. Si le PDF contient deux révisions du même dessin (même titre ou même zone, étiquettes qui se chevauchent, par exemple un plan "tel que construit" et une ébauche plus ancienne), ne les fusionnez pas. Demandez à l'utilisateur quelle révision utiliser, extrayez uniquement celle-ci, et enregistrez les pages exclues ainsi que la raison dans le rapport. L'assurance qualité signale les doublons probables comme possible_duplicate_revision. Enregistrez le issue_status de chaque feuille à partir du cartouche ou des tampons.
  • Enregistrez uniquement ce qui est dessiné. N'inventez jamais d'étiquettes, de connexions ou de boucles pour rendre le graphe complet. Tout ce qui n'est pas clair est placé avec une confidence plus faible, ou dans unreadable.
  • La boucle de contrôle qualité n'est pas optionnelle. Reconstruisez jusqu'à ce qu'il n'y ait plus d'erreurs, et revérifiez chaque avertissement sur le dessin.

Flux de travail

Copiez cette liste de contrôle dans vos notes et cochez les éléments :

- [ ] 1. Exploration :    python scripts/probe_pdf.py <pdf> --work <work> --plant-name "<nom>" [--pages 47-60]
- [ ] 2. Rendu :   python scripts/render_pages.py <work>
- [ ] 3. Orientation :   ouvrez chaque pages/page_NN/overview_grid.png ; corrigez la rotation si le texte n'est pas à l'endroit
- [ ] 4. Indices :    python scripts/make_hints.py <work>
- [ ] 5. Extraction :  pour chaque feuille, écrivez <work>/extract/page_NN.json (références/extraction_procedure.md)
- [ ] 6. Construction :    python scripts/build_kg.py <work>
- [ ] 7. Boucle QA :  corrigez chaque erreur, revérifiez chaque avertissement, reconstruisez (répétez)
- [ ] 8. Rapport :   résumez les résultats et ouvrez des problèmes pour l'utilisateur

1. Exploration

probe_pdf.py attribue à chaque page une classe et une voie d'extraction, et écrit <work>/manifest.json. Avec --pages, les étapes suivantes ne rendent et ne lisent que ces pages.

ClasseSignificationVoie
vector_textDessin vectoriel avec couche de texteRendu depuis les vecteurs ; texte exact de la couche de texte comme indices
vector_outlinedDessin vectoriel, texte dessiné sous forme de contours (pas de couche de texte)Rendu vectoriel haute résolution ; indices OCR
rasterImage numériséeRendu en résolution native, agrandi et avec contraste renforcé ; indices OCR
raster_with_textNumérisation avec une couche de texte OCRComme raster ; couche de texte comme indices (non fiables)
hybridVecteurs plus grandes imagesLes deux voies

Rapportez le résultat de l'exploration à l'utilisateur en une ligne, par exemple "14 feuilles vectorielles avec texte en contours."

Une faible résolution de numérisation est signalée dans les notes. Attendez-vous à enregistrer plus d'éléments dans unreadable sur ces feuilles.

2–3. Rendu et vérification de l'orientation

render_pages.py écrit ce qui suit pour chaque page :

  • overview.png
  • overview_grid.png, qui montre les noms des tuiles
  • des tuiles qui se chevauchent dans tiles/
  • tiles.json, qui enregistre quelles tuiles sont vides

L'orientation est détectée par OCR lorsqu'il est installé. Confirmez-la toujours sur overview_grid.png. Si le texte principal du dessin n'est pas à l'endroit, refaites le rendu de cette page avec une rotation explicite, donnée dans le sens horaire : render_pages.py <work> --pages N --rotation 90.

Les cartouches sont parfois orientés différemment du dessin. Orientez-vous par les étiquettes du dessin, pas par le cartouche.

4. Indices

make_hints.py écrit hints/page_NN.json. Chaque fichier contient des étiquettes candidates avec des positions de page, provenant de la couche de texte ou de l'OCR. Ce ne sont que des indices : l'OCR fait des erreurs de lecture et omet des choses. Vous n'avez pas besoin de lire les fichiers d'indices pendant l'extraction. L'assurance qualité les utilise pour signaler les étiquettes que vous avez peut-être manquées. Si l'OCR n'est pas installé, l'étape est ignorée ; notez-le dans le rapport final.

5. Extraire chaque feuille

C'est le cœur du travail. Suivez exactement la références/extraction_procedure.md. Elle couvre :

  • l'ordre de lecture : aperçu, puis chaque tuile non vide, puis les recadrages zoomés
  • comment modéliser les conduites, les tés, les prises, les signaux et les connecteurs hors page
  • l'étalonnage de la confiance
  • une liste d'auto-vérification à exécuter avant d'enregistrer

Documentation de référence, à lire si nécessaire :

  • références/isa_5_1.md : codes de lettres d'instruments, symboles de bulles, types de lignes de signaux
  • références/symbol_guide.md : comment les symboles d'équipement et de vanne correspondent aux valeurs kind
  • références/ontology.md : les types de nœuds et de relations du graphe et comment ils sont dérivés
  • references/schema/extraction.schema.json : le schéma JSON exact d'un fichier de page

Écrivez extract/page_NN.json et enregistrez-le avant de commencer la feuille suivante, afin qu'un long travail ne contienne jamais plus d'une feuille dans son contexte. Avec de nombreuses feuilles, et si votre environnement prend en charge les sous-agents, vous pouvez extraire des feuilles en parallèle. Donnez à chaque sous-agent le fichier de procédure et son propre répertoire de page.

6–7. Construction et boucle de contrôle qualité

build_kg.py valide chaque fichier de page et s'arrête avec un message précis en cas d'erreur de schéma. Il écrit ensuite ces fichiers dans <work>/kg/ :

  • graph.json
  • graph.duckdb
  • summary.md
  • qa_report.md

Parcourez qa_report.md :

  • Les erreurs, comme unresolved_reference, sont des fautes dans les fichiers de page. Corrigez-les et reconstruisez.
  • Les avertissements nomment les tuiles à revérifier. Regardez à nouveau ces tuiles, ou utilisez crop.py pour une vue zoomée, et corrigez l'extraction si le dessin montre quelque chose de différent. Avertissements courants :
    • instrument_not_located : un capteur sans measures
    • equipment_not_connected
    • unmatched_off_page
    • possible_missed_tags : une étiquette OCR qui n'est pas dans votre extraction
    • tiles_not_reviewed
  • Un avertissement qui s'avère correct sur le dessin peut être laissé tel quel. Exemples : un connecteur hors page dont l'autre dessin n'a pas été fourni, ou une erreur de lecture OCR. Listez-les dans votre rapport.

Arrêtez-vous lorsqu'il n'y a plus d'erreurs et que chaque avertissement a été vérifié.

python scripts/crop.py <work> --page 5 --bbox 0.40 0.20 0.55 0.35   # vue zoomée d'une région

8. Rapport

Dites à l'utilisateur :

  • où se trouvent les sorties
  • les chiffres clés (équipements, instruments, boucles)
  • deux ou trois exemples de chemins d'écoulement et de boucles tirés de summary.md
  • ce qui reste incertain

Renvoyez à qa_report.md pour les détails. Indiquez clairement que le graphe est extrait automatiquement et nécessite une revue d'ingénierie avant d'être utilisé pour la conception, l'exploitation ou la sécurité.

Utilisation du graphe

  • summary.md est le contexte compact et économe en tokens pour un LLM : flux au niveau des équipements, un tableau des instruments avec leurs emplacements, et un tableau des boucles.
  • graph.json est le graphe canonique, que tout outil peut lire.
  • graph.duckdb est pour SQL. Ses vues sont equipment, equipment_flow, instruments, loops et signals, et ses macros de table sont upstream(id) et downstream(id).

Utilisez kg_query.py pour répondre aux questions ; ajoutez --json lorsqu'un autre outil consommera la sortie :

python scripts/kg_query.py <work>/kg downstream 660-TK-001 --equipment
python scripts/kg_query.py <work>/kg upstream FV-0502
python scripts/kg_query.py <work>/kg path 660-TK-001 660-TK-004
python scripts/kg_query.py <work>/kg instruments --on 660-PP-011
python scripts/kg_query.py <work>/kg loop FIC-0502
python scripts/kg_query.py <work>/kg sql "SELECT * FROM equipment_flow"

Pour mesurer la qualité d'extraction sur une feuille, vérifiez-la manuellement dans un petit fichier de référence (format dans scripts/eval_kg.py) et exécutez python scripts/eval_kg.py <work>/kg gold.json : cela rapporte la précision/rappel des étiquettes, flux et boucles, ainsi que le placement des instruments.

Pour déplacer un graphe vers d'autres outils : python scripts/export.py <work>/kg graphml produit un fichier pour yEd, Gephi ou NetworkX, et python scripts/export.py <work>/kg neo4j produit des CSV plus un script d'importation Cypher.

Skills associés