НачатьНачать бесплатно

Подготовка документов и векторной базы данных

В следующих нескольких упражнениях вы построите полный 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": ____}
)
Редактировать и запускать код