Skip to content

[로드맵] Semantic Layer 진화 — Glossary 축적 → 수렴 감지 → 지식 그래프 #255

Description

@thrcle

배경

Lang2SQL의 핵심 차별점은 "팀마다 같은 용어를 다르게 쓴다"는 현실을 다루는 것입니다.
현재 Semantic Federation이 org/team/user 3계층으로 이를 구현하고 있는데,
장기적으로는 단순 용어 사전을 넘어 비즈니스 지식 그래프로 발전시키는 로드맵을 공유합니다.


장기 비전

DB 스키마
  ↓ /enrich
컬럼별 설명 자동 생성
  ↓ /org_setup
org 레이어 용어 초안 시딩 (inferred=True)
  ↓ 팀 실사용
team 레이어에 정의 축적
  ↓ 수렴 감지 (/converge_scan)
여러 팀 정의가 유사하면 org 승격 제안
  ↓ 관리자 승인
org 정의 업데이트
  ↓ glossary 충분히 쌓이면
관계 그래프 추출 (/build_graph)
  ↓
SQL 생성 시 용어 체이닝 자동 적용

핵심 설계 원칙:

  • bottom-to-top: team 실사용 → 수렴 → org 승격 (top-down 설계 지양)
  • 자동 승격 없음: 용어 정의 오류 = SQL 전체 오류이므로 관리자 승인 필수
  • glossary first: 데이터 충분히 쌓인 후 그래프 구조화

Phase 1 — Glossary 안정화 (현재)

✅ 구현 완료

기능 파일
/enrich — 컬럼 샘플 기반 LLM 메타데이터 보강 tools/enrich_schema.py
/org_setup — DB 스캔으로 org 레이어 용어 시딩 (inferred=True) tools/org_setup.py
term_custom — org/team/user 3계층 용어 사전 tools/semantic_federation.py
narrow→wide lookup (user > team > org) semantic_federation.py
/confirm_ingest — 문서에서 추출한 용어 후보 레이어별 등록 tools/confirm_ingest.py

🔄 PR 진행 중

PR 내용
#248 layer 용어 rename (guild→org, channel→team, member→user), term_custom 기본값 team으로 변경
#252 동일 용어의 여러 team 정의를 LLM에 전체 주입 (★이 채널 / ·다른 채널) — LLM 레벨 수렴 인식
#254 README 업데이트 (layer rename + 다중 정의 주입 반영)

⚠️ 보완 필요

/enrich/org_setup 연결 끊김
현재 org_setup이 enrich 결과(enriched_desc:{table}:{col} KV)를 읽지 않고 DB를 직접 재스캔함.
/enrich 실행 후 /org_setup을 써도 enrich 결과가 활용되지 않는 구조적 gap.

enrich_schema.py  →  enriched_desc:{table}:{col}  저장
org_setup.py      →  DB 직접 재스캔  (enrich KV 무시)  ← 연결 필요

Phase 2 — 수렴 감지 & org 승격 (중기)

PR #252로 LLM이 여러 팀 정의를 볼 수 있게 됐지만, 명시적 승격 트리거가 없음.

제안: /converge_scan 커맨드

/converge_scan
  → 동일 용어에 team 정의 ≥ 2개인 항목 탐색
  → LLM이 정의 비교 → "본질적으로 같다" 판정
  → 관리자에게 후보 리스트 제시
  → 관리자 선택 → /term_custom layer:org 로 승격

또는 /org_setup action:scan으로 기존 커맨드에 통합.

FedEntryderives_from 필드 선제 추가

Phase 3 그래프 구축을 위한 준비. 아직 SQL 생성에 사용하지 않아도,
"월매출은 환불제외 규칙에서 파생됨" 같은 관계를 glossary 단계부터 기록.

@dataclass
class FedEntry:
    ...
    derives_from: list[str] = field(default_factory=list)  # 관련 용어명

Phase 3 — 지식 그래프 구축 (장기)

org 레이어 용어가 충분히 축적된 시점에 관계 그래프 추출.

/build_graph 커맨드

전체 glossary를 LLM이 일괄 분석
  → 관계 엣지 추론:
      derives_from  : 월매출 → 환불제외 규칙 적용
      is_subset_of  : 활성고객 ⊂ 고객
      requires_rule : 활성고객 → 30일 로그인 조건
  → KV 저장: graph_edge:{term_a}:{rel}:{term_b}

SQL 생성에서의 활용

"월매출 기준 TOP 10" 쿼리
  → 그래프 traversal: 월매출 → derives_from → 환불제외
  → WHERE status != 'cancelled' 자동 체이닝

현재 LLM이 매 쿼리마다 이 추론을 새로 해야 하는 것을 그래프로 사전 구조화.

Freshness: glossary 대규모 업데이트 시 /build_graph 재실행으로 관리 (자동 재생성은 비용 과다).


논의 포인트

  • Phase 2 수렴 감지: /converge_scan 별도 커맨드 vs /org_setup 통합 중 어느 쪽이 나을까요?
  • 수렴 판정 기준: LLM 유사도 외에 추가할 heuristic이 있을까요?
  • Phase 3 그래프 트리거 시점: org 용어 N개 이상? admin 명시 실행?

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions