Skip to content

Repository files navigation

S1000D-RAG

Python

S1000D DM XML 기술 매뉴얼을 대상으로 한 폐쇄망 로컬 LLM RAG 프로토타입. 한국어 질의에 S1000D 구조(DMC, 절차, 경고, 적용성)를 보존하며 출처 근거 기반 답변을 생성한다.


목적

S1000D 기술 문서는 DMC, 절차 단계, warning/caution, 도해, 적용성 같은 구조 정보를 담고 있어 일반 벡터 RAG로는 "절차인지 설명인지", "지원되는 작업인지 아닌지"를 구분하기 어렵다. 이 프로젝트는 구조 메타데이터와 온톨로지 매니페스트로 검색·답변 계획을 보조하고, RAG가 출처 증거를 검색하며, LLM이 증거를 한국어로 합성하는 파이프라인을 구현한다. 외부 API 없이 로컬에서 실행하는 개발·검증 경로를 구성했다.

답변을 그럴듯하게 생성하는 것보다, 어떤 문서를 근거로 답했는지와 근거가 부족한 질문을 구분할 수 있는지를 중점적으로 확인했다.


원리 / 동작 방식

S1000D DM XML
  → dm_parser.py  (lxml, descriptive / procedure / generic 타입별 파싱)
  → chunker.py    (ContentBlock 슬라이딩 윈도우, warning/caution 독립 청크)
  → ChromaDB      (BAAI/bge-m3 임베딩, chroma_db_full/)
                                            ↑ ingest.py

질의
  → parse_query          (intent / target / action 추출)
  → resolve_ontology     (RDF/OWL 온톨로지 매니페스트 → DMC 매핑)
  → plan_evidence        (primary/related/warning/figure 플랜)
  → retrieve_evidence    (벡터 검색 + 선택적 그래프 경로 / CrossEncoder 재정렬)
  → build_answer_plan    (AnswerPlan: claims + evidence + 금지 주장)
  → verbalize_answer_plan (로컬 LLM GGUF → 한국어 설명)
  → 품질 검증            (DMC 그라운딩 · 지원 수준 · 안전 경고 보존; v4는 support_level + grounding fallback)
  → RagResult(answer, evidences, reference_materials)
                                            ↑ pipeline_v4.py

파이프라인은 v1(순수 벡터 RAG) → v2(부분 온톨로지 힌트) → v3(결정론적 온톨로지 우선) → v4 실험 경로(RDF/OWL 기반 검색 계획 + LLM 합성) 순으로 확장했다. src/rag/pipeline.py는 검증 기준인 v3 baseline이고, src/rag/pipeline_v4.py는 별도로 유지하는 v4 실험 경로다. CrossEncoder 재정렬도 선택 경로이며 기본 런타임이나 정량 개선 효과를 주장하지 않는다.


주요 기능

모듈 기능
ingest.py DM XML 디렉터리 스캔 → 파싱 → ChromaDB 인덱싱 CLI
query.py 단일·대화형 RAG 질의 CLI
app_web.py FastAPI 백엔드 (WinneAI), Material Design 3 정적 프론트엔드
app.py Streamlit 질의 UI
src/parser/dm_parser.py S1000D XML → ContentBlock 변환 (절차·설명·경고·테이블·도해 참조)
src/chunker/chunker.py 슬라이딩 윈도우 청킹, warning/caution 별도 분리
src/rag/pipeline_v4.py v4 실험 경로 (RDF/SPARQL, AnswerPlan, 자동 검사 게이트)
src/vlm/ VLM(Qwen3-VL) 기반 도해 캡셔닝, 멀티모달 컨텍스트 브리지
scripts/export_ontology_rdf.py 온톨로지 매니페스트 → Turtle / JSON-LD 내보내기

검증 범위와 한계

  • 공개 저장소에는 eval/results/ 원시 실행 산출물이 포함되지 않는다. 검증 리포트는 당시 실행 스냅샷이며 독립 재현 가능한 결과 번들이 아니다.
  • 공개 검증 리포트의 500회 통과는 100개 기본 질문을 5주기 실행한 자동 검사 결과다.
  • 검사는 답변·근거·참고자료·미리보기·UI 표시의 구조적 조건을 확인한다. 사람의 답변 품질 평가, 정확도, 환각 감소율을 뜻하지 않는다.
  • CrossEncoder 재정렬과 v4 그래프 경로는 선택·실험 경로다. 벡터 검색 대비 정량적 우위를 측정한 결과는 없다.
  • 현재 근거는 개발 환경의 로컬 실행과 자동 회귀 검사다. 운영 배포, 다른 도메인으로의 일반화, 보안 인증을 주장하지 않는다.
  • 이 저장소는 Microsoft GraphRAG 제품이나 구현을 사용하지 않는 자체 검색 파이프라인이다.

설치 & 사용법

# 1. 의존성 설치
poetry install
# 또는
uv sync

# 2. 환경 설정 (.env)
cp .env.example .env
# .env에서 S1000D_TEXT_MODEL_PATH, S1000D_DATA_DIR 등 설정

# 3. XML 인덱싱
python ingest.py                  # S1000D_DATA_DIR 하위 DM XML 전체 인덱싱
python ingest.py --data-dir /path/to/xmls --limit 50

# 4. CLI 질의
python query.py "브레이크 패드 교체 절차 알려줘"
python query.py                   # 대화형 모드

# 5. 웹 서버
uvicorn app_web:app --host 0.0.0.0 --port 8000 --reload
# http://localhost:8000

# 6. Streamlit UI
streamlit run app.py

요구사항 / 의존성

  • Python ≥ 3.11, < 3.13
  • 로컬 GGUF 모델models/ 디렉토리에 배치, .envS1000D_TEXT_MODEL_PATH 지정
    • 기본 프로파일: qwen36_27b_iq4 (16 GB VRAM), 경량: qwen3_8b_q5
  • VLM (선택) — S1000D_VLM_MODEL_PATH + S1000D_VLM_MMPROJ_PATH
  • 주요 패키지: llama-cpp-python, sentence-transformers (bge-m3), chromadb, langchain, lxml, rdflib, fastapi

주요 변경 이력

날짜 내용
2026-03-13 프로젝트 초기 설정 — S1000D RAG 파이프라인 스캐폴딩
2026-03-23 핵심 RAG 파이프라인 구현 (Phase 3–8) + CLI 도구(ingest, query, export_index) + 테스트 스위트 + FastAPI · Streamlit UI
2026-06-01 멀티모달 지원 추가 — VLM 캡셔닝, 비주얼 에셋 매니페스트, 웹 채팅 잡 진행 상태
2026-06-03 S1000D 온톨로지 RDF 내보내기, 그래프 기반 검색 QA 루프, 온톨로지 인식 QA 강화
2026-06-04 v4 RDF/OWL 온톨로지 레이어 및 Graph RAG 런타임 구현 (pipeline_v4.py, rdflib 백엔드)
2026-06-05 v4 한국어 증상 답변 실험 경로 구성 및 자동 검사 (Korean composer, grounded verbalizer)

About

S1000D XML 구조 메타데이터를 보존하는 폐쇄망 RAG 프로토타입 — 벡터 검색·선택적 재정렬·자동 QA/회귀 경로

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages