RAG2026-5일5차시 · LangChain 입문7 / 16← 이전목차다음 →MetaContents

5차시. LangChain 입문

4. 첫 번째 LangChain 프로젝트

출처: 원본 PDF 05차시_LangChain입문RAG의마법도구.pdf 4~5쪽 · 쪽 그림 4쪽 5쪽

이제 실제 코드를 작성해봅시다.

4-1) 준비 단계

​1. VSCode에서 RAG_Project 폴더 열기
​2. 가상환경 활성화
​3. data 폴더에 sample.txt 파일 생성

sample.txt 내용

출력
우리 회사는 2024년에 설립되었습니다. AI로 사회에 기여합니다.
제품 A: 가격 100,000원, 색상 검은색/흰색, 보증 2년
서비스: 24시간 지원, support@company.com, 반환정책 30일

4-2) load_and_split.py 작성

출처: 원본 PDF 5쪽

src/load_and_split.py

Python
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

print("LangChain 테스트")

# 1단계: 문서 로드
loader = TextLoader("data/sample.txt")
documents = loader.load()
print(f"문서 개수: {len(documents)}")

# 2단계: 텍스트 분할
splitter = RecursiveCharacterTextSplitter(
    chunk_size=150,
    chunk_overlap=30
)
chunks = splitter.split_documents(documents)
print(f"chunk 개수: {len(chunks)}")

# 3단계: 결과 확인
for i, chunk in enumerate(chunks, 1):
    print(f"Chunk {i}: {len(chunk.page_content)} 글자")

실행 결과 예시 (코드를 읽고 만든 예상 화면입니다. 실제 실행 결과, 특히 모델의 답은 다를 수 있습니다)

출력
LangChain 테스트
문서 개수: 1
chunk 개수: 2
Chunk 1: 144 글자
Chunk 2: 93 글자

실습 코드 · 05/load_and_split.py

실습 코드: 실습/src/05/load_and_split.py · 위의 원본 PDF 5차시 5쪽 「4-2) load_and_split.py 작성」과 이어집니다.

Python
# ============================================================
# 5차시 | PPT: 05차시_LangChain입문.pptx
# 역할: 안내문을 읽어 짧은 조각(chunk)으로 나누고 겹침(overlap)을 확인
# 입력: ../../data/notice.txt
# 출력: 조각 개수와 각 조각의 본문
# 흐름:
#   notice.txt
#     -> TextLoader.load()  -> Document
#     -> RecursiveCharacterTextSplitter
#     -> chunk 리스트 -> print
# ============================================================
# Document: 본문(page_content)과 부가 정보(metadata)를 묶은 객체
# chunk: 긴 글을 검색하기 좋게 잘라 낸 조각. 여기서도 Document입니다.
# overlap: 앞 조각의 끝과 다음 조각의 시작이 같은 글자로 겹치는 길이

# 읽는 도구(TextLoader)와 자르는 도구(Splitter)는 서로 다른 패키지에 들어 있습니다.
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter

# src/05 폴더에서 실행해야 이 상대 경로가 실습/data/notice.txt를 가리킵니다.
# 한글 파일이므로 encoding="utf-8"을 꼭 적습니다.
loader = TextLoader(
    "../../data/notice.txt",
    encoding="utf-8"
)

# TXT 파일 하나라서 Document 1개짜리 리스트가 돌아옵니다.
documents = loader.load()

# 문서를 청크로 나누기
# chunk_size: 한 조각의 최대 글자 수. chunk_overlap: 이웃 조각과 겹치는 글자 수.
# 문단, 줄, 문장 경계를 먼저 찾아 자르므로 조각 길이가 정확히 150자가 되지는 않습니다.
splitter = RecursiveCharacterTextSplitter(
    chunk_size = 150,
    chunk_overlap = 30,
)

# 변수 이름은 chuncks입니다. split_documents는 Document 리스트를 돌려줍니다.
chuncks = splitter.split_documents(documents)
print("="*50)
print(f" chunk 갯수 => {len(chuncks)}")
# enumerate(리스트, 1)은 1번부터 번호를 붙입니다.
for i, chunck in enumerate(chuncks, 1):
    # 조각도 Document이므로 본문은 page_content로 꺼냅니다.
    # [1]의 끝부분이 [2]의 앞에 다시 나오면 overlap이 작동한 것입니다.
    print(f"[{i}] \n {chunck.page_content}")
    print()

실행 결과 샘플 (교안 기록. API 키가 필요한 코드는 키 없이 맞춘 예시이고, 모델의 답은 실행할 때마다 달라집니다)

출력
===== 실행 결과 샘플 =====
실행: cd 실습/src/05
      python load_and_split.py
==================================================
 chunk 갯수 => 2
[1]
 [고객 안내문]
1. 환불 규정
상품 수령 후 7일 이내에 환불을 신청하실 수 있습니다.
단순 변심의 경우 왕복 배송비는 고객 부담입니다.
2. 교환 규정
상품 불량의 경우 30일 이내에 교환이 가능합니다.
이 경우 배송비는 당사가 부담합니다.
3. 고객센터

[2]
 이 경우 배송비는 당사가 부담합니다.
3. 고객센터
운영 시간은 평일 09:00 ~ 18:00 입니다.
전화 1588-0000 / 이메일 help@example.com

코드 해설

안내문을 읽어 짧은 조각(chunk)으로 나누고 겹침(overlap)을 확인입니다. 입력은 ../../data/notice.txt이고, 출력은 조각 개수와 각 조각의 본문입니다.

주석에 적힌 흐름입니다.

출력
notice.txt
-> TextLoader.load()  -> Document
-> RecursiveCharacterTextSplitter
-> chunk 리스트 -> print

코드 앞에서 고정해 두는 말입니다.

  • Document: 본문(page_content)과 부가 정보(metadata)를 묶은 객체
  • chunk: 긴 글을 검색하기 좋게 잘라 낸 조각. 여기서도 Document입니다.
  • overlap: 앞 조각의 끝과 다음 조각의 시작이 같은 글자로 겹치는 길이

함수로 나누지 않고 위에서 아래로 실행됩니다.

  • splitter = RecursiveCharacterTextSplitter( — 문서를 청크로 나누기 chunk_size: 한 조각의 최대 글자 수. chunk_overlap: 이웃 조각과 겹치는 글자 수.
  • chuncks = splitter.split_documents(documents) — 변수 이름은 chuncks입니다. split_documents는 Document 리스트를 돌려줍니다.
  • for i, chunck in enumerate(chuncks, 1): — enumerate(리스트, 1)은 1번부터 번호를 붙입니다.

파일 맨 아래 실행 결과 샘플 주석은 실행되지 않습니다. 화면 출력은 다음 절에 다시 적어 두었습니다.

4-3) 코드 실행

출처: 원본 PDF 5쪽

출력
cd RAG_Project
source venv/bin/activate
python src/load_and_split.py
← 이전 절5차시 · 3. Text Splitter — 문서 분할다음 절 →5차시 · 5. Prompt Template 사용하기