Capítulo 5 de 10 · 100 proyectos para hacer con tu coding agent

IA, LLM y agentes (41-50)

Construir con modelos y no solo usarlos. RAG, evaluaciones, un agente con herramientas escrito a mano, memoria y un router por coste.

6 min de lecturaActualizado el 8 de septiembre de 2026

Aquí el objetivo no es «usar la IA». Es entender qué hay debajo: cómo se trocea un documento, por qué una búsqueda vectorial a veces devuelve basura, qué es realmente una llamada a herramienta y, sobre todo, cómo se mide si tu sistema ha mejorado o solo lo parece. Esa última parte es la que casi todo el mundo se salta.

41. RAG sobre tu propia documentación

Por aquí se entra a todo lo demás. Y te adelanto que la parte difícil no es el modelo, sino trocear bien los documentos y recuperar el fragmento correcto.

Construye un sistema de preguntas y respuestas sobre un directorio de
documentos Markdown y PDF.

- Troceado consciente de la estructura (por encabezados, no por caracteres),
  con solapamiento y metadatos de origen.
- Embeddings almacenados en SQLite con búsqueda por similitud coseno.
- Recuperación híbrida: vectorial + BM25, fusionadas con RRF.
- Respuesta con citas al fragmento exacto; si no hay contexto suficiente,
  debe decir que no lo sabe.

Incluye un script de evaluación con 20 preguntas y respuestas esperadas.

42. Base de datos vectorial mínima

Escribir una te quita el misterio de encima. Vectores, distancia coseno y un índice aproximado que funciona sorprendentemente bien para lo simple que es.

Implementa una base de datos vectorial desde cero.

1. Búsqueda exacta por fuerza bruta con distancia coseno y euclídea.
2. Índice HNSW implementado a mano, con parámetros M y ef configurables.
3. Persistencia en disco y carga incremental.
4. Filtros por metadatos combinados con la búsqueda vectorial.

Compara exhaustividad y latencia de HNSW frente a la fuerza bruta con
100.000 vectores de 384 dimensiones, y enséñame la tabla.

43. Banco de evaluación de prompts

Un framework pequeño para comparar prompts y modelos con datos en vez de con impresiones. Es el proyecto menos vistoso del capítulo y probablemente el más útil.

Crea un framework de evaluación de prompts.

- Casos de prueba en YAML: entrada, salida esperada o criterios.
- Evaluadores: coincidencia exacta, regex, similitud semántica y
  juez basado en modelo con rúbrica explícita.
- Ejecuta la misma suite contra varios prompts y varios modelos.
- Informe comparativo con puntuación, coste, latencia y los casos que
  empeoraron respecto a la ejecución anterior.
- Caché de respuestas para no pagar dos veces por lo mismo.

Lo esencial: detectar regresiones al cambiar un prompt.

44. Agente con herramientas, escrito a mano

Sin frameworks de agentes. Un bucle, un esquema de herramientas y manejo de errores. Cuando lo escribes, entiendes qué hace por dentro el agente que estás usando para escribirlo, que tiene su gracia.

Escribe un agente con uso de herramientas desde cero, sin frameworks.

- Bucle: mensaje -> el modelo pide herramienta -> ejecutas -> devuelves
  resultado -> repites hasta respuesta final.
- Herramientas: leer fichero, escribir fichero, listar directorio, ejecutar
  comando (con lista blanca) y buscar en la web.
- Manejo de errores de herramienta devueltos al modelo como texto, no como excepción.
- Límite de iteraciones, límite de tokens y registro completo de la traza.

Confirmación del usuario antes de cualquier escritura o comando. Sin excepciones.

45. Memoria a largo plazo para un asistente

Que se acuerde de cosas entre sesiones sin meter toda la conversación en cada petición. Resúmenes jerárquicos y recuperación selectiva, con un presupuesto de tokens que respetar.

Implementa una capa de memoria para un asistente conversacional.

