- P&ID: 연결 분석 API, Prefix 규칙 관리, 카테고리 분류, DXF 그래프 빌드 - LLM: 대화 요약, tool card 영구 보존, 시계열 차트(uPlot), 에이전트 모드 - KB: 청크 미리보기, Field Instrument Inference, 인증/Qdrant 클라이언트 - MCP: 서버 기능 확장, 파이프라인 수정, timeout 개선 - Frontend: P&ID UI, LLM UI, KB UI, OPC UA Write 탭 추가 - 설정: AGENTS.md, plant_context, README, opencode.json 업데이트 - 정리: 진단 체크리스트 문서 삭제
8.8 KiB
pid 추출에서 다운받은 엑셀을 다시 사용자가 정리해서 RAG 관리 페이지를 통해서 RAG indexing을 시킬건데, 현재 pid추출에서 다운받은 엑셀 파일 인덱싱시 각 시트 및 컬럼이 어떤 식으로 인덱싱이 되는지 알고싶어
● Excel RAG 인덱싱 파이프라인을 추적하겠습니다.
Searched for 4 patterns, read 5 files, listed 1 directory (ctrl+o to expand)
● 전체 인덱싱 파이프라인을 파악했습니다. 설명드리겠습니다.
Excel RAG 인덱싱 전체 흐름
업로드 → parse_document(MCP) → xlsx_parser.py → 청크 목록 → Ollama nomic-embed-text → 768차원 벡터 → Qdrant upsert (cosine similarity)
xlsx_parser.py가 만드는 청크 구조
시트 1개당 두 종류 청크를 생성합니다.
- Sheet 청크 (시트당 1개)
chunk_kind = "sheet" locator = "sheet=Instrument" text = 마크다운 표 (최대 1000행) | 태그번호 | 장비명 | 장비타입 | 라인번호 | 도면번호 | 신뢰도 | ... | | --- | --- | --- | ... | | FT-9101 | Flow Transmitter | FT | | | 0.95 | ... | | PT-9111A | Pressure Transmitter | PT | | | 0.92 | ... | ... → 시트 전체가 하나의 벡터. "Instrument 시트 전체 목록" 같은 쿼리에 매칭.
- Row 청크 (데이터 행마다 1개)
chunk_kind = "row" locator = "sheet=Instrument; row=2" text = "Instrument: 태그번호=FT-9101, 장비명=Flow Transmitter, 장비타입=FT, 신뢰도=0.95" → 빈 셀 컬럼은 제외, 값이 있는 컬럼만 컬럼명=값 형식으로 연결.
P&ID 추출 엑셀 시트별 청크 수 예측
┌─────────────────┬────────────┬─────────────────┬───────────────────────────────────────────────────────────────┐ │ 시트명 │ sheet 청크 │ row 청크 │ row 청크 텍스트 예시 │ ├─────────────────┼────────────┼─────────────────┼───────────────────────────────────────────────────────────────┤ │ Instrument │ 1 │ 태그 수만큼 │ Instrument: 태그번호=FT-9101, 장비명=Flow Transmitter, ... │ ├─────────────────┼────────────┼─────────────────┼───────────────────────────────────────────────────────────────┤ │ Power Equipment │ 1 │ 태그 수만큼 │ Power Equipment: 태그번호=P-9101, 장비명=Pump, ... │ ├─────────────────┼────────────┼─────────────────┼───────────────────────────────────────────────────────────────┤ │ Pipings │ 1 │ 배관번호 수만큼 │ Pipings: 태그번호=P-9107-25A-F-n, 장비타입=PROCESS FLUID, ... │ ├─────────────────┼────────────┼─────────────────┼───────────────────────────────────────────────────────────────┤ │ Unmatched │ 1 │ 수만큼 │ Unmatched: 태그번호=UFD-001, ... │ └─────────────────┴────────────┴─────────────────┴───────────────────────────────────────────────────────────────┘
Qdrant에 저장되는 payload (청크당)
{ "doc_id": "uuid", "collection_key": "컬렉션키", "title": "문서 제목", "text": "Instrument: 태그번호=FT-9101, 장비명=...", "chunk_kind": "row", "locator": "sheet=Instrument; row=2", "uploaded_at": "2026-05-17T...", "tags": ["pid", "instrument"] }
검색 시 동작 (search_kb)
사용자가 "FT-9101 태그 정보" 질의 → nomic-embed-text 임베딩 → Qdrant cosine 검색 → row 청크 "Instrument: 태그번호=FT-9101, 장비명=Flow Transmitter..." 상위 매칭
알아두실 주의사항
┌─────────────────────┬───────────────────────────────────────────────────────────────────────────────────────────┐ │ 항목 │ 내용 │ ├─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────┤ │ 1000행 한도 │ sheet 청크는 선두 1000행만 — Pipings처럼 행이 많으면 sheet 청크 불완전. row 청크는 영향 │ │ │ 없음 │ ├─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────┤ │ 빈 셀 제외 │ 라인번호/도면번호가 비어있으면 row 청크 텍스트에서 생략됨 │ ├─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────┤ │ 컬럼명이 RAG 질의 │ "태그번호", "장비명" 등 한국어 컬럼명이 그대로 검색 텍스트 됨. 컬럼명 정리가 검색 품질에 │ │ 키 │ 직결 │ ├─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────┤ │ 중복 태그 주의 │ 같은 태그가 여러 시트에 있으면 row 청크 중복 생성 → 검색 결과 중복 │ ├─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────┤ │ Experion 태그 컬럼 │ 연결된 Experion 태그가 있으면 row 청크에 포함 → "FT-9101의 Experion 태그" 쿼리에 잘 매칭 │ └─────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────┘
RAG 검색 최적화를 위해 사용자가 정리할 때 권장하는 사항:
- 불필요한 시트 제거 (Unmatched는 제외 권장)
- 빈 컬럼(라인번호, 도면번호)을 채워서 업로드하면 row 청크 정보 밀도 향상
- 컬럼명을 영문으로 바꾸면 영문 질의에도 잘 매칭 (현재 한국어)