Preparação dos documentos e do banco de dados vetorial
Nos próximos exercícios, você vai criar um fluxo de trabalho em RAG completo para conversar com um documento PDF que contém o artigo RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture, por Balaguer et al. (2024). Isso funciona dividindo os documentos em trechos, guardando-os em um banco de dados vetorial, definindo um prompt para conectar os documentos recuperados e a entrada do usuário e construindo uma cadeia de recuperação para que o LLM acesse esses dados externos.
Neste exercício, você vai preparar o documento para armazenamento e importá-lo para um banco de dados vetorial Chroma. Você vai usar um RecursiveCharacterTextSplitter
para dividir o PDF em trechos e colocá-los em um banco de dados vetorial Chroma usando uma função de embeddings da OpenAI. Assim como no restante do curso, você não precisa fornecer sua própria chave de API da OpenAI.
As seguintes classes já foram importadas para você: RecursiveCharacterTextSplitter
, Chroma
e OpenAIEmbeddings
.
Este exercício faz parte do curso
Desenvolvimento de aplicativos de LLM com LangChain
Instruções do exercício
- Divida os documentos em
data
usando um divisor de caracteres recursivo comchunk_size
de300
echunk_overlap
de50
; deixe o argumentoseparators
de fora, pois seu padrão é["\n\n", "\n", " ", ""]
. - Defina um modelo de embeddings da OpenAI usando o placeholder
<OPENAI_API_TOKEN>
fornecido e use-o para incorporar e inserir os documentos em um banco de dados Chroma. - Configure
vectorstore
em um objeto retriever que retorna os 3 primeiros documentos para usar na cadeia em RAG final.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
loader = PyPDFLoader('rag_vs_fine_tuning.pdf')
data = loader.load()
# Split the document using RecursiveCharacterTextSplitter
splitter = ____
docs = splitter.____(data)
# Embed the documents in a persistent Chroma vector database
embedding_function = OpenAIEmbeddings(api_key='', model='text-embedding-3-small')
vectorstore = Chroma.____(
____,
embedding=____,
persist_directory=os.getcwd()
)
# Configure the vector store as a retriever
retriever = ____(
search_type="similarity",
search_kwargs={____}
)