- Memoria de trabajo: últimos N mensajes completos.
- Memoria episódica: resúmenes de conversaciones anteriores, recuperables
  por similitud con el mensaje actual.
- Memoria semántica: hechos extraídos sobre el usuario, con fecha y fuente,
  actualizables cuando se contradicen.
- Presupuesto de tokens: decide qué entra en el contexto y explica la política.

Muestra un ejemplo donde el asistente corrige un hecho antiguo con uno nuevo.

46. Clasificador de texto con modelo pequeño

No todo necesita un LLM, aunque ahora parezca que sí. Entrenas un clasificador clásico, lo mides y lo comparas con la versión LLM en coste y latencia. El resultado suele sorprender.

Construye un clasificador de textos (por ejemplo, categorías de tickets
de soporte) con dos enfoques y compáralos.

A) TF-IDF + regresión logística, entrenado con scikit-learn.
B) Clasificación con un LLM mediante prompt con ejemplos.

Métricas: precisión, exhaustividad y F1 por clase; coste por 1.000 textos
y latencia media. Matriz de confusión de ambos.

Termina con una recomendación argumentada de cuál usarías y por qué.

47. Transcriptor y resumidor de reuniones

Entra el audio de una reunión, sale el acta. Diarización aproximada, transcripción y un resumen con los acuerdos y las tareas. Todo en local.

Haz una herramienta local que convierta grabaciones en actas.

- Transcripción con Whisper local, con marcas de tiempo.
- Separación por hablante (diarización) aunque sea aproximada.
- Resumen estructurado: temas, decisiones, tareas con responsable, dudas abiertas.
- Salida en Markdown con enlaces a los minutos exactos del audio.

Debe funcionar sin conexión a internet. Prueba con un audio de 45 minutos
y dime cuánto tarda.

48. Router de modelos por coste

Las preguntas fáciles al modelo barato y las difíciles al caro. Suena obvio, y sin embargo casi nadie lo implementa bien, porque decidir qué es «fácil» es la parte complicada.

Construye un router que elija el modelo según la dificultad de la petición.

- Clasificador de dificultad (heurísticas + clasificador ligero).
- Escalado automático: si la respuesta del modelo barato no supera una
  comprobación de calidad, reintenta con el modelo grande.
- Registro de coste por petición y panel con el ahorro acumulado.
- Configuración declarativa de modelos, precios y umbrales.

Evalúa con 200 peticiones reales: cuánto ahorras y cuánta calidad pierdes.
Los dos números, sin maquillar.

49. Generador de datos sintéticos con esquema

Datos de prueba realistas y coherentes entre tablas, sin copiar producción a ningún sitio. Más difícil de lo que parece en cuanto hay claves foráneas y fechas que tienen que tener sentido.

Crea un generador de datos sintéticos a partir de un esquema de base de datos.

- Lee el esquema (o un DDL) y genera datos que respeten tipos, restricciones
  y claves foráneas.
- Realismo por columna: nombres, direcciones y correos coherentes entre sí;
  fechas con distribución configurable.
- Coherencia semántica entre tablas (un pedido no puede ser anterior al alta
  del cliente).
- Semilla fija para resultados reproducibles.

Genera un millón de filas sin quedarte sin memoria.

50. Revisor de código automático

Tu propio bot de revisión. Lee el diff, aplica un checklist y comenta solo lo que aporta. Lo de «solo lo que aporta» es el 80 % del trabajo.

Construye un revisor de código que trabaje sobre un diff de git.

- Entrada: git diff de la rama actual contra main.
- Analiza por fichero, con contexto suficiente (trae las funciones tocadas
  completas, no solo las líneas cambiadas).
- Checklist configurable: errores de lógica, casos límite, concurrencia,
  seguridad, tests que faltan.
- Salida: hallazgos con fichero, línea y explicación; nada de comentarios
  de estilo que ya cubre el linter.
- Filtro de ruido: si no hay hallazgos serios, que no invente ninguno.

Pruébalo con tres commits reales tuyos y evalúa cuántos hallazgos eran útiles.