6.2 KiB
6.2 KiB
Phase 3 Option B: OntoCast GraphUpdate 검증 (Hybrid 접근법)
완료일: 2026-05-14
상태: ✅ Acceptance Gate 3 Option B 검수 준비 완료
개요
Phase 3 Option B는 점진적 OntoCast 통합 (Hybrid approach)입니다.
핵심 전략
- Phase 0-2 유지: 현재 경량 구조 그대로
- GraphUpdate 검증 추가: OntoCast의 SPARQL 쿼리 검증
- Critic loop 준비: Phase 4+에서 추가 가능하도록 설계
시간 축
────────────────────────────────────────
Phase 0-2: 경량 추출 (완료)
Phase 3 MVP (A): 엔티티 검증 (완료)
Phase 3 Option B: SPARQL 검증 (지금 이것) ← 지금 여기
Phase 4+: Critic loop + Fuseki (향후)
구현 내용
1. SPARQL 검증기 (SPARQLValidator)
SPARQL 쿼리 기본 검증:
✓ 문법 검사: 괄호/중괄호 균형, 키워드 확인
✓ SQL 인젝션 패턴 감지
✓ 프리픽스 선언 확인
✓ 쿼리 크기 경고 (너무 큰 쿼리 감지)
2. OntoCastValidator (Phase 3 Option B)
GraphUpdate 검증:
단계 1: SPARQL 문법 검증
- 빈 쿼리 감지
- 괄호 불균형 감지
- 위험한 패턴 감지 (SQL injection 등)
단계 2: 작업 순서 검증
- 안전한 순서: INSERT → UPDATE → DELETE
- 불안전한 순서 감지 (DELETE 후 INSERT 등)
단계 3: 프리픽스 검증
- 선언되지 않은 프리픽스 감지
- 표준 RDF 프리픽스 자동 인식
단계 4: 작업 수량 체크
- 빈 작업 목록 경고
- 과도하게 큰 작업 경고 (100개 초과)
3. 테스트 결과 (모두 통과 ✅)
| 테스트 | 설명 | 결과 |
|---|---|---|
| Valid SPARQL | 올바른 INSERT 작업 | ✅ 통과 |
| Invalid syntax | 괄호 불균형 | ✅ 감지 |
| Safe order | INSERT → UPDATE → DELETE | ✅ 통과 |
| Unsafe order | DELETE 후 INSERT | ✅ 감지 |
| Undeclared prefix | 선언되지 않은 프리픽스 | ✅ 경고 |
| Utility functions | SPARQLValidator 직접 사용 | ✅ 통과 |
아키텍처: Phase 0-2와의 호환성
┌─────────────────────────────────────┐
│ OntologyGuard (통합 인터페이스) │
└──────────┬──────────────────────────┘
│
┌─────┴──────────┐
│ │
경량 검증 OntoCast 검증
(Phase 3 MVP) (Phase 3 Option B)
↓ ↓
엔티티/관계 SPARQL 쿼리
검증 검증
두 검증을 동시에 사용 가능:
# 둘 다 활성화
guard_entity = OntologyGuard(validator_type="lightweight")
guard_sparql = OntologyGuard(validator_type="ontocast")
# 또는 런타임에 선택
validator_type = "ontocast" if use_ontocast else "lightweight"
guard = OntologyGuard(validator_type=validator_type)
파일 구조
신규 생성:
✨ ont_platform/core/validation/ontocast_validator.py
├── SPARQLValidator: 기본 SPARQL 검증
├── OntoCastValidator: GraphUpdate 검증
└── GraphUpdate: 검증 결과 모델
수정:
✏️ ont_platform/core/validation/validators.py
(ValidatorFactory에 OntoCast 지원 추가)
✏️ ont_platform/core/validation/__init__.py
(OntoCastValidator export)
테스트:
✨ test_phase3_option_b.py (6개 테스트, 모두 통과)
Acceptance Gate 3 Option B 상태
✅ 완료된 항목
-
SPARQL 문법 검증
- 괄호/중괄호 균형 ✓
- 키워드 확인 ✓
- SQL 인젝션 패턴 감지 ✓
-
안전한 작업 순서 검증 (INSERT → UPDATE → DELETE)
- 불안전한 순서 감지 ✓
- 순서 강제 가능 ✓
-
프리픽스 선언 검증
- 미선언 프리픽스 감지 ✓
- 표준 RDF 프리픽스 자동 인식 ✓
-
Phase 0-2 회귀 없음
- 경량 검증 여전히 작동 ✓
- API 호환성 유지 ✓
⏳ 향후 추가 예정 (Phase 4+)
Critic Loop 통합
# Phase 4에서 구현될 것
if validation_errors:
suggestions = generate_critic_suggestions(errors)
retry_result = await llm.retry(original_query, suggestions)
RDF 일관성 검증
# Fuseki 사용 가능 시
if fuseki_available:
# 1. 쿼리 실행 시뮬레이션
# 2. 결과 그래프 검증
# 3. 일관성 확인
validate_rdf_consistency(update)
GraphUpdate 추적
# 감사 로그
graph_update_history.append({
"timestamp": now,
"operation_count": len(operations),
"validation_status": "passed",
"execution_time": elapsed_ms,
})
향후 옵션
Phase 3 Option A (경량 MVP) vs Option B (Hybrid) 비교
| 항목 | Option A (MVP) | Option B (Hybrid) |
|---|---|---|
| 엔티티 검증 | ✅ | ✅ |
| SPARQL 검증 | ❌ | ✅ |
| OntoCast 의존성 | ❌ | 부분적 |
| Critic loop | ❌ (Phase 4+) | 준비됨 (Phase 4+) |
| 구현 복잡도 | 낮음 | 중간 |
| Phase 0-2 호환성 | ✅ | ✅ |
설계의 확장성
ValidatorFactory 플러그인 구조
현재:
ValidatorFactory.create("lightweight") # Option A
ValidatorFactory.create("ontocast") # Option B (지금)
향후 추가 가능:
ValidatorFactory.create("guardrails") # Phase 3+ (제3 선택지)
ValidatorFactory.create("full_ontocast") # Phase 4+ (완전통합)
Phase 3 완료 상태 요약
| 선택지 | 상태 | 특징 |
|---|---|---|
| A: 경량 MVP | ✅ 완료 | 엔티티/관계 검증만 |
| B: Hybrid | ✅ 완료 | + SPARQL 검증 |
| C: Guardrails | ⏳ 준비 | + Reask 루프 |
현재: 옵션 A + B 모두 선택 가능한 상태
다음 단계
Phase 4: Neo4j GraphRAG (권장)
- RDF ↔ Property Graph 프로젝션
- Vector 검색 + Entity Resolver
- GraphUpdate 실행 시뮬레이션
또는: Phase 3+ (향후)
- Guardrails 통합 (더 정교한 reask)
- Full OntoCast (Critic loop 본격화)
- Fuseki 연동 (RDF 저장소)
참고 문헌
- 설계서 §5 Phase 3 (p. 222-224)
- OntoCast sparql_models.py (GraphUpdate 모델)
- SPARQL 1.1 명세 (검증 규칙)