25분
Deep Dive: Text2Cypher가 실패하는 7가지 패턴
Day 1: Text2Cypher 개론
Deep Dive: Text2Cypher가 실패하는 7가지 패턴
Text2Cypher & NL2Query > Day 1: Text2Cypher 개론
학습 목표
Text2Cypher가 실패하는 주요 패턴을 분류할 수 있다 모호한 질문을 처리하는 전략을 안다 실패 시 대응 방안을 설계할 수 있다
LLM이 만든 Cypher, 왜 틀릴까?
Text2Cypher의 정확도는 보통 60~85% 수준이다. 나머지 15~40%는 왜 실패하는지 알아야 개선할 수 있다.
실패 패턴 1: 모호한 질문 (Ambiguity)
에디터 로딩 중...
LLM이 생성할 수 있는 Cypher들:
에디터 로딩 중...
대응 방안:
- 프롬프트에 "모호한 질문은 모든 관계를 탐색하라"는 규칙 추가
- 또는 사용자에게 질문 명확화 요청 (clarification)
실패 패턴 2: 존재하지 않는 속성 사용
에디터 로딩 중...
결과: 에러는 나지 않지만, 빈 결과가 반환된다 (Neo4j는 없는 속성을 null로 처리).
대응 방안:
에디터 로딩 중...
실패 패턴 3: 잘못된 관계 방향
에디터 로딩 중...
핵심: "인수한"과 "인수된"의 구분은 한국어 문맥에서 특히 어렵다.
대응 방안:
- 프롬프트에 관계 방향 예시를 명시적으로 포함
- Few-shot 예시에 방향 관련 사례를 반드시 포함
실패 패턴 4: 복합 질문
에디터 로딩 중...
이 질문을 LLM이 한 번에 올바른 Cypher로 변환하기 매우 어렵다:
에디터 로딩 중...
대응 방안:
- 복합 질문을 단계별로 분해 (Chain of Thought)
- 중간 결과를 확인하고 후속 쿼리 생성
실패 패턴 5: 데이터 타입 불일치
에디터 로딩 중...
대응 방안:
- 프롬프트에 "속성 타입에 맞게 값을 변환"하라는 규칙 추가
- 스키마에서 타입 정보를 명확히 포함
실패 패턴 6: LIMIT 누락으로 인한 폭주
에디터 로딩 중...
대응 방안:
에디터 로딩 중...
실패 패턴 7: 한국어 vs 영어 속성값 혼동
에디터 로딩 중...
실제 DB에 어떤 값이 저장되어 있는지 LLM은 모른다!
대응 방안:
- 프롬프트에 "데이터는 한국어로 저장" 같은 힌트 제공
- 또는 샘플 데이터를 프롬프트에 포함
에디터 로딩 중...
실패 패턴 정리
| 패턴 | 빈도 | 심각도 | 주요 대응 |
|---|---|---|---|
| 모호한 질문 | 높음 | 중간 | 프롬프트 규칙, clarification |
| 없는 속성 | 중간 | 높음 | 스키마 검증, 속성 체크 |
| 잘못된 방향 | 중간 | 높음 | Few-shot 예시 |
| 복합 질문 | 중간 | 높음 | 질문 분해, CoT |
| 타입 불일치 | 낮음 | 중간 | 타입 정보 명시 |
| LIMIT 누락 | 높음 | 높음 | 후처리 강제 |
| 언어 혼동 | 중간 | 중간 | 샘플 데이터 제공 |