티스토리 뷰
project/LLM + RAG + Ollama + NestJS 백엔드 연동 실습
📘 시리즈: LLM + RAG + Ollama + NestJS 백엔드 연동 실습 - 7. 문서 분할(Chunking)과 전처리 – RAG 성능 최적화 전략
octo54 2025. 7. 4. 17:43반응형
📘 시리즈: LLM + RAG + Ollama + NestJS 백엔드 연동 실습
7. 문서 분할(Chunking)과 전처리 – RAG 성능 최적화 전략
🎯 목표
이 글에서는 AI가 더 정확하고 유의미한 응답을 할 수 있도록,
문서 임베딩 전에 텍스트를 잘게 나누고(clean),
벡터 저장 성능과 검색 정확도를 높이는 기법을 소개합니다.
🧠 왜 문서 분할이 필요한가?
- LLM의 입력 토큰 제한 존재
- 한 번에 너무 많은 정보를 주면 정답률 저하
- 벡터 검색에서 짧고 명확한 의미 단위가 더 유리
✂️ 문서 분할 전략
1. 고정 길이 분할 (Fixed-size chunking)
const splitter = new RecursiveCharacterTextSplitter({
chunkSize: 500, // 기본 500자 내외
chunkOverlap: 50, // 앞뒤 50자 겹치기
});
const docs = await splitter.createDocuments([text]);
💡 chunkOverlap은 문맥 연결을 위해 중요
2. 헤더 기반 분할 (Markdown, 법률문서 등)
반응형
const splitter = new MarkdownTextSplitter();
const docs = await splitter.createDocuments([text]);
langchain/text_splitter의 다양한 전략 사용 가능
XML, JSON, Code Splitter도 지원
🧹 전처리 전략 (Preprocessing)
전처리를 통해 불필요한 정보 제거 + 품질 향상:
- 공백, 특수문자 정리
- 목차, 페이지 번호 제거
- 긴 숫자열, 반복 단어 제거
예시:
function cleanText(text: string) {
return text
.replace(/\s+/g, ' ')
.replace(/Page \d+/g, '')
.replace(/-{3,}/g, '')
.trim();
}
🏗️ 전체 흐름: 분할 → 정제 → 임베딩
const rawText = await parsePdf(filePath);
const cleaned = cleanText(rawText);
const splitter = new RecursiveCharacterTextSplitter({ chunkSize: 500 });
const chunks = await splitter.createDocuments([cleaned]);
await this.vectorStore.addDocuments(chunks);
🧪 실전 테스트 팁
- 비즈니스 보고서, 백서, 기술문서 등에 chunk 적용해 비교
- 유사도 검색 결과의 품질을 직접 비교해보세요
- similaritySearch() 시 검색 수(k)를 2~5로 조정하면서 확인
✅ 마무리
- 문서 chunking은 RAG의 핵심 성능 요소입니다
- 잘 쪼갤수록 더 정확하고 빠른 검색이 가능해집니다
- 다음 단계는 문서 메타데이터 태깅, 캐시 전략으로 넘어갑니다
문서 chunking,RAG 성능 최적화,LangChain 텍스트 분할,AI 문서 전처리,NestJS LangChain 활용,텍스트 임베딩 품질 개선,LLM 입력 최적화,AI 검색 정확도 향상,RAG 검색 최적화 전략,LangChain chunk 실습
'project > LLM + RAG + Ollama + NestJS 백엔드 연동 실습' 카테고리의 다른 글
※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 프론트엔드면접
- kotlin
- REACT
- 파이썬알고리즘
- fastapi
- NestJS
- SEO 최적화
- rag
- Next.js
- PostgreSQL
- 프론트엔드
- 웹개발
- llm
- nodejs
- Ktor
- 백엔드개발
- App Router
- Python
- flax
- 개발블로그
- Prisma
- seo 최적화 10개
- Docker
- SEO최적화
- AI챗봇
- gatsbyjs
- 딥러닝
- CI/CD
- JAX
- nextJS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
글 보관함
반응형