- Distinguir llamada, tool, MCP, recuperación RAG y agente.
- Observar cuándo el modelo decide y cuándo decide el código.
- Implementar el ciclo MCP sobre
stdio. - Detener repeticiones, pasos excesivos y citas inventadas.
gemma3:4b. Sus pruebas no dependen del modelo. Las etapas generativas se vuelven a evaluar al cambiar modelo o versión.El mapa antes del código
Estos conceptos pueden combinarse, pero responden a preguntas distintas:
LLAMADA AL MODELO pregunta: ¿qué texto genera con el contexto recibido? TOOL pregunta: ¿qué función acotada puede ejecutar? MCP pregunta: ¿cómo descubre e invoca esa capacidad con un protocolo común? RAG pregunta: ¿qué evidencia recuperamos antes de pedir una respuesta? AGENTE pregunta: ¿puede elegir el siguiente paso según la observación? SKILL receta reutilizable para hacer una tarea con criterio SUBAGENTE trabajo delegado con contexto y herramientas separados
Un único caso para comparar
Tienda Brújula es una empresa inventada. Su política sintética afirma que las compras online pueden devolverse durante treinta días naturales desde la entrega. Preguntaremos por ese plazo en las cinco versiones.
Usar siempre la misma pregunta evita confundir una arquitectura mejor con un ejemplo más fácil.
OBJETIVO ¿Cuál es el plazo de devolución de una compra online en Tienda Brújula? FUENTE SINTÉTICA [DEV-01] Las compras online pueden devolverse dentro de los 30 días naturales posteriores a la entrega.
Prepara el laboratorio
El código es MIT, no utiliza cuentas ni dependencias y limita Ollama a loopback. Las pruebas automáticas usan decisiones simuladas para que la seguridad no dependa de que un modelo “se porte bien”.
git clone https://github.com/aulafy/taller.git cd taller/cursos/agentes-automatizacion/laboratorios/de-chat-a-agente npm run verificar
Etapa 1 · Una llamada no tiene tus datos
El modelo recibe la pregunta, pero no la política ficticia. En la ejecución verificada respondió “15 días” e incluso inventó una URL. Eso no demuestra que todos los modelos fallen siempre; demuestra que una frase plausible sin evidencia no es una respuesta de negocio.
OLLAMA_MODEL=gemma3:4b npm run etapa:1 salida observada: respuesta: "15 días naturales" URL citada: inventada evidencia: [] estado: no usar como hecho
Etapa 2 · Una tool es una función con contrato
buscar_politica acepta una consulta breve y devuelve fragmentos con IDs. El código la llama directamente: todavía no hay MCP ni decisión del modelo.
npm run etapa:2 entrada: tool: buscar_politica consulta: "plazo devolución compra online" salida: DEV-01: política online de 30 días DEV-02: política de tienda física de 14 días
La tool no acepta rutas, comandos ni nombres arbitrarios. Un esquema estrecho reduce ambigüedad, pero la validación real se realiza también en el servidor.
Etapa 3 · MCP estandariza la conexión
Ahora un cliente inicia un servidor local como subproceso. Ambos intercambian JSON-RPC por entrada y salida estándar. Primero negocian versión y capacidades; después el cliente envía la notificación de inicialización, lista tools y llama a la misma búsqueda.
npm run etapa:3 1. initialize protocolo solicitado: 2025-11-25 2. notifications/initialized 3. tools/list tools: [buscar_politica] 4. tools/call resultado: DEV-01, DEV-02 5. cerrar stdin y terminar el subproceso
Origin, sesiones y riesgo de exposición. Este primer servidor usa stdio y una única tool de lectura.Etapa 4 · RAG añade evidencia antes de generar
La recuperación puntúa los documentos y selecciona los fragmentos más próximos a la pregunta. El modelo recibe esos textos y la orden de responder solo con la evidencia y citar sus IDs.
OLLAMA_MODEL=gemma3:4b npm run etapa:4 recuperados: [DEV-01, DEV-02] respuesta observada: "30 días naturales posteriores a la entrega [DEV-01]."
Etapa 5 · El modelo elige el siguiente paso
En la última versión, el modelo devuelve una decisión estructurada: buscar o finalizar. El controlador solo reconoce esas dos acciones. Después de cada búsqueda añade la observación y vuelve a preguntar qué hacer.
OLLAMA_MODEL=gemma3:4b npm run etapa:5 paso 1 decisión: buscar_politica observación: [DEV-01, DEV-02] paso 2 decisión: finalizar respuesta: "30 días naturales posteriores a la entrega" citas: [DEV-01] estado: completed pasos: 2
El prompt propone; el código limita
- Allowlist: solo existe
buscar_politica. - Solo lectura: no hay shell, rutas, red externa ni escritura.
- Máximo: tres decisiones por tarea.
- Repetición: la misma tool con los mismos argumentos corta el bucle.
- Citas: el final debe citar un ID recuperado durante esa ejecución.
- Destino: Ollama solo puede usar localhost o una IP de loopback.
PROVOCA LOS FALLOS 1. tools/list antes de inicializar esperado: sesión no inicializada 2. tool = leer_archivo esperado: tool no permitida 3. repetir búsqueda idéntica esperado: bucle detenido 4. finalizar con cita FAKE-99 esperado: cita ausente o inventada 5. seguir después de tres pasos esperado: máximo alcanzado
Cuándo detener la escalera antes
- Si solo redactas o clasificas con contexto disponible, usa una llamada.
- Si el camino es fijo, usa un workflow y gates deterministas.
- Si una función solo vive dentro de tu aplicación, MCP puede no aportar todavía.
- Si no puedes evaluar la recuperación, no añadas un loop sobre un RAG débil.
- Si una acción tiene impacto, añade vista previa y aprobación humana antes de escritura.
Fuentes primarias consultadas
- Introducción oficial a MCP.
- Ciclo MCP 2025-11-25.
- Transportes MCP y seguridad.
- Contrato y seguridad de tools.
- Building effective agents.
- Paper original de RAG.
- API de generación de Ollama.
Las publicaciones de X detectadas por el radar de Grok se usaron únicamente para priorizar la necesidad educativa; no sustentan las afirmaciones técnicas.
Si has guardado la evidencia de esta lección, continúa con «Subagentes con roles». Si no, repite la comprobación antes de avanzar.