Ενσωμάτωση του Graphify σε μια ροή εργασίας Gradle: από το Knowledge Graph στο διάγραμμα PlantUML με μία εντολή
Δημοσιεύτηκε 19 April 2026
- Το πρόβλημα: διάγραμματα που είναι πάντα πίσω από τον κώδικα
- Η λύση: ένας καθορισμένος pipeline Knowledge Graph → PlantUML
- Βήμα 1: Εγκατάσταση του Graphify και εξαγωγή του Knowledge Graph
- Βήμα 2 : Το πρόσθετο Gradle μετατρέπει το Knowledge Graph σε PlantUML
- Βήμα 3 : Καθημερινή χρήση
- Το πλήρες pipeline σε ένα workflow Gradle
- Το dogfooding : το plugin τεκμηριώνει τον εαυτό του
- Γιατί είναι ορισμένο (και γιατί έχει σημασία)
- διαγράμματα του pipeline του εαυτού
- Ενσωμάτωση στην διαχείριση του έργου
- Ρύθμιση: λίστα ἔλεγχου 5 λεπτών
- Παγίδες και μειώσεις
- Σύνδεσμοι
Η βάση κώδικά σας αυξάνει. Οι εξαρτήσεις μεταξύ των modules πολλαπλασιάζονται. Η τεκμηρίωση της αρχιτεκτονικής γίνεται παρωχημένη ακόμα πριν γραφτεί. Και εάν η Gradle build σας μπορούσε να αυτοματικά δημιουργεί ενημερωμένα διαγράμματα από την πραγματική δομή του κώδικα; Αυτό είναι ακριβώς αυτό που κάνει το pipeline Graphify + PlantUML Gradle Plugin :`graphify . --no-viz`εξάγει το Knowledge Graph,`./gradlew generateKnowledgeGraphDiagram`τον μετατρέπει σε διαγράμματα PlantUML. μηδέν LLM, μηδέν χειροκίνητο, 100% καθορισμένος.
Το πρόβλημα: διάγραμματα που είναι πάντα πίσω από τον κώδικα
Κάθε έργο που υπερβαίνει τις μερικές χιλιές γραμμές γνωρίζει αυτό το σύνδρομο:
-
Σχεδιάζουμε ένα αρχιτεκτονικό διάγραμμα στην έναρξη του έργου.
-
Ο εξελίσσεται, οι εξαρτήσεις αλλάζουν
-
Το διάγραμμα γίνεται ένα διακοσμητικό ψέμα
-
Κανείς το ενημερώνει επειδή είναι βαρετό.
-
Οι πρόσφατα φθάνοντες βασίζονται σε αυτό και κάνουν λάθη
@startuml
skinparam backgroundColor #FEFEFE
skinparam ActivityBackgroundColor #FDEDEC
skinparam ActivityDiamondBackgroundColor #FFF3CD
start
:Diagramme d'architecture créé\n(manuellement, à la main);
:Le code évolue\n(nouvelles classes, nouvelles dépendances);
:Diagramme obsolète\n(ne reflète plus le code);
if (Qui met à jour ?) then (Personne)
:Documentation mensongère;
note right: Οι νέοι προγραμματιστές\nβασίζονται σε αυτό... και κάνουν λάθη
else (Quelqu'un)
:Mise à jour manuelle\n(2-3 heures de travail);
note right: Ήδη ξεπερασμένο\nστο επόμενο PR
endif
stop
@enduml
Η ερώτηση δεν είναι χρειάζεται διάγραμμα ; — όλοι γνωρίζουν ότι ναι. Η ερώτηση είναι :ποιος τα διατηρεί ενημερωμένα;
Η απάντηση: κανένας. Εκτός αν είναι αυτόματο.
Η λύση: ένας καθορισμένος pipeline Knowledge Graph → PlantUML
Ο αρχός είναι απλός: αντί να ζωγραφίζουμε τα διαγράμματα χειροκίνητα, ταπαράγει από την πραγματική δομή του κώδικα.
@startuml skinparam backgroundColor #FEFEFE skinparam componentStyle rectangle actor Développeur component "Graphify\n(pip install graphifyy)" as Graphify collections "graphify-out/graph.json\n(Γράφημα Γνώσης)" as KGJSON component "PlantUML Gradle Plugin\n(generateKnowledgeGraphDiagram)" as Plugin component "KnowledgeGraphParser" as Parser component "KnowledgeGraphRenderer" as Renderer component "PlantumlService\n(επαλήθευση + απόδοση PNG)" as PS collections "diagrams/knowledge-graph/\n(.puml + .png)" as Output Développeur --> Graphify : graphify . --no-viz Graphify --> KGJSON : extrait la structure\ndu code source Développeur --> Plugin : ./gradlew generateKnowledgeGraphDiagram Plugin --> Parser : parse(graph.json) Parser --> Plugin : KnowledgeGraph\n(noeuds + arêtes + communautés) Plugin --> Renderer : render(graph, filters) Renderer --> Plugin : code PlantUML\ndéterministe Plugin --> PS : validateSyntax + generateImage PS --> Output : .puml + .png note bottom of Plugin Ντετερμινιστική ροή (Pipeline) Καμία κλήση LLM Αναπαραγώγιμο αποτέλεσμα end note @enduml
Δύο εντολές. Αυτό είναι όλο.
# Étape 1 : extraire le Knowledge Graph
graphify . --no-viz
# Étape 2 : générer les diagrammes PlantUML
./gradlew generateKnowledgeGraphDiagram
Το αποτέλεσμα; Αρχεία`.puml` et .png`σε`diagrams/knowledge-graph/, υποβάλλονται στο Git, πάντα ενημερωμένοι με τον κώδικα.
Βήμα 1: Εγκατάσταση του Graphify και εξαγωγή του Knowledge Graph
Εγκατάσταση
Το Graphify είναι ένα εργαλείο Python που αναλύει τη βάση κώδικά σας και κατασκευάζει ένα δομημένο γράφο γνώσης :
# Méthode recommandée
uv tool install graphifyy && graphify install --platform opencode
# Alternative avec pip
pip install graphifyy && graphify install --platform opencode
Ρυθμίστε τις εξαιρέσεις
Δημιουργήστε ένα αρχείο`.graphifyignore`στη ρίζα του έργου για να εξαιρέσει τα αρχεία που δεν ανήκουν στην επιχειρηματική λογική :
# Secrets — JAMAIS dans le graphe
*-context.yml
*.env
# Fichiers générés
build/
.gradle/
# Tests fonctionnels
src/functionalTest/
Εξαγωγή του Knowledge Graph
graphify . --no-viz
Το flag`--no-viz`παραλείπει την παραγωγή HTML (αχρειωστο σε έναν pipeline Gradle). Το αποτέλεσμα είναι ένα αρχείο.`graphify-out/graph.json`περιέχει :
-
κόμβοι: κλάσεις, συναρτήσεις, αρχεία — με τον τύπο τους και την κοινότητα
-
ακμές: σχέσεις μεταξύ κόμβων (EXTRACTED από τον κώδικα, INFERRED από το LLM)
-
κοινότητες: αυτοματοποιημένα ομαδοποιήματα συνδεδεμένων κόμβων
{
"nodes": [
{"id": "0", "label": "LlmService", "file_type": "code", "community": 0},
{"id": "1", "label": "ApiKeyPool", "file_type": "code", "community": 0},
{"id": "2", "label": "PlantumlService", "file_type": "code", "community": 1}
],
"links": [
{"source": "1", "target": "0", "relation": "uses", "confidence": "EXTRACTED", "weight": 0.9},
{"source": "0", "target": "2", "relation": "calls", "confidence": "INFERRED", "weight": 0.7}
]
}
|
Ο πηγαίος κώδικας ( |
Βήμα 2 : Το πρόσθετο Gradle μετατρέπει το Knowledge Graph σε PlantUML
αρχιτεκτονική του pipeline
Το πρόσθετο`com.cheroliv.plantuml`ενσωματώνει μια εργασία`generateKnowledgeGraphDiagram`qui μετατρέπει`graph.json`σε διαγράμματα PlantUML με τρόποπλήρως δεтерμινinistικός:
@startuml
skinparam backgroundColor #FEFEFE
participant "Gradle" as G
participant "GenerateKnowledgeGraphDiagramTask" as Task
participant "KnowledgeGraphParser" as Parser
participant "KnowledgeGraphRenderer" as Renderer
participant "PlantumlService" as PS
collections "graphify-out/graph.json" as JSON
G -> Task : execute
Task -> JSON : read
Task -> Parser : parse(graph.json)
Parser --> Task : KnowledgeGraph\n(noeuds + arêtes + communautés)
Task -> Renderer : render(graph, filters)
Renderer --> Task : code PlantUML\n(déterministe)
Task -> PS : validateSyntax(plantumlCode)
alt syntaxe valide
Task -> PS : generateImage → .png
else syntaxe invalide
Task -> Task : save .puml avec warning
end
@enduml
@startuml
skinparam backgroundColor #FEFEFE
participant "Gradle" as G
participant "GenerateKnowledgeGraphDiagramTask" as Task
participant "KnowledgeGraphParser" as Parser
participant "KnowledgeGraphRenderer" as Renderer
participant "PlantumlService" as PS
collections "graphify-out/graph.json" as JSON
G -> Task : execute
Task -> JSON : read
Task -> Parser : parse(graph.json)
Parser --> Task : KnowledgeGraph\n(noeuds + arêtes + communautés)
Task -> Renderer : render(graph, filters)
Renderer --> Task : code PlantUML\n(déterministe)
Task -> PS : validateSyntax(plantumlCode)
alt syntaxe valide
Task -> PS : generateImage → .png
else syntaxe invalide
Task -> Task : save .puml avec warning
end
@enduml
τα εσωτερικά εξαρτήματα
| συστατικό | Ρόλος |
|---|---|
|
αναλύστε`graph.json`— υποστηρίζει 3 μορφές : graphify εγγενής ( |
|
Μετατρέπει determinιστίκα ένα`KnowledgeGraph`σε κώδικα PlantUML. Ομάδες ανά τύπο, κοινότητες σε πακέτα, αυτόματη λεγέντα. |
|
Gradle εργασία που οργανώνει: parse → render → validate → PNG. Ρυθμίσιμη μέσω ιδιοτήτων Gradle. |
|
Μοντέλα δεδομένων:`KnowledgeGraph`, |
|
Συντακτικός έλεγχος + αποδόμηση PNG (επαναχρησιμοποιούμενος από όλες τις εργασίες του προσθέτου). |
Κανόνες απόδοσης
Ο renderer εφαρμόζει οπτικές καθορισμένες συνήθειες :
| Τύπος άκμης | Σημείωση PlantUML | σημαινόμενο |
|---|
Οι κοινότητες αποδίδονται ως πακέτα PlantUML με αυτόματη χρωματική παλέτα.
Βήμα 3 : Καθημερινή χρήση
Πλήρες διάγραμμα
# Générer le diagramme du Knowledge Graph complet
./gradlew generateKnowledgeGraphDiagram
Έξοδος:`diagrams/knowledge-graph/knowledge-graph-full.puml` + .png
Φιλτράρισμα ανά κοινότητα
# Une seule communauté
./gradlew generateKnowledgeGraphDiagram \
-Pplantuml.kg.community=community_0
# Limiter le nombre de noeuds (lisibilité)
./gradlew generateKnowledgeGraphDiagram \
-Pplantuml.kg.community=community_0 \
-Pplantuml.kg.maxNodes=15
Φιλτράριση κατά τύπο ακμής
# Uniquement les relations certaines (EXTRACTED)
./gradlew generateKnowledgeGraphDiagram \
-Pplantuml.kg.edgeTypes=EXTRACTED
# Relations certaines + inférées
./gradlew generateKnowledgeGraphDiagram \
-Pplantuml.kg.edgeTypes=EXTRACTED,INFERRED
Φίλτρο ανά τύπο κόμβου και εμπιστοσύνης
# Uniquement les classes de code
./gradlew generateKnowledgeGraphDiagram \
-Pplantuml.kg.nodeTypes=code
# Seuil de confiance minimum (pour les INFERRED)
./gradlew generateKnowledgeGraphDiagram \
-Pplantuml.kg.minConfidence=0.7
προσαρμοσμένος φάκελος εξόδου
./gradlew generateKnowledgeGraphDiagram \
-Pplantuml.kg.outputDir=docs/architecture
Πλήρης αναφορά ιδιοτήτων
| Ιδιοκτησία | έλλειμμα | Περιγραφή |
|---|---|---|
|
(όλες) |
Φιλτράρετε τις κοινότητες ανάνομα (υποονοματογραφική αντιστοίχιση) |
|
(όλοι) |
Τύποι ακμών χωρισμένοι με κόμματα :`EXTRACTED`, |
|
|
Ελάχιστο όριο εμπιστοσύνης για τις άκρες |
|
(απεριόριστο) |
Μέγιστος αριθμός κόμβων προς εμφάνιση |
|
(όλοι) |
Τύποι κόμβων διαχωρισμένοι με κόμματα (π.χ. |
|
|
Φάκελος εξόδου για τα αρχεία`.puml` et |
Το πλήρες pipeline σε ένα workflow Gradle
@startuml
skinparam backgroundColor #FEFEFE
skinparam ActivityBackgroundColor #E8F4FD
skinparam ActivityDiamondBackgroundColor #FFF3CD
skinparam ActivityBorderColor #2C3E50
start
partition "ΕΞΑΓΩΓΗ" {
:graphify . --no-viz;
note right: Ανάλυσε τον πηγαίο κώδικα\ntree-sitter (τοπικά, χωρίς LLM)
:graphify-out/graph.json;
note right: Κόμβοι + ακμές\n+ κοινότητες
}
partition "ΠΑΡΑΓΩΓΗ" {
:./gradlew generateKnowledgeGraphDiagram;
note right: Ντετερμινιστική σωλήνωση (Pipeline)\nparse → render → validate → PNG
if (Filtres actifs ?) then (Oui)
:Appliquer filtres\n(community, edgeTypes,\nmaxNodes, nodeTypes);
else (Non)
:Diagramme complet;
endif
:diagrams/knowledge-graph/\nknowledge-graph-full.puml\nknowledge-graph-full.png;
}
partition "ΕΝΟΠΟΙΗΣΗ" {
:git add diagrams/knowledge-graph/;
:git commit;
note right: Εκδοχόμενα διαγράμματα\nπάντα ενημερωμένα με τον κώδικα
}
stop
@enduml
@startuml
skinparam backgroundColor #FEFEFE
skinparam ActivityBackgroundColor #E8F4FD
skinparam ActivityDiamondBackgroundColor #FFF3CD
skinparam ActivityBorderColor #2C3E50
start
partition "Εξαγωγή" {
:graphify . --no-viz;
note right: Analyse le code source\ntree-sitter (local, pas de LLM)
:graphify-out/graph.json;
note right: Noeuds + arêtes\n+ communautés
}
partition "ΓΕΝΝΗΣΗ" {
:./gradlew generateKnowledgeGraphDiagram;
note right: Pipeline déterministe\nparse → render → validate → PNG
if (Filtres actifs ?) then (Oui)
:Appliquer filtres\n(community, edgeTypes,\nmaxNodes, nodeTypes);
else (Non)
:Diagramme complet;
endif
:diagrams/knowledge-graph/\nknowledge-graph-full.puml\nknowledge-graph-full.png;
}
partition "ΕΝΤΕΓΡΩΣΗ" {
:git add diagrams/knowledge-graph/;
:git commit;
note right: Diagrammes versionnés\ntoujours à jour avec le code
}
stop
@enduml
Ενσωμάτωση στον κύκλο ανάπτυξης
@startuml skinparam backgroundColor #FEFEFE state "Ανάπτυξη" as dev state "Εξαγωγή\ngraphify . --no-viz" as extract state "Δημιουργία\n./gradlew generateKnowledgeGraphDiagram" as generate state "Commit\nδιαγράμματα με έλεγχο εκδόσεων" as commit [*] --> dev dev --> extract : Code modifié extract --> generate : graph.json à jour generate --> commit : .puml + .png générés commit --> dev : Diagrammes dans le repo note right of extract Σχεδόν στιγμιαία σε κώδικα Kotlin (tree-sitter, όχι LLM) end note note right of generate Ντετερμινιστικό Χωρίς LLM Αναπαραγώγιμο αποτέλεσμα end note @enduml
@startuml skinparam backgroundColor #FEFEFE state "Ανάπτυξη" as dev state "Εξαγωγή\ngraphify . --no-viz" as extract state "Δημιουργία\n./gradlew generateKnowledgeGraphDiagram" as generate state "Commit\nδιαγράμματα με έκδοση" as commit [*] --> dev dev --> extract : Code modifié extract --> generate : graph.json à jour generate --> commit : .puml + .png générés commit --> dev : Diagrammes dans le repo note right of extract Quasi instantané sur du code Kotlin (tree-sitter, pas de LLM) end note note right of generate Déterministe Pas de LLM Résultat reproductible end note @enduml
πρακτική ενημέρωση
Όταν ο κώδικας αλλάζει, δεν ξαναχτίζουμε όλο τον γράφο από το μηδέν:
# Mise à jour incrémentale (fichiers modifiés uniquement)
graphify . --update
# Puis régénérer les diagrammes
./gradlew generateKnowledgeGraphDiagram
|
|
Το dogfooding : το plugin τεκμηριώνει τον εαυτό του
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
package "Κανονικός Pipeline\n(χρήστης → διαγράμματα)" as normal {
[Fichier .prompt] as prompt
[LlmService\n+ ApiKeyPool] as llm1
[ProcessPlantumlPromptsTask] as task1
[Diagramme PNG] as out1
prompt --> task1
task1 --> llm1
llm1 --> out1
}
package "Pipeline Γράφου Γνώσης (Knowledge Graph)\n(ντετερμινιστικός, χωρίς LLM)" as kg {
[graphify-out/graph.json] as kgjson
[KnowledgeGraphParser] as parser
[KnowledgeGraphRenderer] as renderer
[PlantumlService] as ps
[Diagramme PNG\n(documentation du plugin)] as out2
kgjson --> parser
parser --> renderer
renderer --> ps
ps --> out2
}
package "Pipeline Dogfooding\n(LLM → τεκμηρίωση πρόσθετου/plugin)" as dogfood {
[GraphifyPromptAdapter] as gpa
[Fichiers .prompt\nauto-générés] as auto_prompt
[LlmService\n+ ApiKeyPool] as llm2
[ProcessPlantumlPromptsTask] as task2
[Diagramme PNG\n(documentation LLM)] as out3
kgjson --> gpa
gpa --> auto_prompt
auto_prompt --> task2
task2 --> llm2
llm2 --> out3
}
note "Ίδιο LlmService, ίδιο ApiKeyPool,\nίδιο PlantumlService\n— ΜΗΔΕΝ διπλοεγγραφή" as N
@enduml
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
package "Κανονικό pipeline\n(χρήστης → διαγράμματα)" as normal {
[Fichier .prompt] as prompt
[LlmService\n+ ApiKeyPool] as llm1
[ProcessPlantumlPromptsTask] as task1
[Diagramme PNG] as out1
prompt --> task1
task1 --> llm1
llm1 --> out1
}
package "Pipeline Knowledge Graph\n(determinist, χωρίς LLM)" as kg {
[graphify-out/graph.json] as kgjson
[KnowledgeGraphParser] as parser
[KnowledgeGraphRenderer] as renderer
[PlantumlService] as ps
[Diagramme PNG\n(documentation du plugin)] as out2
kgjson --> parser
parser --> renderer
renderer --> ps
ps --> out2
}
package "Pipeline Dogfooding\n(LLM → τεκμηρίωση του πρόσθετου)" as dogfood {
[GraphifyPromptAdapter] as gpa
[Fichiers .prompt\nauto-générés] as auto_prompt
[LlmService\n+ ApiKeyPool] as llm2
[ProcessPlantumlPromptsTask] as task2
[Diagramme PNG\n(documentation LLM)] as out3
kgjson --> gpa
gpa --> auto_prompt
auto_prompt --> task2
task2 --> llm2
llm2 --> out3
}
note "Το ίδιο LlmService, το ίδιο ApiKeyPool,\nΤο ίδιο PlantumlService\n— Μηδενική διπλοποίηση" as N
@enduml
Συνδεδεμένες εργασίες Gradle:
| Εργασια | LLM ? | Περιγραφή |
|---|---|---|
|
Όχι |
Μετατρέψε`graph.json`στο PlantUML (δετερμινίστικός) |
|
Ναι |
Δημιούργησε μερικά`.prompt`από τον γράφο, τα επεξεργάζεται μέσω LLM (dogfooding) |
# Documentation déterministe (rapide, pas de LLM)
./gradlew generateKnowledgeGraphDiagram
# Documentation LLM (plus riche, consomme des tokens)
./gradlew generateDiagramDocs
Γιατί είναι ορισμένο (και γιατί έχει σημασία)
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
rectangle "Ντετερμινιστική Διαδρομή (Pipeline)\n(generateKnowledgeGraphDiagram)" as det {
[graph.json] as json
[KnowledgeGraphParser] as parser
[KnowledgeGraphRenderer] as renderer
[PlantUML code] as puml
json --> parser : parse
parser --> renderer : KnowledgeGraph
renderer --> puml : render (fonction pure)
}
rectangle "Διαδρομή (Pipeline) LLM\n(processPlantumlPrompts)" as llm {
[.prompt] as prompt
[LlmService] as llmSvc
[ChatModel] as model
[PlantUML code] as puml2
prompt --> llmSvc
llmSvc --> model : API call
model --> puml2 : réponse non-déterministe
}
note bottom of det
Ίδια είσοδος → ίδια έξοδος
Χωρίς καθυστέρηση δικτύου
Χωρίς κόστος tokens
Επαναπαραγώγιμο σε CI
end note
note bottom of llm
Ίδια είσοδος → μεταβλητή έξοδος
Καθυστέρηση δικτύου (1-5s)
Κόστος σε tokens
Απαιτεί κλειδί API
end note
@enduml
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
rectangle "Pipeline deterministiko\n(generateKnowledgeGraphDiagram)" as det {
[graph.json] as json
[KnowledgeGraphParser] as parser
[KnowledgeGraphRenderer] as renderer
[PlantUML code] as puml
json --> parser : parse
parser --> renderer : KnowledgeGraph
renderer --> puml : render (fonction pure)
}
rectangle "Σωλήνας ΜΓΜ\n(επεξεργασίαPlantumlπροτάσεις)" as llm {
[.prompt] as prompt
[LlmService] as llmSvc
[ChatModel] as model
[PlantUML code] as puml2
prompt --> llmSvc
llmSvc --> model : API call
model --> puml2 : réponse non-déterministe
}
note bottom of det
Même entrée → même sortie
Pas de latence réseau
Pas de coût en tokens
Reproductible en CI
end note
note bottom of llm
Même entrée → sortie variable
Latence réseau (1-5s)
Coût en tokens
Nécessite une clave API
end note
@enduml
Ταυτοπρακτικά οφέλη :
| πλεονέκτημα | επίπτωση |
|---|---|
αναπαραγωγιμότητα |
ακόμη`graph.json`→ ίδιο διάγραμμα. Ακριβώς. Κάθε φορά. |
μηδενικό κόστος |
Δεν υπάρχει κλήση LLM = δεν υπάρχουν tokens = δεν υπάρχει τιμολόγιο API. |
μηδενική καθυστέρηση |
Η ανάλυση + απόδοση παίρνει ~100ms, όχι 1-5 δευτερόλεπτα. |
Συμβατό CI |
Δεν απαιτείται κλειδί API. Δεν υπάρχει τεστ ακαμάτως λόγω μεταβλητής απάντησης LLM. |
υποverseible |
Le |
διαγράμματα του pipeline του εαυτού
@startuml
skinparam backgroundColor #FEFEFE
participant "Προγραμματιστής" as Dev
participant "Gradle" as G
participant "GenerateKnowledgeGraphDiagramTask" as Task
participant "KnowledgeGraphParser" as Parser
participant "KnowledgeGraphRenderer" as Renderer
participant "PlantumlService" as PS
collections "graphify-out/graph.json" as JSON
collections "diagrams/knowledge-graph/" as Out
Dev -> G : ./gradlew generateKnowledgeGraphDiagram
G -> Task : execute
Task -> JSON : read
Task -> Parser : parse(graph.json)
Parser --> Task : KnowledgeGraph
alt filtres actifs
Task -> Task : appliquer filtres\n(community, edgeTypes, maxNodes…)
end
Task -> Renderer : render(graph, filters)
Renderer --> Task : code PlantUML
Task -> PS : validateSyntax()
alt valide
Task -> PS : generateImage()
PS --> Out : .puml + .png
else invalide
Task -> Out : .puml (avec warning)
end
@enduml
@startuml
skinparam backgroundColor #FEFEFE
participant "Προγραμματιστής" as Dev
participant "Gradle" as G
participant "GenerateKnowledgeGraphDiagramTask" as Task
participant "KnowledgeGraphParser" as Parser
participant "KnowledgeGraphRenderer" as Renderer
participant "PlantumlService" as PS
collections "graphify-out/graph.json" as JSON
collections "diagrams/knowledge-graph/" as Out
Dev -> G : ./gradlew generateKnowledgeGraphDiagram
G -> Task : execute
Task -> JSON : read
Task -> Parser : parse(graph.json)
Parser --> Task : KnowledgeGraph
alt filtres actifs
Task -> Task : appliquer filtres\n(community, edgeTypes, maxNodes…)
end
Task -> Renderer : render(graph, filters)
Renderer --> Task : code PlantUML
Task -> PS : validateSyntax()
alt valide
Task -> PS : generateImage()
PS --> Out : .puml + .png
else invalide
Task -> Out : .puml (avec warning)
end
@enduml
Ενσωμάτωση στην διαχείριση του έργου
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
package "EAGER\n(πάντα φορτωμένο)" as eager {
[PROMPT_REPRISE.adoc\n(contexte session)] as pr
[INDEX.adoc\n(vue d'ensemble)] as idx
[GRAPH_REPORT.adoc\n(~50 lignes)] as gr
}
package "LAZY — Στρατηγική\n(κατόπιν permintaan)" as lazy_strat {
[Méthodologies] as meth
[Archives sessions] as sessions
}
package "LAZY — Graphify\n(στοχευμένα ερωτήματα)" as lazy_graph {
[graph.json] as gj
[Queries\n(query/path/explain)] as queries
}
package "Pipeline PlantUML\n(αυτόματα παραγόμενο)" as puml {
[generateKnowledgeGraphDiagram] as kgTask
[generateDiagramDocs] as ddTask
[Diagrammes PNG] as diagrams
}
Agent --> eager : Lit en début de session
Agent ..> lazy_strat : Charge si type détecté
Agent ..> lazy_graph : Query si besoin structurel
kgTask --> diagrams : Déterministe
ddTask --> diagrams : Via LLM
note right of gr
Σύνοψη του Knowledge Graph
God nodes + κοινότητες
Αντικαθιστά το ECOSYSTEM_OVERVIEW
(225 γραμμές → 50 γραμμές)
end note
@enduml
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
package "EAGER\n(πάντα φορτισμένο)" as eager {
[PROMPT_REPRISE.adoc\n(contexte session)] as pr
[INDEX.adoc\n(vue d'ensemble)] as idx
[GRAPH_REPORT.adoc\n(~50 lignes)] as gr
}
package "LAZY — Στρατηγική\n(επί ζήτησης)" as lazy_strat {
[Méthodologies] as meth
[Archives sessions] as sessions
}
package "LAZY — Graphify\n(ερωτήματα στόχευσης)" as lazy_graph {
[graph.json] as gj
[Queries\n(query/path/explain)] as queries
}
package "Pipeline PlantUML\n(αυτό-παραγμένο)" as puml {
[generateKnowledgeGraphDiagram] as kgTask
[generateDiagramDocs] as ddTask
[Diagrammes PNG] as diagrams
}
Agent --> eager : Lit en début de session
Agent ..> lazy_strat : Charge si type détecté
Agent ..> lazy_graph : Query si besoin structurel
kgTask --> diagrams : Déterministe
ddTask --> diagrams : Via LLM
note right of gr
Condensé du Knowledge Graph
God nodes + communautés
Remplace ECOSYSTEM_OVERVIEW
(225 lignes → 50 lignes)
end note
@enduml
Ο γάμος των δύο συστημάτων είναι συμπληρωματικός:
-
Η στρατηγική διαχειρίζεται το πότε και το πώς— διακυβέρνηση, ροή εργασίας, αρχειοθέτηση
-
Το Graphify διαχειρίζεται το ΤΙ και το ΠΟΥ— δομή κώδικα, σχέσεις, στοχευμένες ερωτήσεις
_ Η στρατηγική συνεδρίας διαχειρίζεται τοόταν et le πώς(κυβέρνηση, ροή εργασίας, όρια), Graphify διαχειρίζεται τοτι et le που(δομή του κώδικα, σχέσεις, στόχευμένες ερωτήσεις). Η διαδικασία PlantUML διαχειρίζεται τοΜΕ ΤΙ(διαγράμματα deterministika, με έκδοση, πάντα ενημερωμένα). _
Ρύθμιση: λίστα ἔλεγχου 5 λεπτών
| (No output, as no French text was provided for translation) | Βήμα | Παραγγελία |
|---|---|---|
1 |
Εγκατάσταση Graphify |
|
2 |
Ρυθμίστε τις εξαιρέσεις |
Δημιουργώ`.graphifyignore` |
3 |
Εξαγάγετε το Knowledge Graph |
|
4 |
Δημιουργήστε τα διαγράμματα |
|
5 |
Καταχωρήστε τα αποτελέσματα |
|
# Script complet en 5 commandes
uv tool install graphifyy
cat > .graphifyignore << 'EOF'
*-context.yml
*.env
build/
.gradle/
EOF
graphify . --no-viz
./gradlew generateKnowledgeGraphDiagram
git add graphify-out/GRAPH_REPORT.adoc graphify-out/graph.json diagrams/knowledge-graph/
Παγίδες και μειώσεις
| πάγος | Περιγραφή | Μείωση |
|---|---|---|
Γράφημα πολύ πυκνό |
Ένα μεγάλο έργο παράγει εκατοντάδες μη αναγνώσιους κόμβους |
Χρησιμοποιεί`-Pplantuml.kg.maxNodes=30`και φιλτράρετε κατά κοινότητα |
Υπερογκές εξαιρέσεις |
Παρα πολλά αρχεία στον`.graphifyignore`μειώνει την τιμή του γράφου |
Ξεκινήστε αποκλείοντας μόνο τα credentials και το build |
Κατεύθυνση των βελών |
Οι άκρες INFERRED μπορούν να έχουν αβσασή κατεύθυνση |
Φιλτράρετε κατά`-Pplantuml.kg.edgeTypes=EXTRACTED`για τις βεβαίες σχέσεις μόνο |
παλαιός γράφος |
Ο κώδικας αλλάζει αλλά ο γράφος δεν επαναχτ=ΐ)ζ=stratos |
Χρησιμοποιήστε`graphify . --update`δια τακτικά ή το git hook`graphify hook install` |
Ενημερωμένο κόστος |
Οι εποχετικές ενημερώσεις είναι σχεδόν δωρεάν (tree-sitter local) |
Μόνο τα έγράφα ( |
@startuml
skinparam backgroundColor #FEFEFE
rectangle "ΠΡΙΝ" as avant {
card "Διαγράμματα σχεδιασμένα με το χέρι\nΠάντα ξεπερασμένα\nΚανείς δεν τα ενημερώνει" as av1 #FDEDEC
}
rectangle "ΜΕΤΑ" as apres {
card "Αυτόματα δημιουργημένα διαγράμματα\nΠάντα ενημερωμένα με τον κώδικα\nΜε έλεγχο εκδόσεων στο Git\nΝτετερμινιστικά και αναπαραγώγιμα" as ap1 #E8F8E8
}
avant --> apres : graphify . --no-viz\n+ ./gradlew generateKnowledgeGraphDiagram
@enduml
@startuml
skinparam backgroundColor #FEFEFE
rectangle "πριν" as avant {
card "χεριγραφημένα διαγράμματα\nπάντα παρωχημένα\nΚανείς δεν τα ενημερώνει" as av1 #FDEDEC
}
rectangle "ΜΕΤΑ" as apres {
card "Αυτοματοποιημένα διαγράμματα\nΠάντα ενημερωμένο με τον κώδικα\nΈκδοση στο Git\nΔетерμοντιστικά και αναπαραγώγιμα" as ap1 #E8F8E8
}
avant --> apres : graphify . --no-viz\n+ ./gradlew generateKnowledgeGraphDiagram
@enduml
Τα πραγματικά όφελη:
| Κέρδος | Λεπτομέρεια |
|---|---|
Η τεκμηρίωση είναι πάντα ενημερωμένη |
Τα διαγράμματα αντικατοπτρίζουν τον τρέχοντα κώδικα, όχι ένα χειροκίνητο στιγμιότυπο |
Μηδενική προσπάθεια συντήρησης |
Τα διαγράμματα ανακτιούνται σε κάθε build |
μείωση του τεχνικού χρέους |
Δεν χρειάζεται πλέον να διατηρείτε τα διαγράμματα χειροκίνητα |
Οπτικό πλαίσιο για τους νέους |
Ένας νέος προγραμματιστής κατανοεί την αρχιτεκτονική βλέποντας τα διαγράμματα. |
Fine-tuning πιθανό |
Τα ζεύγη (υπογράφημα → διάγραμμα) είναι παραδείγματα εκπαίδευσης τεχνητής νοημοσύνης |
αυτόματη επικύρωση |
`PlantumlService.validateSyntax()`ελέγζει κάθε παραγόμενο διάγραμμα |
Γρήγορη ενσωμάτωση |
5 διαγράμματα = ολοκληρωμένη θέα της αρχιτεκτονικής |
_ Οποιος έχει ένα _pourquoi μπορεί να αντέχει όλους τους comment. __
Το pourquoi : διαγράμματα πάντα ενημερωμένα. Το comment : δύο εντολές σε ένα pipeline Gradle.