1RAG(Retrieval-Augmented Generation)란?
RAG는 LLM이 응답을 생성하기 전에 외부 지식 베이스에서 관련 정보를 검색하여 컨텍스트로 제공하는 기술입니다. 이를 통해 LLM의 할루시네이션을 줄이고, 최신 정보와 도메인 전문 지식을 활용할 수 있습니다.
RAG의 핵심 장점: 1) 최신 정보 반영 가능, 2) 출처 추적으로 신뢰성 향상, 3) 모델 재학습 없이 지식 업데이트, 4) 할루시네이션 감소
2제조 지식 베이스 구성
제조업의 RAG 시스템을 위한 지식 베이스 구성 요소입니다:
| 문서 유형 | 내용 | 특징 |
|---|---|---|
| 설비 매뉴얼 | 운전 절차, 유지보수 가이드, 부품 목록 | PDF/이미지, 도면 포함 |
| 공정 기준서 | 제조 레시피, 공정 파라미터, 품질 기준 | 구조화된 표 형식 많음 |
| 작업 표준서 (SOP) | 표준 작업 절차, 안전 수칙 | 단계별 지시, 이미지 |
| 품질 규격 | 검사 기준, 불량 유형, 판정 기준 | 수치/허용 범위 데이터 |
| 트러블슈팅 가이드 | 고장 원인, 조치 방법, 사례 | 증상-원인-조치 구조 |
| 교육 자료 | 신입 교육, 기능 교육 자료 | 설명 중심 텍스트 |
제조 문서의 특수성:
• 다국어: 설비 매뉴얼은 영어/일본어/독일어 원문이 많음
• 복합 형식: 텍스트 + 이미지 + 표 + 도면이 혼합
• 전문 용어: 산업별/설비별 고유 용어와 약어 사용
• 버전 관리: 설비 개조, 공정 변경 시 문서 업데이트 필요
3문서 전처리 파이프라인
RAG 시스템 구축을 위한 문서 전처리 단계입니다:
청킹 전략:
• 고정 크기: 512~1024 토큰으로 균일 분할 (간단, 경계 문제)
• 의미 기반: 문단/섹션 단위 분할 (맥락 보존)
• 하이브리드: 의미 단위 + 오버랩 (검색 정확도 향상)
• 계층적: 문서→섹션→문단 계층 메타데이터 유지
4벡터 데이터베이스 선택
제조업 RAG 시스템에 적합한 벡터 DB 비교입니다:
| 벡터 DB | 특징 | 적합 상황 |
|---|---|---|
| Pinecone | 완전 관리형, 빠른 시작, 확장 용이 | 클라우드 OK, 빠른 PoC |
| Milvus | 오픈소스, 고성능, 온프레미스 가능 | 대규모, 보안 요건 |
| Chroma | 경량, 로컬 개발용, 빠른 프로토타이핑 | 개발/테스트 환경 |
| Weaviate | GraphQL API, 하이브리드 검색 | 복잡한 쿼리 필요 시 |
| Qdrant | Rust 기반 고성능, 필터링 강점 | 복잡한 메타데이터 필터 |
| pgvector | PostgreSQL 확장, 기존 DB 활용 | PostgreSQL 사용 환경 |
보안 고려: 제조 데이터의 민감성을 고려하여 온프레미스 배포(Milvus, Chroma) 또는 프라이빗 클라우드를 권장합니다. 외부 클라우드 사용 시 데이터 암호화와 접근 제어를 철저히 해야 합니다.
5임베딩 모델 선택
제조 문서에 적합한 임베딩 모델 선택 기준입니다:
| 임베딩 모델 | 차원 | 특징 |
|---|---|---|
| OpenAI text-embedding-3-large | 3072 | 최고 성능, API 비용 발생 |
| OpenAI text-embedding-3-small | 1536 | 비용 효율적, 충분한 성능 |
| Cohere embed-v3 | 1024 | 다국어 강점, 검색 특화 |
| sentence-transformers | 384-768 | 오픈소스, 로컬 실행 가능 |
| BGE (BAAI) | 1024 | 오픈소스, 영어 강점 |
| multilingual-e5 | 768 | 다국어, 오픈소스 |
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. 쿼리 변환
사용자 질문을 검색에 최적화된 형태로 변환하거나, 여러 개의 하위 쿼리로 분해합니다.
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)로 측정합니다. 제조업에서는 안전/품질 문서의 검색 정확도를 특히 중요하게 평가해야 합니다.