텍스트 스플리터 통합

텍스트 스플리터 통합

LangChain으로 텍스트 스플리터와 통합하는 방법을 알아봅니다.

npm install @langchain/textsplitters @langchain/core
# Requires Node.js 22+
pnpm add @langchain/textsplitters @langchain/core
# Requires Node.js 22+
yarn add @langchain/textsplitters @langchain/core
# Requires Node.js 22+
bun add @langchain/textsplitters @langchain/core
# Requires Node.js 22+

텍스트 스플리터는 큰 문서를 개별적으로 검색 가능하고 모델 컨텍스트 창 제한에 맞는 더 작은 청크로 나눕니다.

문서 분할에는 각각 장점이 있는 여러 전략이 있습니다.

대부분의 사용 사례에서는 RecursiveCharacterTextSplitter로 시작하세요. 컨텍스트 유지와 청크 크기 관리의 균형을 잘 잡습니다. 이 기본 전략은 바로 잘 작동하며, 특정 애플리케이션에 맞게 성능을 세밀하게 조정해야 하는 경우에만 조정을 고려하세요.

출처: 문서

본문

텍스트 구조 기반(Text structure-based)

텍스트는 단락, 문장, 단어 같은 계층적 단위로 자연스럽게 구성됩니다. 이 고유 구조를 활용해 자연어 흐름을 유지하고, 분할 내 의미적 일관성을 유지하며, 다양한 텍스트 세분성 수준에 적응하는 분할을 만들 수 있습니다. LangChain의 RecursiveCharacterTextSplitter는 이 개념을 구현합니다:

  • RecursiveCharacterTextSplitter는 더 큰 단위(예: 단락)를 온전하게 유지하려고 시도함.
  • 단위가 청크 크기를 초과하면 다음 수준(예: 문장)으로 이동함.
  • 필요하면 단어 수준까지 이 과정을 계속함.

사용 예시:

import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters";

const splitter = new RecursiveCharacterTextSplitter({ chunkSize: 100, chunkOverlap: 0 })
const texts = splitter.splitText(document)

사용 가능한 텍스트 스플리터:

길이 기반(Length-based)

문서를 길이에 따라 분할하는 것은 직관적인 전략입니다. 이 단순하면서도 효과적인 접근은 각 청크가 지정된 크기 제한을 초과하지 않도록 보장합니다. 길이 기반 분할의 주요 이점:

  • 구현이 간단함
  • 일관된 청크 크기
  • 다양한 모델 요구 사항에 쉽게 적응

길이 기반 분할 유형:

  • 토큰 기반: 토큰 수에 따라 텍스트를 분할하며, 언어 모델로 작업할 때 유용.
  • 문자 기반: 문자 수에 따라 텍스트를 분할하며, 다양한 유형의 텍스트에 걸쳐 더 일관적일 수 있음.

LangChain의 CharacterTextSplitter를 토큰 기반 분할과 함께 사용하는 예시 구현:

import { TokenTextSplitter } from "@langchain/textsplitters";

const splitter = new TokenTextSplitter({ encodingName: "cl100k_base", chunkSize: 100, chunkOverlap: 0 })
const texts = splitter.splitText(document)

사용 가능한 텍스트 스플리터:

문서 구조 기반(Document structure-based)

일부 문서는 HTML, Markdown, JSON 파일처럼 고유한 구조를 갖습니다. 이러한 경우 텍스트를 의미적으로 관련된 부분으로 자연스럽게 그룹화하는 경우가 많으므로 문서를 구조에 따라 분할하는 것이 유익합니다. 구조 기반 분할의 주요 이점:

  • 문서의 논리적 구성 보존
  • 각 청크 내 컨텍스트 유지
  • 검색이나 요약 같은 다운스트림 작업에 더 효과적일 수 있음

사용 가능한 텍스트 스플리터:

더 알아보기 (Learn more)