# ============================================================
# [실습] 문서 전처리와 청킹 전략 (슬라이딩 윈도우)
#
# 아래 항목을 직접 구현해 완성하세요:
#  1) chunk_text(text, chunk_size, overlap): 시작 위치부터 chunk_size 만큼 잘라 청크를 만들고, (chunk_size - overlap)만큼 전진하며 문서 끝까지 반복해 겹치는 청크 리스트를 반환한다.
#  2) 예시 긴 텍스트를 준비해 chunk_text 로 나누고, 청크 개수와 각 청크의 앞부분을 출력한다.
# ============================================================


def chunk_text(text, chunk_size=300, overlap=50):
    # 1) 여기에 코드를 작성하세요
    pass


document = (
    "검색 증강 생성(RAG)은 대규모 언어 모델이 답변을 생성하기 전에 외부 문서에서 관련 정보를 "
    "먼저 찾아오는 기법이다. 모델이 학습 시점 이후의 최신 정보나, 학습 데이터에 없던 사내 문서까지 "
    "다룰 수 있게 해 주며, 답변의 근거가 된 문서를 출처로 제시할 수 있어 신뢰성을 높인다. "
    "RAG 파이프라인은 크게 두 단계로 나뉜다. 인제스션 단계에서는 원본 문서를 적당한 크기의 청크로 "
    "나누고, 각 청크를 임베딩 모델로 벡터화해 벡터 데이터베이스에 저장한다. 이때 청크가 너무 크면 "
    "검색 정확도가 떨어지고 너무 작으면 문맥이 끊기므로, 적절한 크기와 겹침을 정하는 것이 중요하다. "
    "질의 단계에서는 사용자의 질문을 같은 임베딩 모델로 벡터화하고, 저장된 청크 중 가장 가까운 것들을 "
    "찾아 프롬프트에 함께 넣어, 모델이 그 근거를 바탕으로 답하게 한다. 이처럼 검색 품질은 청크 크기와 "
    "겹침, 그리고 임베딩 모델의 성능에 크게 좌우되므로, 실제 서비스에서는 문서의 특성에 맞춰 이 값들을 "
    "실험적으로 조정하는 경우가 많다."
)

# 2) 여기에 코드를 작성하세요 (위 document 를 chunk_text 로 분할 → 청크 개수와 각 청크 앞부분 출력)
