Подготовка документов и векторной базы данных
В следующих нескольких упражнениях вы построите полный RAG-рабочий процесс, чтобы вести диалог с PDF-документом, содержащим статью RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture авторства Balaguer et al. (2024). Принцип работы следующий: документы разбиваются на фрагменты, сохраняются в векторной базе данных, затем определяется промпт для связи найденных документов с запросом пользователя, и строится цепочка извлечения, через которую языковая модель получает доступ к внешним данным.
В этом упражнении вы подготовите документ для хранения и загрузите его в векторную базу данных Chroma. Для разбивки PDF на фрагменты используйте RecursiveCharacterTextSplitter, а для загрузки в Chroma — функцию эмбеддингов (векторных представлений) OpenAI. Как и в остальных упражнениях курса, предоставлять собственный ключ OpenAI API не нужно.
Следующие классы уже импортированы: RecursiveCharacterTextSplitter, Chroma и OpenAIEmbeddings.
Это упражнение является частью курса
Разработка LLM-приложений с помощью LangChain
Инструкции к упражнению
- Разбейте документы из
dataс помощьюRecursiveCharacterTextSplitter, задавchunk_sizeравным300иchunk_overlapравным50. - Используйте метод
.from_documents(), чтобы создать векторные представления документов и загрузить их в векторную базу данных Chroma с помощью предоставленной функции эмбеддингов OpenAI. - Настройте
vectorstoreкак объект-ретривер, который возвращает топ-3 документа для использования в финальной RAG-цепочке.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
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": ____}
)