XGEN 온톨로지 빌드·검색 개선 요약

Fuseki 비의존 PG-native 빌드 · omnifuse 검색 일원화 · 로컬 LLM 동등 지원  |  MR !430(빌드) · !431(검색)
2026-08-26 · AI R&D 김진수
xgen-documents (develop 대상)
검색 10/10 · 6.6초골드팩트 정답률입니다 (develop 9/10 · 14.7초). 그래프 근거 40트리플을 제시합니다 (develop 0).
로컬 LLM 빌드 지원develop은 로컬모델 추출이 0건이었으나, 클라우드와 동일 로직으로 완주하며 결함이 없습니다.
Fuseki 비의존Fuseki 정지 상태에서도 빌드·검색·DB연동이 모두 동작합니다 (전환기 병행 기록 유지).
코드 순삭감 −2,404줄레거시 검색 경로와 미사용 코드를 삭제했습니다. 검색 모듈 1,165줄 → 712줄.

구조 변화

AS-IS  문서 ─ LLM 추출(고정 상수) ─▶ Fuseki(RDF) 필수 ─ SPARQL 시드 검색  ··· Fuseki 정지 시 그래프 근거 0으로 축소
TO-BE  문서·RDB ─ LLM 추출(실측 예산) ─▶ PostgreSQL 그래프(정본) (+Fuseki 병행 기록) ─ xgen-omnifuse 검색 ─▶ 답변 + 근거 노드

빌드 로직 (MR !430)

항목AS-IS (develop)TO-BE (신규)
그래프 저장소 Fuseki(RDF)가 필수이며, 서버 부재 시 빌드가 실패합니다. PostgreSQL 자체 그래프가 정본입니다. Fuseki는 전환기 병행 기록으로 유지하며, 부재해도 완주합니다.
로컬 LLM 출력 절단·시간 초과·JSON 형식 이탈로 gemma·qwen에서 추출이 0건입니다. 클라우드와 단일 로직입니다 (provider 분기 0). 컨텍스트 윈도우·디코드 속도·동시성·팽창률을 런타임에 실측해 예산을 산정합니다.
모델별 상수 고정 가정이 코드에 있습니다 (vllm 캡 1,280, 문자/토큰 2.1 등). 하드코딩이 없습니다 — 전부 실측 또는 환경변수입니다. 기존 가정은 실측 대비 34~43% 과대평가였습니다.
출력 형식 프롬프트 지시에 의존해 모델에 따라 JSON이 깨지고, 결과가 조용히 0건이 됩니다. 스키마를 디코더에 강제합니다 — openai(strict)·vLLM(guided)·anthropic(tool)·google 4개 제공사 형식을 지원해 형식 이탈이 발생하지 않습니다.
품질 결함 자기참조 클래스가 상시 발생하고, 수치 자릿수 오류(15억→1.5억)와 숫자의 개체 승격이 있습니다. 결함 지표가 전부 0입니다 (자기참조·dangling·숫자개체·무근거개체). 수치는 원문 단위 기준으로 검산·교정합니다.
추출 밀도 모델 출력캡에 따라 배치 크기가 달라져 모델별 산출량 편차가 있습니다. 배치 크기를 공통 기준으로 통일해 어느 모델이든 같은 밀도로 문서를 읽습니다 (openai 산출 +41% 실측).
실패 처리 추출 예외가 기록 없이 빈 결과로 처리되어, 0건 그래프가 '완료'로 표시될 수 있습니다. 그룹별 경고를 기록하고 전 그룹 예외 시 실패 처리합니다. Fuseki 부재 재시도는 서킷브레이커로 차단합니다 (3.7초→0.005초).

검색 로직 (MR !431)

항목AS-IS (develop)TO-BE (신규)
검색 엔진 Fuseki SPARQL 시드 + 벡터 검색입니다. Fuseki 부재 시 그래프 근거 없는 벡터 검색으로 축소됩니다. xgen-omnifuse 라이브러리가 알고리즘 정본입니다 — 라벨링킹 → 1홉 확장 → 클래스 전수 → HippoRAG → MMR 다양성 → adaptive top-k → 단일 합성. PG 그래프 어댑터로 동작합니다.
정확도·속도 골드팩트 9/10 · 평균 14.7초 · 그래프 근거 0 10/10 · 평균 6.6초 · 근거 노드 + 트리플 40 (마사회 1,636청크 실측)
집계·비교 질문 개체의 값을 근거로 받지 못해 수치를 추측합니다. 클래스 소속 개체의 실제 값을 근거에 포함해 최다·최저 등 비교 질문에 정답을 냅니다.
코드 구조 1,165줄 — SPARQL 시드와 구 경로가 혼재합니다. 712줄, 단일 경로입니다 — omnifuse, PG 미적재 시 벡터 폴백. 레거시 경로는 전부 삭제했습니다.

DB 연동 → 즉시 온톨로지화 · 검증 실측

검증 항목 (전부 Fuseki 정지 상태)AS-ISTO-BE
RDB 행 → 트리플 적재 세션 (LLM 0회 · 증분 · 재실행 안전)완료 판정이 Fuseki에 의존해 영구 미완료PG-native 커밋으로 E2E 완주 — 값 15/15 정확, 그래프 검색 정답
동일 입력(마사회 48청크) 모델별 빌드 — 노드 / 관계 / 수치속성로컬모델 0 / 0 / 0openai 154 / 2 / 49  ·  gemma-31B(로컬) 450 / 111 / 278 — 결함 양쪽 0, 골드질문 양쪽 2/2 정답
!430+2,398/−890 (7cde520)  !431+2,904/−1,514 (974a652)  ·  미사용 코드 정리 −940줄 포함
검증: 골드팩트 10문항 A/B · 48청크 모델 동등성 · DB연동 E2E · 결함 SQL 감사