DeepSeek V3와 RAG로 사내 문서 지식 검색 혁신: 로컬 자동 파싱 파이프라인 구축 실전 가이드
기업 내부 지식의 보안을 완벽히 지키면서 DeepSeek V3와 RAG를 결합하여 온프레미스 문서 자동 파싱 파이프라인 구축 전략을 제시합니다.
이지웍스랩 AI리서치 · 2026-08-17 · B2B 업무 자동화 · 읽는 데 10분
사내에 흩어진 수천 장의 정산 규정과 계약서를 외부 클라우드 유출 없이 즉시 검색할 수 있는 온프레미스 RAG 파이프라인을 구축하는 실전 가이드입니다.
1. 온프레미스 DeepSeek V3와 RAG 결합이 필요한 이유
많은 기업들이 보안 상의 이유로 사내 민감 데이터(거래명세서, 계약서, 단가표)를 퍼블릭 클라우드 AI 서비스에 업로드하지 못하고 있습니다. 특히 의약품 유통과 같이 거래처별 단가가 곧 영업 기밀인 업종에서는 외부 API 전송 자체가 내부 감사 지적 사항이 됩니다.
DeepSeek V3는 동급 상용 모델 대비 추론 비용이 현저히 낮으면서도 한국어 문서 이해도가 실무에 쓸 만한 수준까지 올라온 오픈 웨이트 모델입니다. 이를 로컬 GPU 서버에 올리고 ChromaDB 벡터 데이터베이스와 연동하면, 기업 내부망 밖으로 단 한 바이트도 나가지 않는 지식 검색 엔진을 구축할 수 있습니다.
핵심은 모델 자체가 아니라 검색 계층(Retrieval)입니다. 사내 문서를 잘게 쪼개 임베딩하고, 질문과 의미적으로 가까운 조각만 골라 프롬프트에 넣어주는 RAG 구조를 갖추면, 파라미터 수가 작은 모델로도 사내 규정 질의응답에서 대형 상용 모델에 근접한 정확도를 냅니다.
2. 로컬 벡터 임베딩 및 검색 파이프라인 구축 코드
LangChain과 ChromaDB를 활용하여 문서를 청킹하고 벡터화한 뒤 DeepSeek V3로 질의응답하는 파이썬 스크립트 예시입니다. 실무에서 가장 많이 실수하는 지점은 청크 크기 설정으로, 정산 규정처럼 조항 단위로 의미가 끊기는 문서는 800~1,200자 사이에서 조항 경계를 기준으로 나눠야 검색 품질이 안정됩니다.
임베딩 모델은 한국어 성능이 검증된 다국어 모델을 쓰는 것이 안전합니다. 영어 기준으로 학습된 임베딩을 그대로 쓰면 '정산월'과 '처방월'처럼 실무상 완전히 다른 개념이 벡터 공간에서 가깝게 배치되어 엉뚱한 조항을 인용하는 사고가 발생합니다.
메타데이터 필터링도 반드시 함께 설계해야 합니다. 문서마다 개정일자, 부서, 문서종류를 메타데이터로 심어두고 검색 시 필터를 걸면, 이미 폐지된 구버전 규정이 답변 근거로 인용되는 최악의 상황을 구조적으로 차단할 수 있습니다.
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import PyPDFDirectoryLoader
# 1) 사내 문서 로드 (내부망 경로)
docs = PyPDFDirectoryLoader("/mnt/internal/policy").load()
# 2) 조항 경계를 우선 분리자로 사용해 청킹
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=150,
separators=["\n제", "\n\n", "\n", " "],
)
chunks = splitter.split_documents(docs)
# 3) 개정일자/문서종류 메타데이터 부여 (구버전 인용 차단용)
for c in chunks:
c.metadata["doc_type"] = "settlement_policy"
c.metadata["revision"] = "2026-08"
# 4) 로컬 임베딩 -> ChromaDB 영속 저장
embedding = HuggingFaceEmbeddings(
model_name="intfloat/multilingual-e5-large"
)
vectordb = Chroma.from_documents(
chunks, embedding, persist_directory="./chroma_internal"
)
# 5) 최신 개정본만 검색하도록 필터 고정
retriever = vectordb.as_retriever(
search_kwargs={"k": 4, "filter": {"revision": "2026-08"}}
)
3. 검색 품질을 결정하는 재순위화(Re-ranking)와 출처 인용
벡터 유사도 검색만으로는 상위 4개 청크 중 1~2개가 무관한 문서인 경우가 흔합니다. 여기에 크로스 인코더 기반 재순위화 단계를 한 번 더 태우면, 실무 질의 기준 정답 청크가 1순위로 올라오는 비율이 눈에 띄게 개선됩니다.
답변 생성 프롬프트에는 '제공된 문서 조각에 근거가 없으면 모른다고 답하라'는 지시와 함께, 인용한 청크의 문서명과 조항 번호를 반드시 출력하도록 강제해야 합니다. 출처가 붙지 않은 답변은 실무자가 검증할 방법이 없어 결국 아무도 쓰지 않는 시스템이 됩니다.
운영 단계에서는 사용자가 '이 답변이 틀렸다'고 표시한 질의를 별도 테이블에 적재하고 주 단위로 검토하십시오. 대부분의 오답은 모델 성능이 아니라 원본 문서의 누락이나 구버전 잔존에서 발생하며, 문서를 고치면 즉시 해결됩니다.
| 구성 요소 | 권장 선택 | 선택 이유 |
|---|---|---|
| LLM | DeepSeek V3 (Q4 양자화) | 온프레미스 구동 가능 + 한국어 문서 요약 품질 확보 |
| 임베딩 | multilingual-e5-large | 한국어 업무 용어 간 의미 구분 성능이 안정적 |
| 벡터 DB | ChromaDB / pgvector | 별도 라이선스 비용 없이 내부망 설치 가능 |
| 재순위화 | bge-reranker-v2-m3 | 상위 청크 정밀도 개선, CPU에서도 실행 가능 |
4. 사내 망분리 환경에서의 보안 가드레일
가장 먼저 확인할 것은 사용하는 라이브러리가 외부로 텔레메트리를 전송하지 않는지 여부입니다. ChromaDB는 기본 설정에서 익명 사용 통계를 전송하므로, 도입 시 해당 옵션을 반드시 비활성화하고 방화벽에서 아웃바운드를 차단해야 합니다.
문서 접근 권한도 벡터 DB 계층에서 재현되어야 합니다. 인사팀 전용 문서가 임베딩 인덱스에 그대로 들어가 있으면, 검색 한 번으로 권한 없는 직원이 급여 규정을 열람하게 됩니다. 사용자 그룹을 메타데이터에 넣고 검색 필터로 강제하는 구조가 필수입니다.
마지막으로 질의 로그 자체가 민감 정보라는 점을 잊지 마십시오. '○○병원 미수금 조회' 같은 질의 기록이 평문으로 쌓이면 그 자체가 유출 시 피해가 큰 자산입니다. 로그는 최소 보존 기간을 정해 자동 파기하도록 설정하십시오.
자주 막히는 지점
질의와 무관한 구버전 규정이 답변 근거로 인용됩니다.
원인: 문서 개정 시 기존 벡터를 삭제하지 않고 신규 문서만 추가 색인하여 동일 조항이 중복 존재합니다.
해결: 문서 ID를 안정적인 키(파일 해시 아님, 문서 코드 기준)로 지정하고 재색인 시 upsert 방식으로 갱신하십시오. 개정일자 메타데이터 필터를 검색 기본값으로 고정하면 이중 안전장치가 됩니다.
표가 포함된 단가표 PDF에서 숫자가 뒤섞여 추출됩니다.
원인: 일반 PDF 텍스트 추출기는 표의 셀 경계를 인식하지 못하고 좌우 열을 한 줄로 이어붙입니다.
해결: 표가 포함된 문서는 텍스트 추출기 대신 레이아웃 인식 파서를 별도 경로로 태우고, 표는 마크다운 표 형태로 변환해 청크에 저장하십시오. 표 청크는 절대 중간에서 분할되지 않도록 예외 처리해야 합니다.
핵심 요약
- 온프레미스 RAG의 성패는 모델 크기가 아니라 청킹 전략과 메타데이터 설계에서 갈립니다.
- 출처(문서명·조항번호) 자동 인용이 없으면 실무자는 결국 시스템을 신뢰하지 않습니다.
- 구버전 문서 잔존이 오답의 최대 원인이므로 upsert 기반 재색인 파이프라인을 먼저 구축하십시오.
- 망분리 환경에서는 라이브러리 기본 텔레메트리와 질의 로그 보존 정책까지 점검해야 진짜 폐쇄망입니다.
자주 묻는 질문
GPU 없이 CPU만으로도 구축할 수 있나요?
임베딩과 검색까지는 CPU로 충분하지만 답변 생성 단계는 체감 지연이 커집니다. 초기 검증은 CPU + 소형 모델로 진행하고, 실사용 전환 시점에 GPU 노드를 추가하는 단계적 도입을 권장합니다.
기존 사내 그룹웨어 문서를 어떻게 한 번에 가져오나요?
대부분의 그룹웨어는 관리자 API로 문서 목록과 본문을 내려받을 수 있습니다. 최초 1회 전량 색인 후, 이후에는 변경 알림 웹훅으로 증분 색인만 수행하는 구조가 운영 부담이 가장 적습니다.
답변 정확도를 어떻게 정량 측정하나요?
실무자가 자주 묻는 질문 50~100개와 정답 조항을 미리 짝지은 평가셋을 만들고, 검색 상위 4개 안에 정답 조항이 포함되는 비율(Recall@4)을 주기적으로 측정하십시오. 이 수치가 90% 아래면 모델 교체보다 청킹 재설계가 우선입니다.