Lo que vas a construir
Un sistema RAG (Retrieval-Augmented Generation) que responde preguntas sobre tus propios documentos PDF.
Cargas tus PDFs (contratos, manuales, documentacion), y puedes preguntarle cosas como "Cual es la politica de devolucion?" o "Que dice el articulo 5?". El sistema busca en tus documentos, encuentra la informacion relevante, y genera una respuesta precisa usando IA.
Al terminar tendras un script en Python que procesa PDFs, crea embeddings con Gemini, los guarda en ChromaDB, y responde preguntas basandose en el contenido real de tus documentos.
El prompt para empezar
Crea un sistema RAG en Python que:
- Cargue PDFs de una carpeta
- Los divida en chunks de 500 caracteres
- Cree embeddings con Gemini
- Guarde en ChromaDB
- Permita hacer preguntas y obtenga contexto relevante
- Use Gemini para responder basándose en el contexto
Lo que la IA creará
from PyPDF2 import PdfReader
import chromadb
from chromadb.utils import embedding_functions
import google.generativeai as genai
import os
# Configurar
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
model = genai.GenerativeModel("gemini-1.5-flash")
# ChromaDB con embeddings de Gemini
client = chromadb.Client()
gemini_ef = embedding_functions.GoogleGenerativeAiEmbeddingFunction(
api_key=os.environ["GEMINI_API_KEY"]
)
collection = client.create_collection("docs", embedding_function=gemini_ef)
def load_pdfs(folder: str) -> list[str]:
"""Cargar todos los PDFs de una carpeta"""
chunks = []
for file in os.listdir(folder):
if file.endswith(".pdf"):
reader = PdfReader(os.path.join(folder, file))
text = "".join(page.extract_text() for page in reader.pages)
# Dividir en chunks
for i in range(0, len(text), 500):
chunks.append(text[i:i+500])
return chunks
def index_documents(folder: str):
"""Indexar documentos en ChromaDB"""
chunks = load_pdfs(folder)
collection.add(
documents=chunks,
ids=[f"chunk_{i}" for i in range(len(chunks))]
)
print(f"Indexados {len(chunks)} chunks")
def ask(question: str) -> str:
"""Preguntar al RAG"""
# Buscar contexto relevante
results = collection.query(
query_texts=[question],
n_results=3
)
context = "\n---\n".join(results["documents"][0])
# Generar respuesta con contexto
prompt = f"""Responde usando SOLO la información del contexto.
Si no está en el contexto, di "No tengo esa información".
CONTEXTO:
{context}
PREGUNTA: {question}"""
response = model.generate_content(prompt)
return response.text
# Uso
index_documents("./mis_documentos")
respuesta = ask("¿Cuál es el proceso de onboarding?")
print(respuesta)
Instalación
pip install PyPDF2 chromadb google-generativeai
Mejoras sugeridas
| Mejora | Descripción |
|---|---|
| Chunks semánticos | Dividir por párrafos |
| Metadata | Guardar nombre de archivo |
| Reranking | Reordenar resultados |
| Streaming | Respuesta en tiempo real |