Aviation Safety - Demo Script¶
This demo showcases Aletheia's GraphRAG capabilities using an aviation safety incident database containing 10 European aviation occurrences from 2024.
Prerequisites¶
- FalkorDB running:
redis-cli pingshould return PONG - Claude Desktop with MCP servers configured:
- Graph - Aviation Safety: Direct Cypher queries
- Aletheia - Aviation Safety: Semantic search via Graphiti
Part 1: Graph Overview (FalkorDB UI)¶
Open FalkorDB Browser UI at
http://localhost:3000
1.1 Graph Statistics¶
Expected results:
| Type | Count |
|---|---|
| Aircraft | 11 |
| Airport | 10 |
| Occurrence | 10 |
| Episodic | 10 |
| Operator | 9 |
| Country | 5 |
| Manufacturer | 5 |
Talking point: The graph contains 10 aviation safety occurrences with their related entities - aircraft, airports, operators, manufacturers, and countries.
1.2 Relationship Types¶
// Count relationships by type
MATCH ()-[r]->()
RETURN type(r) as relationship, count(*) as count
ORDER BY count DESC
Expected results:
| Relationship | Count |
|---|---|
| MENTIONS | 60 |
| RELATES_TO | 15 |
| HAS_OPERATOR | 10 |
| LOCATED_IN | 10 |
| HAS_AIRPORT | 10 |
| HAS_AIRCRAFT | 10 |
| MANUFACTURED_BY | 10 |
Talking point: Rich relationship structure connects incidents to aircraft, operators, locations, and manufacturers.
1.3 Visual: Incident Network¶
// Visualize an incident with all connections
MATCH (o:Occurrence {name: 'Occurrence 2024-0412-EU'})-[r]->(e)
RETURN o, r, e
Talking point: Show the visual graph - one incident connected to aircraft (Embraer ERJ-195), operator (TAP Air Portugal), airport (En route near Barcelona), manufacturer (Embraer).
1.4 Visual: Country-based View¶
// See all incidents by country
MATCH (c:Country)<-[:LOCATED_IN|RELATES_TO]-(ap:Airport)<-[:HAS_AIRPORT]-(o:Occurrence)
RETURN c, ap, o
Talking point: France has the most incidents (3), followed by Spain (3).
Part 2: Semantic Search with Aletheia MCP (Claude Desktop)¶
Switch to Claude Desktop with "Aletheia - Aviation Safety" MCP enabled
Demo Question 1: Semantic Cause Lookup¶
Question:
"What caused the turbulence-related injuries near Barcelona?"
Expected answer:
Unpredicted clear air turbulence associated with jetstream boundary
Capability demonstrated: - Semantic matching: No keyword "Barcelona turbulence" exists - system must understand "near Barcelona" refers to the en-route incident - Entity resolution: Connects location description to specific occurrence - Fact extraction: Retrieves the primary cause from incident details
Why this is impressive: The graph stores the location as "En route, 45 nm west of Barcelona (LEBL)" - semantic search understands "near Barcelona" matches this.
Demo Question 2: Location-based Incident Discovery¶
Question:
"What incident occurred at Nice Cote d'Azur Airport?"
Expected answer:
Wind shear encounter during approach caused by catabatic winds (Occurrence 2024-0912-EU)
Capability demonstrated: - Airport name matching: Handles French accents and variations - Incident summarization: Returns concise description, not raw data - Relationship traversal: Airport -> Occurrence -> Details
Demo Question 3: Entity Description (Narrative Generation)¶
Question:
"Describe incident 2024-0412-EU"
Expected answer:
A TAP Air Portugal Embraer ERJ-195 encountered severe clear air turbulence near Barcelona, injuring two cabin crew members, and diverted to Barcelona El Prat Airport
Capability demonstrated: - Entity aggregation: Combines facts from multiple relationships - Natural language generation: Produces coherent narrative from graph data - Multi-attribute retrieval: Aircraft type, operator, cause, outcome, location
Demo Question 4: Multi-hop Relationship Query¶
Question:
"What incident involved the ITA Airways ATR 72?"
Expected answer:
Display management computer software anomaly during approach to Milan Malpensa (Occurrence 2024-0678-EU)
Capability demonstrated: - 2-hop traversal: Operator -> Aircraft -> Occurrence - Entity disambiguation: ITA Airways operates one specific aircraft in this dataset - Context enrichment: Adds location and incident type to answer
Demo Question 5: Specific Event Type Discovery¶
Question:
"What incident required a MAYDAY declaration during cruise?"
Expected answer:
Incident 2024-0856-EU where smoke smell in the cockpit led to MAYDAY and diversion to Barcelona
Capability demonstrated: - Semantic event matching: "MAYDAY declaration" is embedded in incident narrative - Flight phase filtering: "during cruise" narrows the search - Complex fact retrieval: Matches technical aviation terminology
Part 3: Comparative Analysis (FalkorDB Direct Query)¶
Switch to "Graph - Aviation Safety" MCP or FalkorDB UI
3.1 Show the Structured Query Version¶
For the same question "What incident involved the ITA Airways ATR 72?":
MATCH (op:Operator {name: 'ITA Airways'})-[:HAS_OPERATOR]-(o:Occurrence)-[:HAS_AIRCRAFT]->(a:Aircraft)
WHERE a.name CONTAINS 'ATR'
RETURN o.name, a.name, o.summary
Talking point: Cypher requires knowing: 1. Exact operator name ("ITA Airways") 2. Relationship direction and type 3. Aircraft naming convention
Aletheia handles variations like "ITA", "ITA Airways", "ATR 72", "ATR 72-600" automatically.
3.2 Graph Traversal for Relationships¶
// Find all incidents related to Air France group (Air France + HOP!)
MATCH (op:Operator)-[:HAS_OPERATOR]-(o:Occurrence)
WHERE op.name CONTAINS 'France'
RETURN op.name, o.name, o.summary
Expected results:
| Operator | Incident | Summary |
|---|---|---|
| HOP! Air France | 2024-0912-EU | Wind shear at Nice |
| Air France | 2024-0801-EU | FOD at Lyon |
| Air France | 2024-0157-EU | Hydraulic at Paris CDG |
Part 4: Advanced Queries (FalkorDB)¶
4.1 Manufacturer Analysis¶
// Count incidents by aircraft manufacturer
MATCH (m:Manufacturer)<-[:MANUFACTURED_BY]-(a:Aircraft)<-[:HAS_AIRCRAFT]-(o:Occurrence)
RETURN m.name as manufacturer, count(o) as incidents
ORDER BY incidents DESC
4.2 Country Distribution¶
// Incidents by country
MATCH (c:Country)<-[:RELATES_TO]-(o:Occurrence)
RETURN c.name, count(o) as incidents
ORDER BY incidents DESC
4.3 Full Incident Path¶
// Trace complete incident context
MATCH path = (m:Manufacturer)<-[:MANUFACTURED_BY]-(a:Aircraft)<-[:HAS_AIRCRAFT]-(o:Occurrence)-[:HAS_AIRPORT]->(ap:Airport)-[:LOCATED_IN]->(c:Country)
WHERE o.name = 'Occurrence 2024-0289-EU'
RETURN path
Talking point: Show the full relationship chain: Boeing -> 737-800 -> Incident -> Frankfurt -> Germany
Key Takeaways¶
-
Semantic Understanding: Aletheia understands natural language questions without requiring exact terminology or Cypher syntax
-
Relationship Traversal: Automatically follows graph relationships to gather comprehensive answers
-
Context Enrichment: Combines information from multiple nodes to provide rich, contextual responses
-
Flexible Matching: Handles variations in entity names, abbreviations, and descriptions
-
Dual Access:
- Aletheia MCP: Natural language for analysts and investigators
- Graph MCP: Direct Cypher for developers and precise queries
Appendix: Entity Reference¶
| Entity Type | Examples |
|---|---|
| Airlines | Lufthansa, Air France, Iberia, TAP Air Portugal, ITA Airways, Air Europa, Vueling, KLM Cityhopper, HOP! Air France |
| Aircraft | A320-214, A321neo, A330-200, Boeing 737-800, 787-9, CRJ-1000, ATR 72-600, ERJ-195, Fokker 70 |
| Airports | Frankfurt (EDDF), Paris CDG (LFPG), Nice (LFMN), Lyon (LFLL), Madrid (LEMD), Milan (LIMC), Palma (LEPA), Amsterdam (EHAM), Barcelona (LEBL) |
| Countries | Germany, France, Spain, Italy, Netherlands |
| Manufacturers | Airbus, Boeing, Bombardier, ATR, Embraer |
Demo Flow Summary¶
| Step | Tool | Purpose |
|---|---|---|
| 1 | FalkorDB UI | Show graph structure and statistics |
| 2 | Aletheia MCP | 5 semantic search questions |
| 3 | Graph MCP | Compare with Cypher approach |
| 4 | FalkorDB UI | Advanced traversal visualizations |