En este tutorial, construiremos una generación de recuperación totalmente funcional (TRAPO) tubería utilizando herramientas de código abierto que se ejecutan perfectamente en Google Colab. Primero, analizaremos cómo configurar Ollama y usar modelos a través de Colab. Integrando el modelo de lenguaje grande Deepseek-R1 1.5B servido a través de Ollama, la orquestación modular de Langchain y la tienda ChromAdB Vector de alto rendimiento permite a los usuarios consultar información en tiempo real extraída de PDF cargados. Con una combinación de razonamiento y recuperación del modelo de idioma local de datos de hecho de documentos PDF, la tubería demuestra una alternativa poderosa, privada y rentable.
!pip install colab-xterm
%load_ext colabxterm
Utilizamos la extensión COLAB-XMM para habilitar el acceso terminal directamente dentro del entorno de Colab. Al instalarlo con! Pip Instale colaboración y cargándola a través de %Load_ext Colabxterm, los usuarios pueden abrir una ventana de terminal interactiva dentro de Colab, lo que facilita la ejecución de comandos como Llama Servir o monitorear los procesos locales.
El comando Magic %xterm se usa después de cargar la extensión de colaboración para iniciar una ventana de terminal interactiva dentro de la interfaz de cuaderno Colab. Esto permite a los usuarios ejecutar comandos de shell en tiempo real, al igual que una terminal regular, lo que lo hace especialmente útil para ejecutar servicios de fondo como Llama Servir, administrar archivos o depurar operaciones a nivel de sistema sin salir del cuaderno.
Aquí, instalamos ollama usando curl https://ollama.ai/install.sh | mierda
Luego, comenzamos el Ollama usando el servicio Ollama.
Por fin, descargamos el Deepseek-R1: 1.5b a través de Ollama localmente que se puede utilizar para construir la tubería RAG.
!pip install langchain langchain-community sentence-transformers chromadb faiss-cpu
Para configurar los componentes centrales de la tubería RAG, instalamos bibliotecas esenciales, que incluyen Langchain, Langchain-Community, Formsformers, ChromAdB y Faiss-CPU. Estos paquetes permiten el procesamiento de documentos, la incrustación, el almacenamiento vectorial y las funcionalidades de recuperación requeridas para construir un sistema de RAG local eficiente y modular.
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.llms import Ollama
from langchain.chains import RetrievalQA
from google.colab import files
import os
from langchain_core.prompts import ChatPromptTemplate
from langchain_ollama.llms import OllamaLLM
Importamos módulos clave de las bibliotecas de Langchain-Community y Langchain-Lollama para manejar la carga PDF, la división de texto, la generación de incrustaciones, el almacenamiento vectorial con Chroma e integración LLM a través de ollama. También incluye la utilidad de carga de archivos de Colab y las plantillas de inmediato, lo que permite un flujo sin problemas de la ingestión de documentos a la respuesta de consulta utilizando un modelo alojado localmente.
print("Please upload your PDF file...")
uploaded = files.upload()
file_path = list(uploaded.keys())[0]
print(f"File '{file_path}' successfully uploaded.")
if not file_path.lower().endswith('.pdf'):
print("Warning: Uploaded file is not a PDF. This may cause issues.")
Para permitir a los usuarios agregar sus fuentes de conocimiento, solicitamos una carga PDF usando Google.Colab.Files.UPLOAD (). Verifica el tipo de archivo cargado y proporciona retroalimentación, asegurando que solo los PDF se procesen para una mayor incrustación y recuperación.
!pip install pypdf
import pypdf
loader = PyPDFLoader(file_path)
documents = loader.load()
print(f"Successfully loaded {len(documents)} pages from PDF")
Para extraer contenido del PDF cargado, instalamos la biblioteca PYPDF y usamos pypdfloader de langchain para cargar el documento. Este proceso convierte cada página del PDF en un formato estructurado, lo que permite tareas aguas abajo como la división e incrustación de texto.
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
chunks = text_splitter.split_documents(documents)
print(f"Split documents into {len(chunks)} chunks")
El PDF cargado se divide en trozos manejables utilizando RecursIvecharacterTextSplitter, con cada fragmento de 1000 caracteres y una superposición de 200 caracteres. Esto garantiza una mejor retención de contexto entre los fragmentos, lo que mejora la relevancia de los pasajes recuperados durante la respuesta a las preguntas.
embeddings = HuggingFaceEmbeddings(
model_name="all-MiniLM-L6-v2",
model_kwargs={'device': 'cpu'}
)
persist_directory = "./chroma_db"
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
persist_directory=persist_directory
)
vectorstore.persist()
print(f"Vector store created and persisted to {persist_directory}")
Los fragmentos de texto están integrados utilizando el modelo All-Minilm-L6-V2 de los transformadores de oraciones, que se ejecutan en CPU para habilitar la búsqueda semántica. Estas integridades se almacenan en una tienda de vectores ChromadB persistente, lo que permite una recuperación eficiente basada en similitud en las sesiones.
llm = OllamaLLM(model="deepseek-r1:1.5b")
retriever = vectorstore.as_retriever(
search_type="similarity",
search_kwargs={"k": 3}
)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
return_source_documents=True
)
print("RAG pipeline created successfully!")
La tubería RAG se finaliza conectando el modelo local Deepseek-R1 (a través de Ollamallm) con el Retriever basado en Chroma. Utilizando la cadena de recuperación de Langchain con una estrategia de “cosas”, el modelo recupera los 3 trozos más relevantes para una consulta y genera respuestas conscientes del contexto, completando la configuración local del trapo.
def query_rag(question):
result = qa_chain({"query": question})
print("nQuestion:", question)
print("nAnswer:", result["result"])
print("nSources:")
for i, doc in enumerate(result["source_documents"]):
print(f"Source {i+1}:n{doc.page_content[:200]}...n")
return result
question = "What is the main topic of this document?"
result = query_rag(question)
Para probar la tubería RAG, una función de consulta_RAG toma una pregunta del usuario, recupera el contexto relevante usando el Retriever y genera una respuesta utilizando el LLM. También muestra los documentos de origen superior, proporcionando transparencia y trazabilidad para la respuesta del modelo.
En conclusión, este tutorial combina ollama, el poder de recuperación de ChromadB, las capacidades de orquestación de Langchain y las habilidades de razonamiento de Deepseek-R1 a través de Ollama. Mostró el edificio de un sistema de trapo liviano pero potente que funciona de manera eficiente en el nivel gratuito de Google Colab. La solución permite a los usuarios hacer preguntas basadas en el contenido actualizado de los documentos cargados, con respuestas generadas a través de una LLM local. Esta arquitectura proporciona una base para la construcción de asistentes de IA escalables, personalizables y amigables con la privacidad sin incurrir en costos de nubes o comprometer el rendimiento.
Aquí está el Cuaderno de colab. Además, no olvides seguirnos Gorjeo y únete a nuestro Canal de telegrama y LinkedIn GRsalpicar. No olvides unirte a nuestro 85k+ ml de subreddit.
Asif Razzaq es el CEO de MarktechPost Media Inc .. Como empresario e ingeniero visionario, ASIF se compromete a aprovechar el potencial de la inteligencia artificial para el bien social. Su esfuerzo más reciente es el lanzamiento de una plataforma de medios de inteligencia artificial, MarktechPost, que se destaca por su cobertura profunda de noticias de aprendizaje automático y de aprendizaje profundo que es técnicamente sólido y fácilmente comprensible por una audiencia amplia. La plataforma cuenta con más de 2 millones de vistas mensuales, ilustrando su popularidad entre el público.