검색 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 검색 ─▶ 답변 + 근거 노드
| 항목 | 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초). |
| 항목 | 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 미적재 시 벡터 폴백. 레거시 경로는 전부 삭제했습니다. |