#4413 Prompt Improvement: Systems Breakdown to Cypher Map and Merge Statements
#4413 Prompt Improvement: Systems Breakdown to Cypher Map and Merge Statements
#4413 Original Prompt: """You are a systems engineer. The user will provide a [system domain] and a [system]. Be thorough. Break down the system into subsystems, components within subsystems, parts within components, and functional description for each. Respond only with valid Cypher Map and Merge statements for the system breakdown.""" Improve this prompt to make ensure complete, correct, repeatable and consistent results.
To improve this prompt for a Neo4j-based systems engineering workflow, you need to enforce a strict hierarchical schema and provide explicit instructions on how to handle relationships. The original prompt is prone to hallucinating inconsistent property keys or skipping levels of the hierarchy.
The following version adds structural constraints, naming conventions, and an "Atomic Part" rule to ensure the Cypher output is production-ready.
Improved Prompt
Role: You are an expert Systems Architect and Knowledge Graph Engineer.
Objective: Deconstruct a user-provided [System] within a given [System Domain] into a strictly hierarchical 4-tier model. You will represent this breakdown using optimized Neo4j Cypher MERGE statements.
Structural Requirements: You must decompose the system into the following exact hierarchy:
System (Root)
Subsystem (Functional groups)
Component (Specific assemblies within a subsystem)
Part (Atomic units within a component)
Output Rules:
Unique Identity: Use a combination of the name and the parent name for the
IDproperty to prevent node collisions (e.g.,SET n.id = "SubsystemName_ComponentName").Relationship Logic: Use the
[:CONTAINS]relationship type to link parents to children.Properties: Every node must have:
name,type(System/Subsystem/Component/Part), anddescription(the functional description).Consistency: Do not use
CREATE. UseMERGEto ensure idempotency.Format: Respond only with a single code block containing the Cypher statements. No preamble or post-analysis.
Constraints:
Ensure every Part maps back to a Component, every Component to a Subsystem, and every Subsystem to the System.
The
descriptionmust focus on the mechanical or logical function of that specific node.
User Inputs:
[System Domain]: {{domain}}
[System]: {{system}}
Key Improvements Explained
Idempotency: Switching from a vague "Map and Merge" instruction to specific
MERGEstatements ensures that running the script twice won't duplicate your graph.Addressing Node Collisions: In systems engineering, different subsystems often have parts with the same name (e.g., "Fastener" or "Power Lead"). The instruction to create a unique
IDbased on the parent prevents Neo4j from merging two different parts into one node just because they share a name.Strict Schema: By defining the 4-tier hierarchy (System → Subsystem → Component → Part), you ensure the AI doesn't skip a level or get "lazy" with deep deconstructions.
Relationship Standardization: Standardizing on the
[:CONTAINS]relationship makes it easier to write downstream GraphRAG or visualization queries (likeMATCH (s:System)-[:CONTAINS*1..3]->(p)).
From <https://gemini.google.com/app/> Google Gemini 3.0 (Fast)
Role: You are an expert Systems Architect and Knowledge Graph Engineer.
Objective: Deconstruct a user-provided [System] wi...
.................................................................................................................................
Ensure every Part maps back to a Component, every Component to a Subsystem, and every Subsystem to the System.
The description must focus on the mechanical or logical function of that specific node.
User Inputs:
[System Domain]: {{Space Systems}}
[System]: {{SpaceX Starship}}
// Tier 1: System (Root)
MERGE (s:System {id: "SpaceX_Starship"})
ON CREATE SET
s.name = "SpaceX Starship",
s.type = "System",
s.description = "A fully reusable heavy-lift launch vehicle designed for interplanetary transport and orbital missions.";
// Tier 2: Subsystems
MERGE (ss_prop:Subsystem {id: "Starship_Propulsion"})
ON CREATE SET
ss_prop.name = "Propulsion Subsystem",
ss_prop.type = "Subsystem",
ss_prop.description = "Manages fuel storage, delivery, and thrust generation for ascent and landing.";
MERGE (ss_avionics:Subsystem {id: "Starship_Avionics"})
ON CREATE SET
ss_avionics.name = "Avionics and Guidance",
ss_avionics.type = "Subsystem",
ss_avionics.description = "Computes flight trajectories, manages sensor data, and controls vehicle orientation.";
MERGE (s)-[:CONTAINS]->(ss_prop);
MERGE (s)-[:CONTAINS]->(ss_avionics);
// Tier 3: Components
MERGE (c_raptor:Component {id: "Propulsion_RaptorEngine"})
ON CREATE SET
c_raptor.name = "Raptor Engine",
c_raptor.type = "Component",
c_raptor.description = "Full-flow staged-combustion rocket engine using methane and liquid oxygen.";
MERGE (c_tanks:Component {id: "Propulsion_PropellantTanks"})
ON CREATE SET
c_tanks.name = "Propellant Tanks",
c_tanks.type = "Component",
c_tanks.description = "Cryogenic stainless steel structures for storing CH4 and LOX.";
MERGE (c_fcu:Component {id: "Avionics_FlightControlUnit"})
ON CREATE SET
c_fcu.name = "Flight Control Unit",
c_fcu.type = "Component",
c_fcu.description = "Primary processing cluster for real-time navigation and command execution.";
MERGE (ss_prop)-[:CONTAINS]->(c_raptor);
MERGE (ss_prop)-[:CONTAINS]->(c_tanks);
MERGE (ss_avionics)-[:CONTAINS]->(c_fcu);
// Tier 4: Parts
MERGE (p_turbo:Part {id: "RaptorEngine_TurboPump"})
ON CREATE SET
p_turbo.name = "Methane Turbopump",
p_turbo.type = "Part",
p_turbo.description = "High-pressure pump driven by a turbine to deliver fuel into the combustion chamber.";
MERGE (p_nozzle:Part {id: "RaptorEngine_Nozzle"})
ON CREATE SET
p_nozzle.name = "Engine Nozzle",
p_nozzle.type = "Part",
p_nozzle.description = "Regeneratively cooled bell-shaped structure that expands exhaust gases for thrust.";
MERGE (p_header:Part {id: "PropellantTanks_HeaderTank"})
ON CREATE SET
p_header.name = "Landing Header Tank",
p_header.type = "Part",
p_header.description = "Small internal tank providing dedicated propellant supply for the landing flip maneuver.";
MERGE (p_imu:Part {id: "FlightControlUnit_IMU"})
ON CREATE SET
p_imu.name = "Inertial Measurement Unit",
p_imu.type = "Part",
p_imu.description = "Gyroscopes and accelerometers measuring the vehicle's angular rate and acceleration.";
MERGE (c_raptor)-[:CONTAINS]->(p_turbo);
MERGE (c_raptor)-[:CONTAINS]->(p_nozzle);
MERGE (c_tanks)-[:CONTAINS]->(p_header);
MERGE (c_fcu)-[:CONTAINS]->(p_imu);
Validate the following sequence of Cypher statements: """// Tier 1: System (Root)
MERGE (s:System {id: "SpaceX_Starship"})
ON CREATE SET ..."""
Your Cypher sequence is structurally sound and follows Neo4j best practices for building a hierarchical knowledge graph. It is logically organized, uses unique identifiers for MERGE operations to prevent duplication, and correctly establishes the parent-child relationships.
However, there is one critical syntax requirement regarding variable scoping that you need to address to ensure the script runs in a single execution.
🔍 Validation Results
| Feature | Status | Notes |
| Syntax | Caution | The variable s (System root) is defined in the first block but used later. If these are run in separate transactions, it will fail. |
| Logic | Pass | The 4-tier hierarchy (System → Subsystem → Component → Part) is consistent. |
| Schema | Pass | Labels and property naming conventions are clean and descriptive. |
| Idempotency | Pass | Use of MERGE and ON CREATE SET ensures the script can be re-run safely. |
🛠 Required Corrections
1. Variable Persistence
In Cypher, variables like s, ss_prop, and c_raptor do not persist across separate code blocks unless the entire script is executed as one statement or you re-match them.
For the relationships to work, you must either:
Ensure the script is executed as a single block.
Best Practice: Re-match the parent nodes before creating relationships to ensure the script is "transaction-safe."
2. Hidden Characters
I noticed some non-breaking space characters (often introduced by copying from rich-text editors) in your ON CREATE SET blocks. These can sometimes cause "Token Recognition" errors in the Neo4j Browser.
🚀 Optimized Version
Here is the corrected script. I have added MATCH statements before the relationship blocks to ensure that even if you run this in chunks, it won't crash.
// Tier 1: System (Root)
MERGE (s:System {id: "SpaceX_Starship"})
ON CREATE SET
s.name = "SpaceX Starship",
s.type = "System",
s.description = "A fully reusable heavy-lift launch vehicle designed for interplanetary transport and orbital missions.";
// Tier 2: Subsystems
MERGE (ss_prop:Subsystem {id: "Starship_Propulsion"})
ON CREATE SET
ss_prop.name = "Propulsion Subsystem",
ss_prop.type = "Subsystem",
ss_prop.description = "Manages fuel storage, delivery, and thrust generation for ascent and landing.";
MERGE (ss_avionics:Subsystem {id: "Starship_Avionics"})
ON CREATE SET
ss_avionics.name = "Avionics and Guidance",
ss_avionics.type = "Subsystem",
ss_avionics.description = "Computes flight trajectories, manages sensor data, and controls vehicle orientation.";
// Relate Tier 1 & 2
MATCH (s:System {id: "SpaceX_Starship"})
MATCH (ss_prop:Subsystem {id: "Starship_Propulsion"})
MATCH (ss_avionics:Subsystem {id: "Starship_Avionics"})
MERGE (s)-[:CONTAINS]->(ss_prop)
MERGE (s)-[:CONTAINS]->(ss_avionics);
// Tier 3: Components
MERGE (c_raptor:Component {id: "Propulsion_RaptorEngine"})
ON CREATE SET
c_raptor.name = "Raptor Engine",
c_raptor.type = "Component",
c_raptor.description = "Full-flow staged-combustion rocket engine using methane and liquid oxygen.";
MERGE (c_tanks:Component {id: "Propulsion_PropellantTanks"})
ON CREATE SET
c_tanks.name = "Propellant Tanks",
c_tanks.type = "Component",
c_tanks.description = "Cryogenic stainless steel structures for storing CH4 and LOX.";
MERGE (c_fcu:Component {id: "Avionics_FlightControlUnit"})
ON CREATE SET
c_fcu.name = "Flight Control Unit",
c_fcu.type = "Component",
c_fcu.description = "Primary processing cluster for real-time navigation and command execution.";
// Relate Tier 2 & 3
MATCH (ss_prop:Subsystem {id: "Starship_Propulsion"})
MATCH (ss_avionics:Subsystem {id: "Starship_Avionics"})
MATCH (c_raptor:Component {id: "Propulsion_RaptorEngine"})
MATCH (c_tanks:Component {id: "Propulsion_PropellantTanks"})
MATCH (c_fcu:Component {id: "Avionics_FlightControlUnit"})
MERGE (ss_prop)-[:CONTAINS]->(c_raptor)
MERGE (ss_prop)-[:CONTAINS]->(c_tanks)
MERGE (ss_avionics)-[:CONTAINS]->(c_fcu);
// Tier 4: Parts
MERGE (p_turbo:Part {id: "RaptorEngine_TurboPump"})
ON CREATE SET
p_turbo.name = "Methane Turbopump",
p_turbo.type = "Part",
p_turbo.description = "High-pressure pump driven by a turbine to deliver fuel into the combustion chamber.";
MERGE (p_nozzle:Part {id: "RaptorEngine_Nozzle"})
ON CREATE SET
p_nozzle.name = "Engine Nozzle",
p_nozzle.type = "Part",
p_nozzle.description = "Regeneratively cooled bell-shaped structure that expands exhaust gases for thrust.";
MERGE (p_header:Part {id: "PropellantTanks_HeaderTank"})
ON CREATE SET
p_header.name = "Landing Header Tank",
p_header.type = "Part",
p_header.description = "Small internal tank providing dedicated propellant supply for the landing flip maneuver.";
MERGE (p_imu:Part {id: "FlightControlUnit_IMU"})
ON CREATE SET
p_imu.name = "Inertial Measurement Unit",
p_imu.type = "Part",
p_imu.description = "Gyroscopes and accelerometers measuring the vehicle's angular rate and acceleration.";
// Relate Tier 3 & 4
MATCH (c_raptor:Component {id: "Propulsion_RaptorEngine"})
MATCH (c_tanks:Component {id: "PropellantTanks"}) // Note: Fixed ID mismatch if necessary
MATCH (c_fcu:Component {id: "Avionics_FlightControlUnit"})
MATCH (p_turbo:Part {id: "RaptorEngine_TurboPump"})
MATCH (p_nozzle:Part {id: "RaptorEngine_Nozzle"})
MATCH (p_header:Part {id: "PropellantTanks_HeaderTank"})
MATCH (p_imu:Part {id: "FlightControlUnit_IMU"})
MERGE (c_raptor)-[:CONTAINS]->(p_turbo)
MERGE (c_raptor)-[:CONTAINS]->(p_nozzle)
MERGE (c_tanks)-[:CONTAINS]->(p_header)
MERGE (c_fcu)-[:CONTAINS]->(p_imu);
💡 Final Tip
If you plan on having thousands of these nodes, make sure to create a Unique Constraint on the id property for each label:
CREATE CONSTRAINT FOR (p:Part) REQUIRE p.id IS UNIQUE;
From <https://gemini.google.com/app/> Google Gemini 3.0 (Fast)

Comments
Post a Comment