1RAG(Retrieval-Augmented Generation)란?

RAG는 LLM이 응답을 생성하기 전에 외부 지식 베이스에서 관련 정보를 검색하여 컨텍스트로 제공하는 기술입니다. 이를 통해 LLM의 할루시네이션을 줄이고, 최신 정보와 도메인 전문 지식을 활용할 수 있습니다.

RAG (Retrieval-Augmented Generation) 파이프라인
사용자 질문
1. 임베딩
질문을 벡터로 변환
2. 검색
유사한 문서 검색
벡터 DB
(지식 베이스)
3. 컨텍스트 구성
검색된 문서 + 질문을 조합
4. LLM 생성
컨텍스트 기반 응답 생성
최종 응답 (+ 출처)

RAG의 핵심 장점: 1) 최신 정보 반영 가능, 2) 출처 추적으로 신뢰성 향상, 3) 모델 재학습 없이 지식 업데이트, 4) 할루시네이션 감소

2제조 지식 베이스 구성

제조업의 RAG 시스템을 위한 지식 베이스 구성 요소입니다:

문서 유형내용특징
설비 매뉴얼운전 절차, 유지보수 가이드, 부품 목록PDF/이미지, 도면 포함
공정 기준서제조 레시피, 공정 파라미터, 품질 기준구조화된 표 형식 많음
작업 표준서 (SOP)표준 작업 절차, 안전 수칙단계별 지시, 이미지
품질 규격검사 기준, 불량 유형, 판정 기준수치/허용 범위 데이터
트러블슈팅 가이드고장 원인, 조치 방법, 사례증상-원인-조치 구조
교육 자료신입 교육, 기능 교육 자료설명 중심 텍스트

제조 문서의 특수성:

다국어: 설비 매뉴얼은 영어/일본어/독일어 원문이 많음

복합 형식: 텍스트 + 이미지 + 표 + 도면이 혼합

전문 용어: 산업별/설비별 고유 용어와 약어 사용

버전 관리: 설비 개조, 공정 변경 시 문서 업데이트 필요

3문서 전처리 파이프라인

RAG 시스템 구축을 위한 문서 전처리 단계입니다:

문서 전처리 파이프라인
[1] 문서 수집
PDF, Word, HTML, 이미지
[2] 파싱/추출
PDF Parser (PyPDF2, Unstructured)
[3] 텍스트 정제
OCR, 표 추출, 노이즈 제거
[4] 청킹
의미 단위 분할 (512-1024 tokens)
[5] 임베딩 생성
OpenAI text-embedding
[6] 벡터 DB 저장
Pinecone, Milvus, Chroma

청킹 전략:

고정 크기: 512~1024 토큰으로 균일 분할 (간단, 경계 문제)

의미 기반: 문단/섹션 단위 분할 (맥락 보존)

하이브리드: 의미 단위 + 오버랩 (검색 정확도 향상)

계층적: 문서→섹션→문단 계층 메타데이터 유지

4벡터 데이터베이스 선택

제조업 RAG 시스템에 적합한 벡터 DB 비교입니다:

벡터 DB특징적합 상황
Pinecone완전 관리형, 빠른 시작, 확장 용이클라우드 OK, 빠른 PoC
Milvus오픈소스, 고성능, 온프레미스 가능대규모, 보안 요건
Chroma경량, 로컬 개발용, 빠른 프로토타이핑개발/테스트 환경
WeaviateGraphQL API, 하이브리드 검색복잡한 쿼리 필요 시
QdrantRust 기반 고성능, 필터링 강점복잡한 메타데이터 필터
pgvectorPostgreSQL 확장, 기존 DB 활용PostgreSQL 사용 환경

보안 고려: 제조 데이터의 민감성을 고려하여 온프레미스 배포(Milvus, Chroma) 또는 프라이빗 클라우드를 권장합니다. 외부 클라우드 사용 시 데이터 암호화와 접근 제어를 철저히 해야 합니다.

5임베딩 모델 선택

제조 문서에 적합한 임베딩 모델 선택 기준입니다:

임베딩 모델차원특징
OpenAI text-embedding-3-large3072최고 성능, API 비용 발생
OpenAI text-embedding-3-small1536비용 효율적, 충분한 성능
Cohere embed-v31024다국어 강점, 검색 특화
sentence-transformers384-768오픈소스, 로컬 실행 가능
BGE (BAAI)1024오픈소스, 영어 강점
multilingual-e5768다국어, 오픈소스
Python - 임베딩 생성 예시
from openai import OpenAI client = OpenAI() def create_embedding(text: str) -> list[float]: """텍스트를 임베딩 벡터로 변환""" response = client.embeddings.create( model="text-embedding-3-small", input=text ) return response.data[0].embedding # 제조 문서 청크 임베딩 doc_chunk = """ 모터 과열 시 조치 방법: 1. 즉시 설비 정지 2. 냉각 팬 작동 확인 3. 베어링 온도 측정 (정상: 60°C 이하) 4. 윤활유 상태 점검 """ embedding = create_embedding(doc_chunk)

6검색 품질 최적화

RAG 시스템의 검색 품질을 높이기 위한 핵심 기법들입니다:

1. 하이브리드 검색 (Hybrid Search)

벡터 검색(의미 유사도)과 키워드 검색(BM25)을 결합하여 정확도를 높입니다.

2. 리랭킹 (Reranking)

초기 검색 결과를 Cross-Encoder 모델로 재정렬하여 관련성 높은 문서를 상위에 배치합니다.

3. 메타데이터 필터링

설비 종류, 문서 유형, 작성일 등 메타데이터로 검색 범위를 제한합니다.

4. 쿼리 변환

사용자 질문을 검색에 최적화된 형태로 변환하거나, 여러 개의 하위 쿼리로 분해합니다.

Python - 하이브리드 검색 예시
from typing import List from dataclasses import dataclass @dataclass class SearchResult: content: str score: float source: str def hybrid_search(query: str, top_k: int = 5) -> List[SearchResult]: """벡터 + 키워드 하이브리드 검색""" # 1. 벡터 검색 (의미 유사도) vector_results = vector_db.search( query_embedding=create_embedding(query), top_k=top_k * 2 ) # 2. 키워드 검색 (BM25) keyword_results = bm25_index.search( query=query, top_k=top_k * 2 ) # 3. 점수 융합 (RRF - Reciprocal Rank Fusion) fused_scores = reciprocal_rank_fusion( vector_results, keyword_results ) # 4. 리랭킹 (선택적) reranked = reranker.rerank(query, fused_scores[:top_k * 2]) return reranked[:top_k]

평가 지표: RAG 검색 품질은 Recall@K, Precision@K, MRR(Mean Reciprocal Rank)로 측정합니다. 제조업에서는 안전/품질 문서의 검색 정확도를 특히 중요하게 평가해야 합니다.