Parte 2 de 5: Generación Aumentada por Recuperación
¡Bienvenido de nuevo! Hoy nos sumergiremos en sistemas RAG — una de las formas más prácticas de hacer que la IA sea útil para las necesidades específicas de tu negocio.
¿Qué es exactamente RAG?
Déjame explicarte RAG con una analogía simple. Imagina que estás tomando un examen con libros abiertos. En lugar de depender solo de lo que memorizaste, puedes buscar información en tus libros de texto para dar respuestas mejores y más precisas. Eso es esencialmente lo que RAG hace para los modelos de IA.
RAG = Modelo de IA + Tu Base de Conocimiento Personalizada
El modelo de IA proporciona la "inteligencia" para entender preguntas y generar respuestas similares a las humanas, mientras que tu base de conocimiento proporciona información específica y actualizada sobre tu negocio.
¿Por qué deberías importarte RAG?
Aquí está el punto sobre modelos de lenguaje grandes como ChatGPT — son increíblemente inteligentes, pero no saben nada sobre tu negocio específico. No pueden informar a los clientes sobre las características más recientes de tu producto, tus políticas de empresa, o responder preguntas usando tu documentación interna.
RAG resuelve esto al:
- Hacer que las respuestas de IA sean más precisas y relevantes para tu negocio
- Mantener la información actualizada (solo actualiza tus documentos, no necesita reentrenamiento)
- Proporcionar transparencia (puedes ver qué documentos utilizó la IA para responder)
- Ser rentable (mucho más barato que ajustar modelos grandes)
Construyamos uno juntos
Te mostraré cómo construir un sistema RAG usando Gemini AI de Google. Crearemos un sistema que pueda responder preguntas sobre "MyNextDeveloper". Aquí está el proceso paso a paso:
Paso 1: Instala las herramientas requeridas
!pip install -q -U google-generativeai langchain-google-genai langchain faiss-cpu pypdf langchain-community
Estas librerías harán el trabajo pesado por nosotros:
- google-generativeai: Acceso a los modelos Gemini de Google
- langchain-google-genai: Integración de Gemini con LangChain
- LangChain: Marco de trabajo para construir aplicaciones de IA
- FAISS: Búsqueda de similitud rápida (encontrar documentos relevantes)
Paso 2: Configura la API de Google AI
import os from google.colab import userdata import google.generativeai as genaiGOOGLE_API_KEY = userdata.get('GOOGLE_API_KEY') genai.configure(api_key=GOOGLE_API_KEY)
Necesitarás obtener una clave de API gratuita de Google AI Studio y añadirla a tu entorno.
Paso 3: Prepara tu base de conocimiento
raw_text = """ MyNextDeveloper (MND) is a remote-first tech company founded in 2022 in Mumbai. They focus on supplying pre-vetted, highly skilled developers to startups. Their mission is to solve the trust gap between startups and engineers by emphasizing empathy, communication, and transparency.The company promotes agile practices, test-driven development, and POSH-compliant culture. MND offers services like staff augmentation, API and web development, UI/UX design, and AI/ML solutions. Their tech stack includes Angular, React, Next.js, Node.js, Django, Python, Docker, and AWS. Clients appreciate their transparency and delivery quality. Project pricing starts at $10,000 with hourly rates between $25 and $49. MND claims startups can save up to 30% through their freelance model. They operate globally, serving startups, Y Combinator and Techstars alumni. It is headquartered in Malabar Hill, Mumbai. """# Convierte a Documento de LangChain from langchain_core.documents import Document documents = [Document(page_content=raw_text)] print(f"Loaded {len(documents)} document(s).")
En una aplicación real, esto sería tu documentación de producto, FAQ, políticas de empresa, o cualquier información basada en texto sobre tu negocio.
Paso 4: Divide la información en fragmentos
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter( chunk_size=300, chunk_overlap=50, length_function=len, add_start_index=True, )
chunks = text_splitter.split_documents(documents)
print(f"Split into {len(chunks)} chunks.")
¿Por qué dividimos el texto? Los modelos de IA funcionan mejor con piezas más pequeñas y enfocadas de información. El chunk_overlap=50 asegura que no perdamos contexto en los límites de los fragmentos, mientras que add_start_index=True nos ayuda a rastrear de dónde proviene la información.
Paso 5: Crea incrustaciones y almacén de vectores
from langchain_google_genai import GoogleGenerativeAIEmbeddings from langchain_community.vectorstores import FAISS
embeddings = GoogleGenerativeAIEmbeddings( model="models/embedding-001", google_api_key=GOOGLE_API_KEY )
print("Creating FAISS vector store...")
vector_store = FAISS.from_documents(chunks, embeddings)
print("FAISS vector store created.")
El paso más importante. Cada fragmento de texto se convierte en un "vector" (representación numérica). Cuando alguien hace una pregunta, encontramos los fragmentos con vectores más similares al vector de la pregunta.
Paso 6: Configura el sistema de preguntas y respuestas
from langchain_google_genai import ChatGoogleGenerativeAI from langchain.chains import RetrievalQA from langchain_core.prompts import PromptTemplate
retriever = vector_store.as_retriever(search_kwargs={"k": 3})
llm = ChatGoogleGenerativeAI( model="gemini-1.5-flash", temperature=0.3, google_api_key=GOOGLE_API_KEY )
prompt_template = """ You are an AI assistant that answers questions based on the provided context. If the answer is not available in the context, politely state that you don't know.
Context:
{context}
Question:
{question}
Answer: """ RAG_PROMPT = PromptTemplate.from_template(prompt_template)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
return_source_documents=True,
chain_type_kwargs={"prompt": RAG_PROMPT}
)
El temperature=0.3 mantiene las respuestas enfocadas y factuales, mientras que search_kwargs={"k": 3} significa que recuperaremos los 3 fragmentos más relevantes para cada pregunta.
Paso 7: Pruébalo
questions = [ "What does MyNextDeveloper (MND) do?", "Where is MND headquartered?", "What services does MND offer?", "What technologies does MND use?", "How does MND help startups save money?", "What is the capital of France?" # This should trigger "I don't know" ]
for i, question in enumerate(questions):
print(f"nQuestion {i+1}: {question}")
response = qa_chain.invoke({"query": question})
print(f"Answer: {response['result']}")
if 'source_documents' in response:
print("Source Documents:")
for doc in response['source_documents']:
print(f"- Content (truncated): {doc.page_content[:150]}...")
Salida de ejemplo:
Question 1: What does MyNextDeveloper (MND) do? Answer: MyNextDeveloper (MND) is a remote-first tech company that supplies pre-vetted, highly skilled developers to startups. They offer services such as staff augmentation, API and web development, UI/UX design, and AI/ML solutions. Their goal is to bridge the trust gap between startups and engineers through empathy, communication, and transparency.
Question 6: What is the capital of France? Answer: I'm sorry, but I don't know the capital of France. The provided text is about a company called MND and doesn't contain information about France's capital.
Observa cómo el sistema responde correctamente preguntas sobre MND pero rechaza cortésmente responder preguntas fuera de su base de conocimiento.
Google Colab
Aquí está el enlace de google colab de este artículo que se puede ejecutar en un clic: enlace
Aplicaciones en el mundo real
Aquí hay algunas formas prácticas en que puedes usar sistemas RAG:
Atención al cliente: Carga tu FAQ, manuales de producto y tickets de soporte. Deja que la IA maneje preguntas comunes 24/7.
Base de conocimiento interna: Carga políticas de empresa, procedimientos y documentación. Los empleados pueden hacer preguntas en lenguaje natural en lugar de buscar entre archivos.
Asistente de ventas: Carga especificaciones de producto, precios y estudios de casos. Tu equipo de ventas obtiene acceso instantáneo a cualquier información que necesite durante las llamadas.
Creación de contenido: Carga tu contenido existente, publicaciones de blog y materiales de marketing. Genera nuevo contenido que sea consistente con la voz de tu marca.
Las limitaciones (seamos honestos)
RAG no es perfecto:
- La calidad depende de tus datos: Basura dentro, basura fuera
- Puede alucinar: A veces la IA puede inventar información que suena plausible
- Requiere mantenimiento: Necesitas mantener tu base de conocimiento actualizada
- Consideraciones de costo: Las llamadas a API pueden sumar con uso intensivo
Perspectivas clave de implementación
De nuestro ejemplo funcional, aquí hay algunas consideraciones técnicas importantes:
El tamaño del fragmento importa: Usamos 300 caracteres con superposición de 50 caracteres. Esto equilibra la preservación del contexto con la precisión de recuperación.
Calidad de incrustación: El modelo embedding-001 de Google proporciona buenas incrustaciones de propósito general, pero podrías necesitar incrustaciones específicas del dominio para contenido especializado.
Estrategia de recuperación: El parámetro k=3 significa que recuperamos los 3 fragmentos más relevantes. Puedes ajustar esto según tu caso de uso.
Ingeniería de prompts: Nuestro prompt le dice explícitamente a la IA que diga "No sé" cuando la información no está disponible. Esto previene alucinaciones.
Consejos para el éxito
- Comienza poco a poco: Empieza con un caso de uso específico en lugar de intentar cubrirlo todo
- Mantén documentos actualizados: La información desactualizada lleva a usuarios frustrados
- Prueba extensivamente: Intenta muchas preguntas diferentes para entender dónde funciona bien tu sistema y dónde no
- Monitorea el uso: Presta atención a qué preguntas hace la gente para mejorar tu base de conocimiento
- Itera el tamaño del fragmento: Experimenta con diferentes tamaños de fragmento y valores de superposición para tu contenido específico
Qué viene después
En nuestro próximo artículo, exploraremos ajuste fino — tomar un modelo de IA existente y entrenarlo específicamente para tu caso de uso. Mientras que RAG le da a la IA acceso a tu información, el ajuste fino realmente cambia cómo la IA "piensa" sobre tu dominio.
RAG es a menudo el mejor punto de partida porque es más simple, más transparente y más fácil de mantener. Pero a veces necesitas ese nivel extra de personalización que solo el ajuste fino puede proporcionar.
Próximamente: Artículo 3 — "Ajuste fino de LLMs: Enseñando a la IA a hablar tu idioma"


