30

NL→Cypher 변환의 함정과 안전장치

KG 기반 Q&A

학습 목표

LLM이 생성하는 Cypher의 흔한 오류 패턴을 안다 Cypher Validation/Sandboxing 기법을 적용한다 Read-Only 모드와 쿼리 화이트리스트 전략을 설계한다

NL→Cypher는 마법이 아니다

사용자: "3호기에 어떤 부품이 있어?" LLM이 생성한 Cypher:

에디터 로딩 중...

잘 작동한다. 하지만 다음 경우는?

에디터 로딩 중...

한 줄로 데이터 손실. 이런 일이 안 일어나게 막아야 한다.


흔한 LLM 생성 Cypher 오류

오류 1: 잘못된 속성명

에디터 로딩 중...

대응: 스키마를 프롬프트에 명시 + Few-shot 예시 제공.

오류 2: 라벨 누락

에디터 로딩 중...

대응: 프롬프트에 "항상 라벨 명시" 룰 추가.

오류 3: 쓰기 쿼리

에디터 로딩 중...

대응: 정규식으로 쓰기 키워드 차단 + Read-Only 사용자.

오류 4: 무제한 경로 탐색

에디터 로딩 중...

대응: * 뒤에 항상 깊이 제한 강제.


안전장치 코드

에디터 로딩 중...

Neo4j Read-Only 사용자 생성

에디터 로딩 중...

쿼리 화이트리스트(Template) 전략

가장 안전한 방법: LLM이 자유롭게 Cypher를 생성하지 않게 한다.

에디터 로딩 중...

장점: 100% 안전 + 빠름 + 비용 절감. 단점: 미리 정의되지 않은 질문은 못 답함 → 핫스팟 80%만 커버.


권장 아키텍처 (제조 도메인)

에디터 로딩 중...

80% 핫스팟은 템플릿으로 안전+빠르게, 20% 롱테일만 LLM Cypher 생성.

핵심 포인트
  • LLM 생성 Cypher는 속성명 오류/쓰기 쿼리/무제한 탐색 등 흔한 문제 발생
  • 정규식 기반 Validator + Read-Only 사용자로 안전장치 다중화
  • 핫스팟 질문은 Template Router로 커버하고 LLM Cypher는 롱테일에만
  • 운영 환경에서는 절대로 LLM이 만든 Cypher를 검증 없이 실행 금지