시작하기무료로 시작하기

문서와 벡터 데이터베이스 준비하기

앞으로의 몇 가지 연습 문제에서, Balaguer 외 (2024)의 논문인 RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture 가 담긴 PDF 문서와 대화하는 완전한 RAG 워크플로를 구축해 보겠습니다. 이 과정은 문서를 청크로 분할하고, 벡터 데이터베이스에 저장한 다음, 검색된 문서와 사용자 입력을 연결하는 프롬프트를 정의하고, LLM이 이 외부 데이터에 접근할 수 있도록 검색 체인을 구성하는 방식으로 동작합니다.

이번 연습에서는 문서를 저장할 수 있도록 준비하고, 이를 Chroma 벡터 데이터베이스에 적재합니다. RecursiveCharacterTextSplitter로 PDF를 청크로 나누고, OpenAI 임베딩 함수를 사용해 Chroma 벡터 데이터베이스에 적재할 거예요. 이 강의 전반과 마찬가지로, OpenAI API 키를 직접 제공하실 필요는 없습니다.

다음 클래스는 이미 임포트되어 있습니다: RecursiveCharacterTextSplitter, Chroma, OpenAIEmbeddings.

이 연습은 강의의 일부입니다

LangChain으로 LLM 애플리케이션 개발하기

강의 보기

연습 안내

  • RecursiveCharacterTextSplitter를 사용해 data의 문서를 chunk_size300, chunk_overlap50으로 설정하여 분할하세요.
  • 제공된 OpenAI 임베딩 함수를 사용해 .from_documents() 메서드로 문서를 임베딩하고 Chroma 벡터 데이터베이스에 적재하세요.
  • vectorstore를 최종 RAG 체인에서 사용할 상위 3개 문서를 반환하는 retriever 객체로 구성하세요.

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

loader = PyPDFLoader('rag_vs_fine_tuning.pdf')
data = loader.load()

# Split the document using RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
    chunk_size=____,
    chunk_overlap=____)
docs = splitter.split_documents(data) 

# Embed the documents in a persistent Chroma vector database
embedding_function = OpenAIEmbeddings(api_key='', model='text-embedding-3-small')
vectorstore = Chroma.____(
    docs,
    embedding=embedding_function,
    persist_directory=os.getcwd()
)

# Configure the vector store as a retriever
retriever = vectorstore.as_retriever(
    search_type="similarity",
    search_kwargs={"k": ____}
)
코드 편집 및 실행