문서와 벡터 데이터베이스 준비하기
앞으로의 몇 가지 연습 문제에서, 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_size를300,chunk_overlap을50으로 설정하여 분할하세요.- 제공된 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": ____}
)