- 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 업데이트 - 정리: 진단 체크리스트 문서 삭제
99 lines
8.8 KiB
Markdown
99 lines
8.8 KiB
Markdown
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개당 두 종류 청크를 생성합니다.
|
|
|
|
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 시트 전체 목록" 같은 쿼리에 매칭.
|
|
|
|
2) 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 청크 정보 밀도 향상
|
|
- 컬럼명을 영문으로 바꾸면 영문 질의에도 잘 매칭 (현재 한국어) |