실습: 가변 길이 경로로 고장 원인 사슬 따라가기
KG 기반 Q&A
실습: 가변 길이 경로로 고장 원인 사슬 따라가기
온톨로지 & Knowledge Graph > KG 기반 Q&A
- 가변 길이 경로로 고장에서 조치·스킬까지의 사슬을 한 번에 따라간다
- 관계 방향이 반대인 Worker를 OPTIONAL MATCH로 이어 붙인다
- 탐색한 경로를 텍스트와 ASCII 그림으로 직렬화해 LLM에 넘긴다
- 이 그래프에서 사슬이 몇 홉까지 뻗는지 직접 세어 5-Why와 무엇이 다른지 말한다
실습: 고장 원인 사슬을 가변 길이 경로로 따라가기
배경
도요타의 5-Why는 "왜?"를 다섯 번 되물어 근본 원인에 닿는 기법입니다. KG의 가변 길이 경로 탐색이 그 되묻기를 대신할 수 있습니다.
다만 이 그래프에서 사슬은 다섯 번 뻗지 않습니다.
Fault -[:CAUSED_BY]-> RootCause -[:RESOLVED_BY]-> MaintenanceAction -[:REQUIRES_SKILL]-> Skill
로 3홉에서 끝납니다. RootCause에서 다시 나가는 CAUSED_BY가 없기 때문입니다.
*1..5라고 적어도 5홉짜리 결과는 나오지 않습니다.
실제로 몇 홉까지 나오는지 length(path)로 직접 세어 보세요.
사슬을 더 늘리려면 원인 사이에 CAUSED_BY를 한 단계 더 넣어야 합니다(마지막 확장 과제).
방향에 걸리는 곳 하나
작업자와 스킬은 (Worker)-[:HAS_SKILL]->(Skill)로 작업자에서 나갑니다.
그래서 -[...]->로 순방향만 따라가는 경로 탐색으로는 Skill에서 Worker로 갈 수 없습니다.
경로 끝에서 OPTIONAL MATCH (w:Worker)-[:HAS_SKILL]->(leaf)로 따로 이어 붙입니다.
관계 방향을 바꾸고 싶지 않다면 이 방법이 맞습니다.
실습 흐름
- 알람 입력 (예: E-201)
- 가변 길이 경로로 원인·조치·스킬까지 탐색
- 경로 끝의 Skill에 붙는 작업자를 이어 붙이기
- 경로를 텍스트로 직렬화
- LLM이 "왜?" 형식으로 단계별 설명 생성
- ASCII 다이어그램 출력
확장 과제
RootCause 사이에 CAUSED_BY를 한 단계 더 넣어 보세요.
예: 베어링 마모 ← 윤활 부족 ← 자동 급유 장치 막힘.
그러면 같은 쿼리로 4홉, 5홉 경로가 나오고 5-Why에 가까워집니다.
힌트 보기
- • 가변 길이 경로 *1..5는 1홉부터 5홉까지 모든 경로를 반환합니다. 상한을 크게 준다고 없는 경로가 생기지는 않습니다
- • 변수 이름을 end로 쓰면 안 됩니다. END는 Cypher 예약어라 백틱 없이 쓰면 파서가 거부합니다
- • 관계 방향이 반대인 Worker는 경로 탐색으로 닿지 않습니다. OPTIONAL MATCH로 따로 이어 붙이세요
- • path.nodes와 path.relationships로 경로의 노드와 관계에 각각 접근합니다
- • length(path)로 실제 깊이를 세어 두면 사슬이 어디서 끝나는지 눈으로 확인됩니다
정답 보기
AI에게 가변 길이 Cypher 경로 쿼리가 5-Why 인과관계를 올바르게 탐색하는지, 사이클 및 성능 문제를 점검하게 하세요.
이 5-Why 자동화 Cypher 쿼리에서 인과관계 사이클(A→B→A)이 있을 때 무한 탐색이 발생하는지, [*1..5] 가변 경로가 실제로 5단계 WHY를 올바르게 순방향으로 따라가는지 분석하고, 사이클 방지 apoc.path 활용법과 LLM에 넘기기 전 경로 결과를 단순화하는 후처리 코드를 제안해줘.