Preparar los documentos y la base de datos vectorial
En los próximos ejercicios, construirás un flujo de trabajo completo de RAG para mantener una conversación con un documento de PDF que contenga el documento, RAG VS Puesta a punto: Pipelines, Tradeoffs, and a Case Study on Agriculture por Balaguer et al. (2024). Esto funciona dividiendo los documentos en trozos, almacenándolos en una base de datos vectorial, definiendo un indicador para conectar los documentos recuperados y la entrada del usuario, y construyendo una cadena de recuperación para que el LLM acceda a estos datos externos.
En este ejercicio, prepararás el documento para almacenarlo e ingerirlo en una base de datos vectorial Chroma. Utilizarás un RecursiveCharacterTextSplitter
para trocear los PDF, e ingerirlos en una base de datos vectorial Chroma utilizando una función de incrustación de OpenAI. Como en el resto del curso, no necesitas proporcionar tu propia clave de la API de OpenAI.
Ya se han importado para ti las siguientes clases: RecursiveCharacterTextSplitter
, Chroma
, y OpenAIEmbeddings
.
Este ejercicio forma parte del curso
Desarrollar aplicaciones LLM con LangChain
Instrucciones de ejercicio
- Divide los documentos en
data
utilizando un divisor de caracteres recursivo con unchunk_size
de300
y unchunk_overlap
de50
; deja fuera el argumentoseparators
, ya que por defecto es["\n\n", "\n", " ", ""]
. - Define un modelo de incrustación OpenAI utilizando el marcador de posición
<OPENAI_API_TOKEN>
proporcionado y utilízalo para incrustar e ingerir los documentos en una base de datos Chroma. - Configura
vectorstore
en un objeto recuperador que devuelva los 3 documentos principales para utilizarlos en la cadena final RAG.
Ejercicio interactivo práctico
Pruebe este ejercicio completando este 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={____}
)