{"id":241,"date":"2026-05-24T18:33:45","date_gmt":"2026-05-24T16:33:45","guid":{"rendered":"https:\/\/atlaszn.com\/blog\/?p=241"},"modified":"2026-06-16T01:02:02","modified_gmt":"2026-06-15T23:02:02","slug":"prompt-chaining-llms-pipelines","status":"publish","type":"post","link":"https:\/\/atlaszn.com\/blog\/2026\/05\/24\/prompt-chaining-llms-pipelines\/","title":{"rendered":"Prompt Chaining: Cuando un solo prompt no alcanza"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Prompt Chaining (Pipeline Pattern) es una t\u00e9cnica que descompone tareas complejas en secuencias de prompts focalizados donde la salida de cada paso alimenta al siguiente. Resuelve instruction neglect, contextual drift y error propagation \u2014 los tres fallos sist\u00e9micos de los prompts monol\u00edticos en LLMs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le pides a un modelo que extraiga datos, los transforme, los analice y redacte un resumen. Y obtienes una respuesta que hace bien la primera parte, mediocremente la segunda, y directamente ignora la tercera. No es un bug. Es lo que sucede cuando un generador autoregresivo intenta cumplir instrucciones concurrentes dentro de una misma ventana de contexto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Descompones la tarea en pasos secuenciales. Cada paso tiene un prompt focalizado, un rol definido, y su salida alimenta al siguiente. La idea no es complicada; lo dif\u00edcil es mantener el rigor entre pasos.<\/p>\n\n\n\n<div class=\"toc\">\n<h3>\u00cdndice de contenidos<\/h3>\n<ul>\n<li><a href=\"#lo-que-rompe-en-un-prompt-monolitico\">Lo que rompe en un prompt monol\u00edtico<\/a><\/li>\n<li><a href=\"#como-funciona-en-la-practica\">C\u00f3mo funciona (en la pr\u00e1ctica)<\/a><\/li>\n<li><a href=\"#salidas-estructuradas-donde-se-gana-o-se-pierde\">Salidas estructuradas: donde se gana o se pierde<\/a><\/li>\n<li><a href=\"#patrones-que-realmente-se-usan\">Patrones que realmente se usan<\/a><\/li>\n<li><a href=\"#lo-que-suele-romperse-en-produccion\">Lo que suele romperse en producci\u00f3n<\/a><\/li>\n<li><a href=\"#context-engineering\">Context Engineering<\/a><\/li>\n<li><a href=\"#chaining-vs-agentes-la-verdad-incmoda\">Chaining vs agentes: la verdad inc\u00f3moda<\/a><\/li>\n<li><a href=\"#cuando-no-usarlo\">Cu\u00e1ndo no usarlo<\/a><\/li>\n<li><a href=\"#preguntas-frecuentes-sobre-prompt-chaining\">Preguntas frecuentes sobre Prompt Chaining<\/a><\/li>\n<li><a href=\"#conclusion\">Conclusi\u00f3n<\/a><\/li>\n<\/ul>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"lo-que-rompe-en-un-prompt-monolitico\" class=\"wp-block-heading\">Lo que rompe en un prompt monol\u00edtico<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un prompt monol\u00edtico concentra m\u00faltiples instrucciones en una sola llamada. El modelo recibe: \u00abextrae especificaciones, convi\u00e9rtelas a JSON, identifica tendencias, redacta un resumen\u00bb. Y lo que ocurre despu\u00e9s es predecible.<\/p>\n\n\n\n<ul class=\"wp-block-list\" class=\"wp-block-list\">\n<li><strong>Instruction neglect:<\/strong> el modelo cumple mejor las instrucciones del principio y del final. Las del medio se degradan. Si tu prompt tiene cuatro tareas, las centrales son las primeras en sufrir.<\/li>\n\n\n\n<li><strong>Contextual drift:<\/strong> a medida que la respuesta crece, el modelo pierde el foco. La salida se vuelve progresivamente menos coherente con la instrucci\u00f3n original, especialmente cuando debe mantener m\u00faltiples contextos simult\u00e1neamente.<\/li>\n\n\n\n<li><strong>Error propagation:<\/strong> si la extracci\u00f3n de datos falla \u2014 un campo mal nombrado, un tipo incorrecto \u2014 la transformaci\u00f3n y el an\u00e1lisis downstream tambi\u00e9n fallan, y el modelo no tiene mecanismo para detectar que su propia entrada intermedia es inv\u00e1lida.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Estos no son fallos aleatorios. Son consecuencias de la arquitectura: los LLMs completan patrones, no ejecutan instrucciones m\u00faltiples con validaci\u00f3n intermedia.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"como-funciona-en-la-practica\" class=\"wp-block-heading\">C\u00f3mo funciona (en la pr\u00e1ctica)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La descomposici\u00f3n sigue tres reglas que suenen obvias hasta que las rompes:<\/p>\n\n\n\n<ul class=\"wp-block-list\" class=\"wp-block-list\">\n<li><strong>Un prompt, una operaci\u00f3n.<\/strong> Si un paso requiere m\u00e1s de una operaci\u00f3n sem\u00e1ntica, se divide. Esto elimina la competencia entre instrucciones dentro del mismo prompt.<\/li>\n\n\n\n<li><strong>Handoff estructurado.<\/strong> La salida de cada paso es un objeto parseable, no texto libre. JSON en el 95% de los casos. XML solo compensa en entornos enterprise heredados o cuando necesitas validaci\u00f3n XSD.<\/li>\n\n\n\n<li><strong>Roles por etapa.<\/strong> El primer paso es un \u00abAnalista de Extracci\u00f3n\u00bb. El segundo, un \u00abTransformador de Esquemas\u00bb. El tercero, un \u00abAnalista de Tendencias\u00bb. La asignaci\u00f3n de roles mejora la focalizaci\u00f3n del modelo en cada etapa. No es un truco de prompt engineering \u2014 funciona porque cambia el espacio de activaci\u00f3n del modelo.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">El flujo resultante es lineal y determinista. Cada transici\u00f3n es expl\u00edcita, validable y trazable. Y aqu\u00ed es donde la teor\u00eda choca con la realidad: cada paso es una llamada al modelo, y cada llamada puede fallar de formas diferentes.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"salidas-estructuradas-donde-se-gana-o-se-pierde\" class=\"wp-block-heading\">Salidas estructuradas: donde se gana o se pierde<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El punto m\u00e1s fr\u00e1gil de cualquier cadena no es el razonamiento del modelo. Son las interfaces entre pasos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un modelo puede devolver un diccionario Python en lugar de JSON. Puede a\u00f1adir comentarios narrativos alrededor de los datos. Puede cambiar <code>cpu<\/code> a <code>processor<\/code> entre ejecuciones. Variaciones que parecen menores pero rompen el consumidor downstream.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La soluci\u00f3n es validaci\u00f3n tipada. En Python, Pydantic permite definir esquemas y parsear directamente contra ellos, garantizando structured output entre pasos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from pydantic import BaseModel, Field, ValidationError\nimport logging\n\nlogger = logging.getLogger(__name__)\n\nclass Specs(BaseModel):\n    cpu: str\n    memory_gb: int = Field(ge=1, le=512)\n    storage_tb: float = Field(ge=0.1, le=20)\n\ndef validate_extraction(response: str) -&gt; Specs:\n    try:\n        return Specs.model_validate_json(response)\n    except ValidationError as e:\n        logger.error(f\"Extraction failed validation: {e}\")\n        raise\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando la validaci\u00f3n falla, tienes tres opciones: reintentar con feedback del error, aplicar un fallback, o abortar. La elecci\u00f3n depende de si el fallo es recuperable y de cu\u00e1nto te importa ese dato en particular.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En producci\u00f3n, el mayor problema no suele ser el razonamiento del modelo sino la estabilidad de estas interfaces. He visto pipelines romperse durante d\u00edas porque un modelo empez\u00f3 a devolver <code>null<\/code> en lugar de string vac\u00edo tras una actualizaci\u00f3n silenciosa de la versi\u00f3n. Un cambio m\u00ednimo en un nombre de campo rompe silenciosamente todo el pipeline downstream. Los tests que cubren solo el caso happy path no detectan esto.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"patrones-que-realmente-se-usan\" class=\"wp-block-heading\">Patrones que realmente se usan<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Existen varias formas de orquestar una cadena. En la pr\u00e1ctica, la mayor\u00eda de pipelines \u00fatiles siguen siendo lineales. Los grafos complejos suelen introducir m\u00e1s problemas de observabilidad que beneficios reales.<\/p>\n\n\n\n<ul class=\"wp-block-list\" class=\"wp-block-list\">\n<li><strong>Lineal:<\/strong> secuencia estricta. Extracci\u00f3n, transformaci\u00f3n, an\u00e1lisis. Es f\u00e1cil de depurar, f\u00e1cil de monitorizar, y cada paso tiene un contrato claro. Cuando funciona, funciona.<\/li>\n\n\n\n<li><strong>Con validaci\u00f3n intermedia:<\/strong> a\u00f1ade un paso de verificaci\u00f3n entre cada etapa. Si falla, reintenta con el error como contexto. A\u00f1ade latencia pero previene errores silenciosos. \u00datil cuando el costo de corregir downstream supera el costo de validar upstream.<\/li>\n\n\n\n<li><strong>Con paralelizaci\u00f3n:<\/strong> etapas independientes se ejecutan concurrente y convergen en un paso de s\u00edntesis. Parece atractivo hasta que aparecen inconsistencias sem\u00e1nticas entre ramas. Dos pasos paralelos pueden interpretar el mismo t\u00e9rmino t\u00e9cnico de forma distinta y romper la s\u00edntesis final. \u00dasalo solo cuando la independencia sea real, no aparente.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">LangChain implementa paralelizaci\u00f3n con <code>RunnableParallel<\/code>. LangGraph lo modela como nodos independientes que convergen en un nodo de uni\u00f3n. Ambos funcionan. Elige seg\u00fan necesites estado compartido o no.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"lo-que-suele-romperse-en-produccion\" class=\"wp-block-heading\">Lo que suele romperse en producci\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Esta es la parte que los tutoriales no cubren.<\/p>\n\n\n\n<ul class=\"wp-block-list\" class=\"wp-block-list\">\n<li><strong>JSON parcialmente v\u00e1lido.<\/strong> El modelo devuelve JSON sint\u00e1cticamente correcto pero con campos faltantes o tipos incorrectos. <code>model_validate_json()<\/code> captura esto, pero muchos pipelines usan <code>json.loads()<\/code> y asumen que \u00absi no explota, est\u00e1 bien\u00bb. No lo est\u00e1.<\/li>\n\n\n\n<li><strong>Retries infinitos.<\/strong> Un paso falla la validaci\u00f3n, se reintenta, falla de nuevo, se reintenta\u2026 sin l\u00edmite. El pipeline se queda en bucle consumiendo tokens y tiempo. Siempre establece un m\u00e1ximo de reintentos y un timeout global.<\/li>\n\n\n\n<li><strong>Schemas demasiado r\u00edgidos.<\/strong> Un esquema que exige exactamente 5 campos rompe cuando el modelo extrae 4 porque el quinto no estaba en el texto fuente. Los campos opcionales existen por una raz\u00f3n.<\/li>\n\n\n\n<li><strong>Context explosion.<\/strong> Cada paso a\u00f1ade tokens al contexto. Si no controlas el crecimiento, llegas al l\u00edmite del modelo en el paso 4 de 6. La soluci\u00f3n no es aumentar el contexto \u2014 es seleccionar qu\u00e9 datos realmente necesita cada paso.<\/li>\n\n\n\n<li><strong>Inconsistencia entre modelos.<\/strong> Un pipeline que funciona con GPT-4 puede fallar con Llama 3 8B. Los modelos peque\u00f1os son m\u00e1s propensos a errores de formato. Si usas chaining con modelos locales, valida m\u00e1s agresivamente entre pasos.<\/li>\n\n\n\n<li><strong>Prompts incompatibles entre versiones.<\/strong> Un prompt que funcionaba con una versi\u00f3n del modelo puede degradarse con la siguiente. La primera vez que esto te pasa en producci\u00f3n, tiendes a culpar al modelo. En realidad es un problema de versionado \u2014 los prompts necesitan los mismos tests de regresi\u00f3n que cualquier otro c\u00f3digo.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"context-engineering\" class=\"wp-block-heading\">Context Engineering<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Gestionar qu\u00e9 informaci\u00f3n llega a cada paso es probablemente la parte m\u00e1s subestimada del dise\u00f1o de pipelines. Un pipeline puede tener la arquitectura perfecta y romperse porque un paso recibe 12.000 tokens de contexto cuando solo necesitaba 200.<\/p>\n\n\n\n<ul class=\"wp-block-list\" class=\"wp-block-list\">\n<li><strong>Selecci\u00f3n m\u00ednima.<\/strong> Cada paso recibe solo lo que necesita, no todo el contexto acumulado. Los LLMs prestan m\u00e1s atenci\u00f3n al inicio y final del prompt que al medio \u2014 el fen\u00f3meno \u00ablost in the middle\u00bb \u2014 as\u00ed que si un paso de an\u00e1lisis recibe 5.000 palabras de texto original junto con 200 palabras de datos extra\u00eddos, probablemente ignora los datos estructurados. La soluci\u00f3n es extraer solo los campos relevantes antes de pasarlos al siguiente paso.<\/li>\n\n\n\n<li><strong>Compresi\u00f3n sem\u00e1ntica.<\/strong> En lugar de pasar datos crudos entre pasos, puedes resumirlos sem\u00e1nticamente. Si un paso de extracci\u00f3n encuentra 50 entidades pero el siguiente solo necesita las 10 m\u00e1s relevantes, un paso intermedio de clasificaci\u00f3n reduce el volumen sin perder informaci\u00f3n cr\u00edtica. La compresi\u00f3n sem\u00e1ntica consume tokens adicionales, pero preserva el significado. En la pr\u00e1ctica, el trade-off vale la pena cuando la precisi\u00f3n downstream es prioritaria.<\/li>\n\n\n\n<li><strong>Aislamiento de contexto.<\/strong> Otra decisi\u00f3n arquitect\u00f3nica es si los pasos comparten un pool de contexto o si cada paso tiene su propio contexto aislado. Compartido simplifica el dise\u00f1o pero aumenta el riesgo de contaminaci\u00f3n: un paso puede depender impl\u00edcitamente de informaci\u00f3n que otro paso modific\u00f3. Aislado es m\u00e1s estricto pero m\u00e1s predecible. En producci\u00f3n, el aislamiento gana porque hace las dependencias expl\u00edcitas y facilita la depuraci\u00f3n: si un paso falla, sabes exactamente qu\u00e9 datos recibi\u00f3.<\/li>\n\n\n\n<li><strong>Retrieval selectivo.<\/strong> Cuando un paso necesita informaci\u00f3n externa, no cargues todo. Recupera solo lo relevante para ese paso espec\u00edfico. Si el paso 2 necesita referencias de mercado pero el paso 3 necesita datos hist\u00f3ricos, cada uno recupera de su propia fuente en lugar de cargar ambas al inicio. Esto reduce el consumo de tokens y evita que informaci\u00f3n irrelevante interfiera con el razonamiento del modelo.<\/li>\n\n\n\n<li><strong>Token budgeting.<\/strong> Cada paso consume tokens. Si no controlas el presupuesto, llegas al l\u00edmite del modelo antes de terminar la cadena. Asigna un presupuesto por paso y monitoriza el consumo acumulado. LangChain lo hace con <code>CallbacksHandler<\/code>, LangGraph persiste el estado del grafo, y sin framework un logger estructurado con conteos de input\/output tokens basta para detectar cu\u00e1ndo est\u00e1s cerca del l\u00edmite. Cuando lo est\u00e1s, activa la compresi\u00f3n sem\u00e1ntica o el truncamiento inteligente.<\/li>\n\n\n\n<li><strong>Context poisoning.<\/strong> Un riesgo silencioso es la contaminaci\u00f3n del contexto: cuando un paso anterior introduce informaci\u00f3n incorrecta o irrelevante que los pasos posteriores heredan sin cuestionar. Especialmente problem\u00e1tico cuando un paso de generaci\u00f3n narrativa consume datos extra\u00eddos con baja confianza. La mitigaci\u00f3n es marcar la confianza de los datos en los metadatos y dejar que los pasos downstream ajusten su comportamiento. Si los datos son inciertos, el paso de narrativa lo se\u00f1ala expl\u00edcitamente en su salida.<\/li>\n\n\n\n<li><strong>State persistence.<\/strong> En pipelines que se ejecutan en m\u00faltiples sesiones \u2014 un pipeline que se interrumpe y reanuda \u2014 el estado debe persistir entre ejecuciones. LangGraph lo hace nativamente con su sistema de estado serializable. Sin framework, un archivo JSON o una base de datos ligera con el estado de cada paso permite reanudar desde el \u00faltimo punto v\u00e1lido en lugar de reiniciar desde cero.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Registra entradas, salidas, tokens y tiempo por paso. Como metadatos externos, no dentro del contexto del modelo. Sin observabilidad, no sabes qu\u00e9 paso introdujo un error hasta que el pipeline termina \u2014 y para entonces, el contexto original ya no est\u00e1 disponible.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"chaining-vs-agentes-la-verdad-incmoda\" class=\"wp-block-heading\">Chaining vs agentes: la verdad inc\u00f3moda<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Muchos workflows etiquetados como \u00abAI agents\u00bb son realmente \u00e1rboles de decisi\u00f3n con branding.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La diferencia real es qui\u00e9n controla el flujo. En chaining, es c\u00f3digo determinista: defines cada paso y sus transiciones. En agentic workflows, es el modelo: genera un pensamiento, elige una herramienta, ejecuta, observa, repite. Patrones como ReAct son el backbone de esto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Chaining gana en predictibilidad. Cada ejecuci\u00f3n sigue el mismo camino, los fallos son reproducibles, el presupuesto de tokens es fijo. Los agentes ganan en flexibilidad \u2014 pueden adaptarse a situaciones no previstas o cambiar de estrategia a mitad del flujo \u2014 pero esa flexibilidad tiene un precio: bucles de razonamiento prolongados, costos impredecibles, y fallos que requieren registrar el trace completo de decisiones para depurar.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Criterio<\/th><th>Prompt Chaining<\/th><th>Agentes<\/th><\/tr><\/thead><tbody><tr><td>Control de flujo<\/td><td>C\u00f3digo determinista<\/td><td>Modelo (ReAct)<\/td><\/tr><tr><td>Predictibilidad<\/td><td>Alta<\/td><td>Baja<\/td><\/tr><tr><td>Costo de tokens<\/td><td>Fijo<\/td><td>Variable<\/td><\/tr><tr><td>Flexibilidad<\/td><td>Baja<\/td><td>Alta<\/td><\/tr><tr><td>Observabilidad<\/td><td>Directa<\/td><td>Requiere trace completo<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La elecci\u00f3n depende de la tarea. Flujo conocido y estable \u2014 extracci\u00f3n de datos, generaci\u00f3n de reportes con estructura fija \u2014 chaining. Flujo din\u00e1mico \u2014 investigaci\u00f3n abierta, diagn\u00f3stico con m\u00faltiples causas \u2014 agentes. Un enfoque h\u00edbrido es v\u00e1lido: chaining para la parte predecible, agente para la que necesita adaptaci\u00f3n. He visto equipos invertir semanas en sistemas ag\u00e9nticos que resuelven el 10% de los casos, cuando un pipeline lineal cubr\u00eda el 90%.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sobre RAG:  RAG a\u00f1ade conocimiento externo al contexto. Chaining estructura el flujo de procesamiento. Se combinan frecuentemente: paso 1 recupera documentos con RAG, paso 2 extrae datos, paso 3 genera an\u00e1lisis. No compiten.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"cuando-no-usarlo\" class=\"wp-block-heading\">Cu\u00e1ndo no usarlo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando un solo prompt bien dise\u00f1ado resuelve la tarea. Si un modelo capaz puede extraer, analizar y redactar en una invocaci\u00f3n con resultados aceptables, a\u00f1adir una cadena introduce latencia y complejidad innecesaria.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La se\u00f1al de que necesitas chaining es clara: un prompt monol\u00edtico produce resultados inconsistentes, o la tarea requiere operaciones que el modelo no puede realizar con precisi\u00f3n en un solo paso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sobre la longitud: no hay un n\u00famero m\u00e1gico, pero cadenas de m\u00e1s de 7 pasos comienzan a sufrir. La m\u00e9trica pr\u00e1ctica no es el n\u00famero de pasos, sino el tiempo total de ejecuci\u00f3n y la tasa de errores por paso. Si necesitas m\u00e1s de 7, probablemente puedes fusionar pasos adyacentes o paralelizar los independientes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y s\u00ed, funciona con modelos peque\u00f1os. De hecho, es donde su ventaja es mayor: dividir una tarea compleja en pasos simples se alinea con las capacidades de modelos como Llama 3 8B o Qwen 2.5 7B. Solo valida m\u00e1s agresivamente entre pasos.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"preguntas-frecuentes-sobre-prompt-chaining\" class=\"wp-block-heading\">Preguntas frecuentes sobre Prompt Chaining<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfCu\u00e1ndo usar Prompt Chaining en lugar de un solo prompt?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando un prompt monol\u00edtico produce resultados inconsistentes, omite instrucciones intermedias (instruction neglect) o la tarea requiere m\u00e1s de 3 operaciones sem\u00e1nticas distintas. La se\u00f1al clara es cuando el modelo cumple bien la primera y \u00faltima instrucci\u00f3n pero falla las centrales.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPrompt Chaining funciona con modelos locales como Llama 3 o Qwen?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00ed, y es donde su ventaja es mayor. Los modelos peque\u00f1os (7B-8B par\u00e1metros) son m\u00e1s propensos a errores de formato en tareas complejas. Dividir la tarea en pasos simples se alinea con sus capacidades. Requiere validaci\u00f3n m\u00e1s agresiva entre pasos con Pydantic o esquemas tipados.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfCu\u00e1l es la diferencia entre Prompt Chaining y RAG?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Son ortogonales. RAG a\u00f1ade conocimiento externo al contexto recuperando documentos relevantes. Prompt Chaining estructura el flujo de procesamiento en pasos secuenciales. Se combinan frecuentemente: paso 1 recupera con RAG, paso 2 extrae datos, paso 3 genera an\u00e1lisis.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfCu\u00e1ntos pasos debe tener una cadena de prompts?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No hay un n\u00famero absoluto, pero cadenas de m\u00e1s de 7 pasos comienzan a sufrir en latencia y mantenimiento. La m\u00e9trica pr\u00e1ctica es el tiempo total de ejecuci\u00f3n y la tasa de errores por paso. Si necesitas m\u00e1s de 7, fusiona pasos adyacentes o paraleliza los independientes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 framework usar para Prompt Chaining: LangChain o LangGraph?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">LangChain (LCEL) es suficiente para pipelines lineales y paralelizaci\u00f3n b\u00e1sica con <code>RunnableParallel<\/code>. LangGraph es necesario cuando necesitas estado compartido entre pasos, bucles condicionales, o reanudaci\u00f3n de pipelines interrumpidos. Para la mayor\u00eda de casos, LangChain es suficiente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfC\u00f3mo validar la salida de un LLM en Prompt Chaining?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Con esquemas tipados. En Python, Pydantic permite definir clases con anotaciones de tipo y usar <code>model_validate_json()<\/code> para parsear directamente la respuesta del modelo. Si la validaci\u00f3n falla, captura <code>ValidationError<\/code> con informaci\u00f3n precisa sobre qu\u00e9 campo fall\u00f3. Nunca uses solo <code>json.loads()<\/code> asumiendo que el JSON es v\u00e1lido.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"conclusion\" class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prompt Chaining no hace m\u00e1s inteligente al modelo. Hace m\u00e1s controlable el sistema. En producci\u00f3n, eso suele importar m\u00e1s.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El patr\u00f3n es independiente de herramienta: funciona con llamadas secuenciales a cualquier API, validaci\u00f3n con Pydantic o cualquier esquema tipado, y orquestaci\u00f3n con c\u00f3digo Python est\u00e1ndar. LangChain y LangGraph simplifican los prototipos, pero muchas implementaciones terminan reescribiendo partes cr\u00edticas por problemas de complejidad y observabilidad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Al final, lo que marca la diferencia no es el framework que elijas, sino como defines los contratos entre pasos y qu\u00e9 tan agresivamente validas las transiciones.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Prompt Chaining descompone tareas complejas en pasos secuenciales para evitar instruction neglect, contextual drift y error propagation. Gu\u00eda pr\u00e1ctica con c\u00f3digo Python, patrones de producci\u00f3n y Context Engineering.<\/p>\n","protected":false},"author":1,"featured_media":539,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[135,50,6,37],"tags":[88,82,86,85,84,83,87],"class_list":["post-241","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-agentes","category-fundamentos","category-ia-automatizacion","category-software","tag-context-engineering","tag-langchain","tag-langgraph","tag-llm","tag-pipeline-pattern","tag-prompt-chaining","tag-pydantic"],"_links":{"self":[{"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/posts\/241","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/comments?post=241"}],"version-history":[{"count":10,"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/posts\/241\/revisions"}],"predecessor-version":[{"id":681,"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/posts\/241\/revisions\/681"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/media\/539"}],"wp:attachment":[{"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/media?parent=241"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/categories?post=241"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/tags?post=241"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}