Preparación de los documentos y la base de datos vectorial
En los siguientes ejercicios, crearás un flujo de trabajo RAG completo para mantener una conversación con un documento PDF que contiene el artículo RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture_ de Balaguer et al. (2024). Esto funciona dividiendo los documentos en fragmentos, almacenándolos en una base de datos vectorial, definiendo un prompt para conectar los documentos recuperados y la entrada del usuario y creando una cadena de recuperación para que el LLM acceda a estos datos externos.
En este ejercicio, prepararás el documento para su almacenamiento y lo incorporarás a una base de datos vectorial Chroma. Utilizarás un RecursiveCharacterTextSplitter
para dividir el PDF en fragmentos y los incorporarás a una base de datos vectorial Chroma utilizando una función de incrustaciones de OpenAI. Al igual que con el resto del curso, no es necesario que proporciones tu propia clave API de OpenAI.
Las siguientes clases ya se han importado por ti: RecursiveCharacterTextSplitter
, Chroma
y OpenAIEmbeddings
.
Este ejercicio forma parte del curso
Desarrollo de aplicaciones LLM con LangChain
Instrucciones del ejercicio
- Divide los documentos en
data
utilizando un divisor de caracteres recursivo con unchunk_size
de300
ychunk_overlap
de50
; omite el argumentoseparators
, ya que el valor predeterminado es["\n\n", "\n", " ", ""]
. - Define un modelo de incrustaciones de OpenAI utilizando el marcador de posición
<OPENAI_API_TOKEN>
proporcionado y utilízalo para incrustar e incorporar los documentos en una base de datos Chroma. - Configura
vectorstore
como un objeto recuperador que devuelve los tres documentos principales para su uso en la cadena RAG final.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
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={____}
)