Buckets:
| <meta charset="utf-8" /><meta name="hf:doc:metadata" content="{"title":"Qu’est-ce que LangGraph ?","local":"quest-ce-que-langgraph-","sections":[{"title":"LangGraph est-il différent de LangChain ?","local":"langgraph-est-il-différent-de-langchain-","sections":[],"depth":2},{"title":"Quand dois-je utiliser LangGraph ?","local":"quand-dois-je-utiliser-langgraph-","sections":[{"title":"Contrôle vs. liberté","local":"contrôle-vs-liberté","sections":[],"depth":3}],"depth":2},{"title":"Comment fonctionne LangGraph ?","local":"comment-fonctionne-langgraph-","sections":[],"depth":2},{"title":"En quoi est-ce différent du Python standard ? Pourquoi ai-je besoin de LangGraph ?","local":"en-quoi-est-ce-différent-du-python-standard--pourquoi-ai-je-besoin-de-langgraph-","sections":[],"depth":2}],"depth":1}"> | |
| <link href="/docs/agents-course/pr_653/fr/_app/immutable/assets/0.e3b0c442.css" rel="modulepreload"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_653/fr/_app/immutable/entry/start.6d47ec1b.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_653/fr/_app/immutable/chunks/scheduler.505acc25.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_653/fr/_app/immutable/chunks/singletons.05e80c54.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_653/fr/_app/immutable/chunks/index.001f95d5.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_653/fr/_app/immutable/chunks/paths.057989d7.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_653/fr/_app/immutable/entry/app.422aa231.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_653/fr/_app/immutable/chunks/preload-helper.3307fcb7.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_653/fr/_app/immutable/chunks/index.b1175496.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_653/fr/_app/immutable/nodes/0.e1f9a6c5.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_653/fr/_app/immutable/chunks/each.e59479a4.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_653/fr/_app/immutable/nodes/43.f3ff6495.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_653/fr/_app/immutable/chunks/Heading.5a909328.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_653/fr/_app/immutable/chunks/MermaidChart.svelte_svelte_type_style_lang.c8924854.js"><!-- HEAD_svelte-u9bgzb_START --><meta name="hf:doc:metadata" content="{"title":"Qu’est-ce que LangGraph ?","local":"quest-ce-que-langgraph-","sections":[{"title":"LangGraph est-il différent de LangChain ?","local":"langgraph-est-il-différent-de-langchain-","sections":[],"depth":2},{"title":"Quand dois-je utiliser LangGraph ?","local":"quand-dois-je-utiliser-langgraph-","sections":[{"title":"Contrôle vs. liberté","local":"contrôle-vs-liberté","sections":[],"depth":3}],"depth":2},{"title":"Comment fonctionne LangGraph ?","local":"comment-fonctionne-langgraph-","sections":[],"depth":2},{"title":"En quoi est-ce différent du Python standard ? Pourquoi ai-je besoin de LangGraph ?","local":"en-quoi-est-ce-différent-du-python-standard--pourquoi-ai-je-besoin-de-langgraph-","sections":[],"depth":2}],"depth":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="quest-ce-que-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="#quest-ce-que-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’est-ce que LangGraph ?</span></h1> <p data-svelte-h="svelte-yc1x32"><code>LangGraph</code> est un <em>framework</em> développé par <a href="https://www.langchain.com/" rel="nofollow">LangChain</a> <strong>pour gérer le flux de contrôle des applications qui intègrent un LLM</strong>.</p> <h2 class="relative group"><a id="langgraph-est-il-différent-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="#langgraph-est-il-différent-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>LangGraph est-il différent de LangChain ?</span></h2> <p data-svelte-h="svelte-g3bqy0">LangChain fournit une interface standard pour interagir avec les modèles et autres composants, utile pour la récupération, les appels de LLM et les appels d’outils. | |
| Les classes de LangChain peuvent être utilisées dans LangGraph, mais ne DOIVENT PAS nécessairement être utilisées.</p> <p data-svelte-h="svelte-1hc1lvb">Les <em>packages</em> sont différents et peuvent être utilisés de manière isolée, mais, au final, toutes les ressources que vous trouverez en ligne utilisent les deux <em>packages</em> main dans la main.</p> <h2 class="relative group"><a id="quand-dois-je-utiliser-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="#quand-dois-je-utiliser-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>Quand dois-je utiliser LangGraph ?</span></h2> <h3 class="relative group"><a id="contrôle-vs-liberté" 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="#contrôle-vs-liberté"><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>Contrôle vs. liberté</span></h3> <p data-svelte-h="svelte-1sqnw9m">Lors de la conception d’applications IA, vous faites face à un compromis fondamental entre <strong>contrôle</strong> et <strong>liberté</strong> :</p> <ul data-svelte-h="svelte-z1eqzw"><li>La <strong>liberté</strong> donne à votre LLM plus d’espace pour être créatif et s’attaquer à des problèmes inattendus.</li> <li>Le <strong>contrôle</strong> vous permet d’assurer un comportement prévisible et de maintenir des garde-fous.</li></ul> <p data-svelte-h="svelte-22o8f5">Les agents à code, comme ceux que vous pouvez rencontrer dans <em>smolagents</em>, sont très libres. Ils peuvent appeler plusieurs outils en une seule étape d’action, créer leurs propres outils, etc. Cependant, ce comportement peut les rendre moins prévisibles et moins contrôlables qu’un agent standard travaillant avec un <em>JSON</em> !</p> <p data-svelte-h="svelte-1mu41np"><code>LangGraph</code> est à l’autre extrémité du spectre, il brille lorsque vous avez besoin de <strong>contrôle</strong> sur l’exécution de votre agent. Il vous donne les outils pour créer une application qui suit un processus prévisible tout en exploitant toujours la puissance des LLM.</p> <p data-svelte-h="svelte-1uqgiba">En termes simples, si votre application implique une série d’étapes qui doivent être orchestrées d’une manière spécifique, avec des décisions prises à chaque point de jonction, <strong>LangGraph fournit la structure dont vous avez besoin</strong>.</p> <p data-svelte-h="svelte-11lwjud">À titre d’exemple, disons que nous voulons créer un assistant LLM qui peut répondre à quelques questions sur certains documents.</p> <p data-svelte-h="svelte-zbrq03">Comme les LLM comprennent mieux le texte, avant de pouvoir répondre à la question, vous devrez convertir d’autres modalités complexes (graphiques, tableaux) en texte. Cependant, ce choix dépend du type de document que vous avez !</p> <p data-svelte-h="svelte-1fay7mt">C’est un embranchement que j’ai choisi de représenter comme suit :</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-11vu4fv"><p>💡 <strong>Astuce :</strong> La partie gauche n’est pas un agent, car ici aucun appel d’outil n’est impliqué. Mais la partie droite devra écrire du code pour interroger le <em>xls</em> (convertir en <em>pandas</em> et le manipuler).</p></blockquote> <p data-svelte-h="svelte-f3dk4g">Bien que cet embranchement soit déterministe, vous pouvez également concevoir un embranchement conditionné par la sortie d’un LLM, les rendant indéterministes.</p> <p data-svelte-h="svelte-m7f6hc">Les scénarios clés où LangGraph excelle incluent :</p> <ul data-svelte-h="svelte-8lbaz7"><li><strong>Le processus de raisonnement en plusieurs étapes</strong> qui nécessitent un contrôle explicite sur le flux</li> <li><strong>Des applications nécessitant la persistance de l’état</strong> entre les étapes</li> <li><strong>Des systèmes qui combinent la logique déterministe avec les capacités d’une IA</strong></li> <li><strong><em>Des workflows</em> qui nécessitent des interventions <em>human-in-the-loop</em></strong></li> <li><strong>Des architectures d’agents complexes</strong> avec plusieurs composants travaillant ensemble</li></ul> <p data-svelte-h="svelte-ndibff">En substance, chaque fois que cela est possible, en tant qu’être humain, concevez un flux d’actions basé sur les résultats de chaque action, et décidez de ce qu’il faut exécuter ensuite en conséquence. Dans ce cas, LangGraph est le bon <em>framework</em> pour vous !</p> <p data-svelte-h="svelte-9fs3gx"><code>LangGraph</code> est, à mon avis, le <em>framework</em> d’agents le plus prêt pour la production sur le marché.</p> <h2 class="relative group"><a id="comment-fonctionne-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="#comment-fonctionne-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>Comment fonctionne LangGraph ?</span></h2> <p data-svelte-h="svelte-xvnge3">Au cœur de <code>LangGraph</code> se trouve une structure de graphe dirigé pour définir le flux de votre application :</p> <ul data-svelte-h="svelte-139ai8t"><li><strong>Les nœuds</strong> représentent des étapes de traitement individuelles (comme appeler un LLM, utiliser un outil, ou prendre une décision).</li> <li><strong>Les arêtes</strong> définissent les transitions possibles entre les étapes.</li> <li><strong>L’état</strong> est défini par l’utilisateur et maintenu et transmis entre les nœuds pendant l’exécution. Lors de la décision du prochain nœud à cibler, c’est l’état actuel que nous regardons.</li></ul> <p data-svelte-h="svelte-2kuvx4">Nous explorerons ces blocs fondamentaux plus en détail dans le prochain chapitre !</p> <h2 class="relative group"><a id="en-quoi-est-ce-différent-du-python-standard--pourquoi-ai-je-besoin-de-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-quoi-est-ce-différent-du-python-standard--pourquoi-ai-je-besoin-de-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 quoi est-ce différent du Python standard ? Pourquoi ai-je besoin de LangGraph ?</span></h2> <p data-svelte-h="svelte-zowcqa">Vous pourriez vous demander : « Je pourrais juste écrire du code Python standard avec des instructions <em>if-else</em> pour gérer tous ces flux, non ? »</p> <p data-svelte-h="svelte-1qqmbhf">Bien que techniquement vrai, LangGraph offre <strong>certains avantages</strong> par rapport au Python standard pour créer des systèmes complexes. Vous pourriez créer la même application sans LangGraph, mais il construit des outils et des abstractions plus faciles pour vous.</p> <p data-svelte-h="svelte-1x4uwbp">Il inclut des états, une visualisation, une journalisation (traces), de l’<em>human-in-the-loop</em> intégré, et plus encore.</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/fr/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_1ql597g = { | |
| assets: "/docs/agents-course/pr_653/fr", | |
| base: "/docs/agents-course/pr_653/fr", | |
| env: {} | |
| }; | |
| const element = document.currentScript.parentElement; | |
| const data = [null,null]; | |
| Promise.all([ | |
| import("/docs/agents-course/pr_653/fr/_app/immutable/entry/start.6d47ec1b.js"), | |
| import("/docs/agents-course/pr_653/fr/_app/immutable/entry/app.422aa231.js") | |
| ]).then(([kit, app]) => { | |
| kit.start(app, element, { | |
| node_ids: [0, 43], | |
| data, | |
| form: null, | |
| error: null | |
| }); | |
| }); | |
| } | |
| </script> | |
Xet Storage Details
- Size:
- 20.1 kB
- Xet hash:
- 94d1a2988fce95e4184de2bf75a792d14bf1710155ee803d25306ba36e82beb0
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.