Buckets:

hf-doc-build/doc-dev / agents-course /pr_673 /es /unit2 /langgraph /when_to_use_langgraph.html
HuggingFaceDocBuilder's picture
download
raw
19.8 kB
<meta charset="utf-8" /><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;¿Qué es LangGraph ?&quot;,&quot;local&quot;:&quot;qué-es-langgraph-&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;¿Es LangGraph diferente de LangChain ?&quot;,&quot;local&quot;:&quot;es-langgraph-diferente-de-langchain-&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;¿Cuándo debería usar LangGraph ?&quot;,&quot;local&quot;:&quot;cuándo-debería-usar-langgraph-&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Control vs libertad&quot;,&quot;local&quot;:&quot;control-vs-libertad&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;¿Cómo funciona LangGraph?&quot;,&quot;local&quot;:&quot;cómo-funciona-langgraph&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;¿En qué se diferencia de Python regular? ¿Por qué necesito LangGraph?&quot;,&quot;local&quot;:&quot;en-qué-se-diferencia-de-python-regular-por-qué-necesito-langgraph&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;:1}">
<link href="/docs/agents-course/pr_673/es/_app/immutable/assets/0.e3b0c442.css" rel="modulepreload">
<link rel="modulepreload" href="/docs/agents-course/pr_673/es/_app/immutable/entry/start.39a06002.js">
<link rel="modulepreload" href="/docs/agents-course/pr_673/es/_app/immutable/chunks/scheduler.505acc25.js">
<link rel="modulepreload" href="/docs/agents-course/pr_673/es/_app/immutable/chunks/singletons.68213789.js">
<link rel="modulepreload" href="/docs/agents-course/pr_673/es/_app/immutable/chunks/index.001f95d5.js">
<link rel="modulepreload" href="/docs/agents-course/pr_673/es/_app/immutable/chunks/paths.bd4a25cb.js">
<link rel="modulepreload" href="/docs/agents-course/pr_673/es/_app/immutable/entry/app.f2e595d6.js">
<link rel="modulepreload" href="/docs/agents-course/pr_673/es/_app/immutable/chunks/preload-helper.e49ae84e.js">
<link rel="modulepreload" href="/docs/agents-course/pr_673/es/_app/immutable/chunks/index.fbb49fb4.js">
<link rel="modulepreload" href="/docs/agents-course/pr_673/es/_app/immutable/nodes/0.86e64c8f.js">
<link rel="modulepreload" href="/docs/agents-course/pr_673/es/_app/immutable/chunks/each.e59479a4.js">
<link rel="modulepreload" href="/docs/agents-course/pr_673/es/_app/immutable/nodes/43.46617b73.js">
<link rel="modulepreload" href="/docs/agents-course/pr_673/es/_app/immutable/chunks/CopyLLMTxtMenu.80337afb.js">
<link rel="modulepreload" href="/docs/agents-course/pr_673/es/_app/immutable/chunks/MermaidChart.svelte_svelte_type_style_lang.9cd71169.js">
<link rel="modulepreload" href="/docs/agents-course/pr_673/es/_app/immutable/chunks/Heading.511e0027.js"><!-- HEAD_svelte-u9bgzb_START --><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;¿Qué es LangGraph ?&quot;,&quot;local&quot;:&quot;qué-es-langgraph-&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;¿Es LangGraph diferente de LangChain ?&quot;,&quot;local&quot;:&quot;es-langgraph-diferente-de-langchain-&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;¿Cuándo debería usar LangGraph ?&quot;,&quot;local&quot;:&quot;cuándo-debería-usar-langgraph-&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Control vs libertad&quot;,&quot;local&quot;:&quot;control-vs-libertad&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;¿Cómo funciona LangGraph?&quot;,&quot;local&quot;:&quot;cómo-funciona-langgraph&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;¿En qué se diferencia de Python regular? ¿Por qué necesito LangGraph?&quot;,&quot;local&quot;:&quot;en-qué-se-diferencia-de-python-regular-por-qué-necesito-langgraph&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;:1}"><!-- HEAD_svelte-u9bgzb_END --> <p></p> <div class="items-center shrink-0 min-w-[100px] max-sm:min-w-[50px] justify-end ml-auto flex" style="float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"><div class="inline-flex rounded-md max-sm:rounded-sm"><button class="inline-flex items-center gap-1 h-7 max-sm:h-7 px-2 max-sm:px-1.5 text-sm font-medium text-gray-800 border border-r-0 rounded-l-md max-sm:rounded-l-sm border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-live="polite"><span class="inline-flex items-center justify-center rounded-md p-0.5 max-sm:p-0 hover:text-gray-800 dark:hover:text-gray-200"><svg class="sm:size-3.5 size-3" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg></span> <span>Copy page</span></button> <button class="inline-flex items-center justify-center w-6 max-sm:w-5 h-7 max-sm:h-7 disabled:pointer-events-none text-sm text-gray-500 hover:text-gray-700 dark:hover:text-white rounded-r-md max-sm:rounded-r-sm border border-l transition border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-haspopup="menu" aria-expanded="false" aria-label="Open copy menu"><svg class="transition-transform text-gray-400 overflow-visible sm:size-3.5 size-3 rotate-0" width="1em" height="1em" viewBox="0 0 12 7" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L6 6L11 1" stroke="currentColor"></path></svg></button></div> </div> <h1 class="relative group"><a id="qué-es-langgraph-" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#qué-es-langgraph-"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>¿Qué es LangGraph ?</span></h1> <p data-svelte-h="svelte-k0sjnw"><code>LangGraph</code> s un marco de trabajo desarrollado por <a href="https://www.langchain.com/" rel="nofollow">LangChain</a> <strong>para gestionar el flujo de control de aplicaciones que integran un LLM.</strong>.</p> <h2 class="relative group"><a id="es-langgraph-diferente-de-langchain-" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#es-langgraph-diferente-de-langchain-"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>¿Es LangGraph diferente de LangChain ?</span></h2> <p data-svelte-h="svelte-k4t4oa">LangChain proporciona una interfaz estándar para interactuar con modelos y otros componentes, útil para recuperación, llamadas a LLM y llamadas a herramientas.
Las clases de LangChain pueden utilizarse en LangGraph, pero NO TIENEN que ser utilizadas.</p> <p data-svelte-h="svelte-1mu4j4v">Los paquetes son diferentes y pueden usarse de forma aislada, pero, al final, todos los recursos que encontrarás en línea utilizan ambos paquetes de la mano.</p> <h2 class="relative group"><a id="cuándo-debería-usar-langgraph-" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#cuándo-debería-usar-langgraph-"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>¿Cuándo debería usar LangGraph ?</span></h2> <h3 class="relative group"><a id="control-vs-libertad" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#control-vs-libertad"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Control vs libertad</span></h3> <p data-svelte-h="svelte-1o6vi2c">Al diseñar aplicaciones de IA, te enfrentas a un equilibrio fundamental entre <strong>control</strong> y <strong>libertad</strong>:</p> <ul data-svelte-h="svelte-khwrs8"><li><strong>libertad</strong> da a tu LLM más espacio para ser creativo y abordar problemas inesperados.</li> <li><strong>Control</strong> te permite asegurar un comportamiento predecible y mantener barreras de protección.</li></ul> <p data-svelte-h="svelte-10d0yky">Los Agentes de Código, como los que puedes encontrar en <em>smolagents</em>,son muy libres. Pueden llamar a múltiples herramientas en un solo paso de acción, crear sus propias herramientas, etc. Sin embargo, este comportamiento puede hacerlos menos predecibles y menos controlables que un Agente regular trabajando con JSON.</p> <p data-svelte-h="svelte-1uzkx4f"><code>LangGraph</code> está en el otro extremo del espectro, brilla cuando necesitas <strong>“Control”</strong> sobre la ejecución de tu agente.</p> <p data-svelte-h="svelte-1mnd89h">LangGraph es particularmente valioso cuando necesitas <strong>Control sobre tus aplicaciones</strong>. Te da las herramientas para construir una aplicación que siga un proceso predecible mientras aprovecha el poder de los LLMs.</p> <p data-svelte-h="svelte-1f2cc7a">En términos simples, si tu aplicación involucra una serie de pasos que necesitan ser orquestados de una manera específica, con decisiones siendo tomadas en cada punto de unión, <strong>LangGraph proporciona la estructura que necesitas</strong>.</p> <p data-svelte-h="svelte-1b9sjgc">Como ejemplo, digamos que queremos construir un asistente LLM que pueda responder algunas preguntas sobre algunos documentos.</p> <p data-svelte-h="svelte-1y96klp">Como los LLMs entienden mejor el texto, antes de poder responder a la pregunta, necesitarás convertir otras modalidades complejas (gráficos, tablas) en texto. Sin embargo, ¡esa elección depende del tipo de documento que tengas!</p> <p data-svelte-h="svelte-19syr5b">Esta es una ramificación que elegí representar de la siguiente manera:</p> <img src="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/LangGraph/flow.png" alt="Control flow"> <blockquote data-svelte-h="svelte-134y1xy"><p>💡 <strong>Tip:</strong> La parte izquierda no es un agente, ya que aquí no está involucrada ninguna llamada a herramientas. Pero la parte derecha necesitará escribir algo de código para consultar el xls (convertir a pandas y manipularlo).</p></blockquote> <p data-svelte-h="svelte-6rlm5l">Si bien esta ramificación es determinista, también puedes diseñar ramificaciones que estén condicionadas por la salida de un LLM, haciéndolas indeterministas.</p> <p data-svelte-h="svelte-4o7h3m">Los escenarios clave donde LangGraph sobresale incluyen:</p> <ul data-svelte-h="svelte-5ee70r"><li><strong>Procesos de razonamiento en múltiples pasos</strong> que necesitan control explícito sobre el flujo</li> <li><strong>Aplicaciones que requieren persistencia de estado</strong> entre pasos</li> <li><strong>Sistemas que combinan lógica determinista con capacidades de IA</strong></li> <li><strong>Flujos de trabajo que necesitan intervenciones humanas en el ciclo</strong></li> <li><strong>Arquitecturas de agentes complejas</strong> con múltiples componentes trabajando juntos</li></ul> <p data-svelte-h="svelte-dprhw">En esencia, siempre que sea posible, <strong>como humano</strong>, diseña un flujo de acciones basado en la salida de cada acción, y decide qué ejecutar a continuación en consecuencia. En este caso, ¡LangGraph es el marco de trabajo correcto para ti!</p> <p data-svelte-h="svelte-18i2a64"><code>LangGraph</code> es, en mi opinión, el marco de trabajo de agentes más listo para producción en el mercado.</p> <h2 class="relative group"><a id="cómo-funciona-langgraph" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#cómo-funciona-langgraph"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>¿Cómo funciona LangGraph?</span></h2> <p data-svelte-h="svelte-15yp2qs">En su esencia, <code>LangGraph</code> utiliza una estructura de grafo dirigido para definir el flujo de tu aplicación:</p> <ul data-svelte-h="svelte-jw83a5"><li><strong>Nodos</strong> representan pasos de procesamiento individuales (como llamar a un LLM, usar una herramienta o tomar una decisión).</li> <li><strong>Aristas(Edges)</strong> definen las posibles transiciones entre pasos.</li> <li><strong>Estado</strong> es definido por el usuario, se mantiene y se pasa entre nodos durante la ejecución. Al decidir qué nodo dirigir a continuación, este es el estado actual que observamos.</li></ul> <p data-svelte-h="svelte-3hfztr">¡Exploraremos estos bloques fundamentales más en el próximo capítulo!</p> <h2 class="relative group"><a id="en-qué-se-diferencia-de-python-regular-por-qué-necesito-langgraph" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#en-qué-se-diferencia-de-python-regular-por-qué-necesito-langgraph"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>¿En qué se diferencia de Python regular? ¿Por qué necesito LangGraph?</span></h2> <p data-svelte-h="svelte-1ovltig">Te preguntaras : “Podría simplemente escribir código Python regular con declaraciones if-else para manejar todos estos flujos, ¿verdad?”</p> <p data-svelte-h="svelte-16kyrxp">Aunque técnicamente es cierto, LangGraph ofrece <strong>algunas ventajas</strong> osobre Python puro para construir sistemas complejos. Podrías construir la misma aplicación sin LangGraph, pero proporciona herramientas y abstracciones más fáciles para ti.</p> <p data-svelte-h="svelte-reprnz">Incluye estados, visualización, registro (trazas), integración de humanos en el ciclo incorporada, y más.</p> <a class="!text-gray-400 !no-underline text-sm flex items-center not-prose mt-4" href="https://github.com/huggingface/agents-course/blob/main/units/es/unit2/langgraph/when_to_use_langgraph.mdx" target="_blank"><svg class="mr-1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M31,16l-7,7l-1.41-1.41L28.17,16l-5.58-5.59L24,9l7,7z"></path><path d="M1,16l7-7l1.41,1.41L3.83,16l5.58,5.59L8,23l-7-7z"></path><path d="M12.419,25.484L17.639,6.552l1.932,0.518L14.351,26.002z"></path></svg> <span data-svelte-h="svelte-zjs2n5"><span class="underline">Update</span> on GitHub</span></a> <p></p>
<script>
{
__sveltekit_15eco4z = {
assets: "/docs/agents-course/pr_673/es",
base: "/docs/agents-course/pr_673/es",
env: {}
};
const element = document.currentScript.parentElement;
const data = [null,null];
Promise.all([
import("/docs/agents-course/pr_673/es/_app/immutable/entry/start.39a06002.js"),
import("/docs/agents-course/pr_673/es/_app/immutable/entry/app.f2e595d6.js")
]).then(([kit, app]) => {
kit.start(app, element, {
node_ids: [0, 43],
data,
form: null,
error: null
});
});
}
</script>

Xet Storage Details

Size:
19.8 kB
·
Xet hash:
5be839b1d8018e090f5012268736742e2b4b90c0c1fc3d2f60869d444beff32e

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.