{"id":590,"date":"2023-12-18T07:30:00","date_gmt":"2023-12-18T06:30:00","guid":{"rendered":"https:\/\/ai.reboot-conseil.com\/?p=590"},"modified":"2023-12-18T11:40:00","modified_gmt":"2023-12-18T10:40:00","slug":"test-drive-de-langchain-mon-retour-dexperience","status":"publish","type":"post","link":"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/","title":{"rendered":"\ud83d\ude98 Test-drive de LangChain \u26d3\ufe0f: mon retour d&rsquo;exp\u00e9rience \ud83e\udd2f"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Suite<a href=\"https:\/\/ai.reboot-conseil.com\/index.php\/2023\/12\/04\/low-code-a-la-decouverte-de-langflow\/\"> \u00e0 l&rsquo;article de mon tr\u00e8s estim\u00e9 coll\u00e8gue de Squad<\/a>, Tristan, ainsi qu&rsquo;\u00e0 son constant partage, chez <a href=\"https:\/\/www.reboot-conseil.com\/\">Reboot Conseil<\/a>, des d\u00e9couvertes qu&rsquo;il fait sur le framework depuis qu&rsquo;il s&rsquo;y int\u00e9resse (et je l&rsquo;en remercie vivement pour cela), j&rsquo;ai d\u00e9cid\u00e9 d&rsquo;enfin mettre les mains dans le cambouis et de d\u00e9couvrir les composants de cet incroyable outil.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tristan avait \u00e9crit lors de son pr\u00e9c\u00e9dent article:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Toutefois, malgr\u00e9 son potentiel remarquable, la complexit\u00e9 de LangChain peut poser des d\u00e9fis, en particulier pour ceux moins vers\u00e9s dans la programmation avanc\u00e9e. <\/p>\n<cite>Tristan, tr\u00e8s estim\u00e9 AI squad member<\/cite><\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Je le confirme: c&rsquo;est assez confusant quand on s&rsquo;y met, mais comme avec beaucoup de softs et concepts de notre m\u00e9tier de d\u00e9veloppeur, \u00e7a finit par faire \u00ab\u00a0click\u00a0\u00bb au bout d&rsquo;un moment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00e9finition de \u00ab\u00a0click\u00a0\u00bb: compr\u00e9hension minimale mais suffisante d&rsquo;un concept hyper important, qui d\u00e9charge une soudaine vague de dopamine dans le cerveau qui souhaite comprendre ledit concept.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce moment est arriv\u00e9 aujourd&rsquo;hui pour moi, alors je profite de mon excitation actuelle pour vous r\u00e9sumer le potentiel de LangChain de la perspective du d\u00e9veloppeur que je suis, que j&rsquo;ai aper\u00e7u lors de mon parcours exploratoire de sa documentation et de divers Jupyter notebooks pertinents.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Qu&rsquo;est-ce que LangChain ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.langchain.com\/\">LangChain<\/a> est un framework qui se pr\u00e9sente comme une \u00ab\u00a0bo\u00eete \u00e0 outils permettant de construire des applications contextuelles et intelligentes \u00e0 l&rsquo;aide d&rsquo;abstractions\u00a0\u00bb .<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Qu&rsquo;est-ce que \u00e7a veut dire concr\u00e8tement ? H\u00e9 bien, avec Python ou Javascript, vous allez pouvoir utiliser des classes, m\u00e9thodes, et divers pipelines et configurations pour construire des applications qui font un usage extensif des LLMs, et maintenant des LMMs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Prenez le LLM dont vous \u00eates familier, par example GPT-4, et faites-en une application \u00ab\u00a0agentic\u00a0\u00bb et \u00ab\u00a0context-aware\u00a0\u00bb (ce sont les termes que vous retrouverez souvent lorsque l&rsquo;on parle d&rsquo;agents autonomes).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00ab\u00a0agentic\u00a0\u00bb<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">On dit d&rsquo;une IA qu&rsquo;elle devient agentique lorsqu&rsquo;elle est capable de comprendre, raisonner, et utiliser des donn\u00e9es sp\u00e9cifiques pour ex\u00e9cuter une action qui lui fait sens.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00ab\u00a0context-aware\u00a0\u00bb<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un syst\u00e8me \u00ab\u00a0context-aware\u00a0\u00bb est capable de r\u00e9cup\u00e9rer des donn\u00e9es \u00e0 la demande depuis diverses sources de donn\u00e9es ou d&rsquo;autres syst\u00e8mes en se basant sur l&rsquo;input de l&rsquo;utilisateur. C&rsquo;est, concr\u00e8tement, ce que font les d\u00e9veloppeurs de logiciels depuis des ann\u00e9es mais, dans le contexte de LangChain, cela signifie que l&rsquo;on peut brancher ou un ou plusieurs syst\u00e8mes ou sources de donn\u00e9es, voire d&rsquo;autres LLMs, au dit syst\u00e8me afin d&rsquo;apporter une r\u00e9ponse plus pr\u00e9cise et opportune \u00e0 l&rsquo;utilisateur.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemples de cas d&rsquo;utilisation de LangChain<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>augmenter un LLM (GPT-4, Mistral, Gemini, Llama, etc.) en lui permettant d&rsquo;acc\u00e9der \u00e0 des fichiers, des bases de donn\u00e9es, d&rsquo;autres LLMs, des applications, des r\u00e9seaux, etc. de votre choix<\/li>\n\n\n\n<li>permettre \u00e0 des LLMs d&rsquo;interagir avec leur environnement en les dotant de la capacit\u00e9 de prendre des d\u00e9cisions<\/li>\n\n\n\n<li>utiliser des LLMs pour d\u00e9cider de quelle action entreprendre dans un pipeline de t\u00e2ches donn\u00e9<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Une liste des meilleures int\u00e9grations de LangChain est maintenue dans <a href=\"https:\/\/github.com\/kyrolabs\/awesome-langchain?tab=readme-ov-file#open-source-projects\">ce repository GitHub,<\/a> vous allez voir, \u00e7a d\u00e9pote !<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">LangChain: une approche modulaire<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vous l&rsquo;avez compris, LangChain permet d&rsquo;augmenter des syst\u00e8mes avec des LLMs en vous proposant toutes sortes d&rsquo;outils pour ce faire. Son architecture modulaire favorise la construction d&rsquo;applications complexes bas\u00e9es sur les LLMs, en facilitant la connexion des mod\u00e8les \u00e0 diverses sources de donn\u00e9es et agents d\u00e9cisionnels.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Parmi ces modules vous trouverez des:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Agents<\/code> : abstractions permettant aux LLMs de communiquer avec leur environnement et de prendre des d\u00e9cisions<\/li>\n\n\n\n<li><code>Cha\u00eenes<\/code> : ou s\u00e9ries d&rsquo;actions ex\u00e9cutables par un agent<\/li>\n\n\n\n<li><code>Mod\u00e8les<\/code>: interfaces pour diff\u00e9rents types de mod\u00e8les d&rsquo;IA, y compris les LLMs, des mod\u00e8les de chat, d&rsquo;incorporation de texte, etc.<\/li>\n\n\n\n<li><code>Documents<\/code>: il s&rsquo;agit de textes non structur\u00e9s avec m\u00e9tadonn\u00e9es arbitraire<\/li>\n\n\n\n<li>etc.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">C&rsquo;est en combinant ces modules, et bien d&rsquo;autres disponibles, que vous pourrez construire vos applications agentiques.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Les examples de cha\u00eenes que nous allons voir<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vous trouverez dans <a href=\"https:\/\/github.com\/yactouat\/learning_AI\/blob\/master\/notebooks\/langchain-x-palm.ipynb\">ce notebook<\/a> mes exp\u00e9rimentations li\u00e9es \u00e0 LangChain, j&rsquo;y essaie plusieurs composants du framework avec PaLM2 (le dernier LLM de Google avant Gemini) en LLM sous-jacent. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Toute la partie setup n\u00e9cessite un projet sur Google Cloud et un fichier <code>.env<\/code>, jetez un oeil au repo et mettez \u00e0 jour les valeurs propres \u00e0 votre projet \ud83d\ude09<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nous allons nous pencher ici principalement sur quelques cas d&rsquo;usage d&rsquo;utilisation de cha\u00eenes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>une cha\u00eene s\u00e9quentielle =&gt; appels successifs \u00e0 un ou des LLMs avec, \u00e0 chaque appel, le r\u00e9sultat du pr\u00e9c\u00e9dent appel en input (ou le prompt initial si c&rsquo;est le premier appel)<\/li>\n\n\n\n<li>une cha\u00eene de r\u00e9sum\u00e9 (summarization chain) =&gt; une automatisation du r\u00e9sum\u00e9s de documents successifs, quelle que soit leur longueur<\/li>\n\n\n\n<li>une cha\u00eene de type questions\/r\u00e9ponses (question answering chain) =&gt; l&rsquo;id\u00e9e est ici de pouvoir poser un set de questions\/r\u00e9ponses \u00e0 un LLM en lui donnant comme consigne explicite de ne consid\u00e9rer qu&rsquo;une source de donn\u00e9es d\u00e9sign\u00e9e<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Vous allez le voir, les cha\u00eenes constituent un concept tr\u00e8s puissant (\u00e0 tel point que je pense qu&rsquo;il s&rsquo;agit de l&rsquo;\u00e9volution naturelle de notre m\u00e9tier de software developer) qui permet de cr\u00e9er des interactions plut\u00f4t complexes sans avoir \u00e0 \u00e9crire tout le code sous-jacent.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A ce jour, LangChain utilise le <a href=\"https:\/\/python.langchain.com\/docs\/expression_language\/\">LCEL<\/a> (<strong>LangChain Expression Language<\/strong>) pour aider le d\u00e9velopper \u00e0 d\u00e9finir ces interactions. Commen\u00e7ons par la cha\u00eene s\u00e9quentielle:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemple de cha\u00eene s\u00e9quentielle<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La cha\u00eene s\u00e9quentielle est pertinente pour de nombreux (voire tous) cas d&rsquo;usage: on prend l&rsquo;output d&rsquo;un LLM et on g\u00e9n\u00e8re un autre output avec le m\u00eame ou un autre LLM, dans l&rsquo;exemple de mon notebook:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>je cr\u00e9\u00e9 un template de prompt (une autre abstraction de LangChain) pour donner au LLM la personae d&rsquo;un dramaturge qui \u00e9crit des synopsis pour des histoires pour enfants \u00e0 partir d&rsquo;un titre en input<\/li>\n\n\n\n<li>je cr\u00e9\u00e9 un autre template de prompt, cette fois avec la personae d&rsquo;un bot repr\u00e9sentant un \u00e9crivain sombre et tortur\u00e9<\/li>\n\n\n\n<li>je cha\u00eene ensuite les deux prompts dynamiques et leurs r\u00e9sultats pour obtenir en r\u00e9sultat final une histoire un peu glauque \u00e0 la Tim Burton (ce qui est plut\u00f4t jouissif) <\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Cet exemple simple est complexifiable \u00e0 l&rsquo;infini et, F\u00eates obligent, je me suis laiss\u00e9 emporter avec cet exemple ^^ je me dois toutefois de rappeler que c&rsquo;est parfaitement pertinent d&rsquo;envisager toutes sortes de pipelines business dans le cadre plus s\u00e9rieux  du travail (m\u00eame si dans l&rsquo;IA squad on s&rsquo;\u00e9clate).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a507a6395bb6&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a507a6395bb6\" class=\"wp-block-image size-large wp-lightbox-container\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"316\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-25-1024x316.png\" alt=\"cr\u00e9ation d'une cha\u00eene s\u00e9quentielle avec LangChain\" class=\"wp-image-625\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-25-1024x316.png 1024w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-25-300x93.png 300w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-25-768x237.png 768w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-25.png 1475w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">cr\u00e9ation d&rsquo;une cha\u00eene s\u00e9quentielle avec LangChain<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans cet exemple, on voit qu&rsquo;il est tr\u00e8s facile de \u00ab\u00a0piper\u00a0\u00bb des \u00e9l\u00e9ments \u00e0 une cha\u00eene d&rsquo;interactions LLM, j&rsquo;utilise ici <code>RunnablePassThrough<\/code>  afin de pouvoir r\u00e9cup\u00e9rer les \u00e9tapes avant l&rsquo;output final.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans ce contexte cr\u00e9er une instance de LLM (par exemple celui utilis\u00e9 dans la chain) est rendu aussi tr\u00e8s facile =&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a507a639603c&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a507a639603c\" class=\"wp-block-image size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"251\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-26-1024x251.png\" alt=\"cr\u00e9ation d'une instance de LLM de votre choix avec LangChain\" class=\"wp-image-633\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-26-1024x251.png 1024w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-26-300x73.png 300w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-26-768x188.png 768w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-26.png 1315w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">cr\u00e9ation d&rsquo;une instance de LLM de votre choix avec LangChain<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"has-normal-font-size wp-block-paragraph\">**Synopsis: A Cute Christmas Tale** <\/p>\n\n\n\n<p class=\"has-normal-font-size wp-block-paragraph\">It&rsquo;s Christmas Eve, and the young reindeer, Prancer, is feeling very excited. He can&rsquo;t wait to help Santa deliver presents to all the good little boys and girls around the world. But when he arrives at the North Pole, he discovers that Santa is missing! Prancer is determined to find Santa and save Christmas. He sets off on a journey, meeting all sorts of interesting characters along the way, including a wise old owl, a friendly snowman, and a mischievous elf. As Prancer gets closer to finding Santa, he learns the true meaning of Christmas. He discovers that it&rsquo;s not about presents or decorations, but about love, kindness, and helping others. In the end, Prancer finds Santa and they deliver the presents together. It&rsquo;s a Christmas that Prancer will never forget!<\/p>\n<cite>PaLM2 en mode cute<\/cite><\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"has-normal-font-size wp-block-paragraph\">**A Dark Christmas Tale**<\/p>\n\n\n\n<p class=\"has-normal-font-size wp-block-paragraph\">It&rsquo;s Christmas Eve, and the young reindeer, Prancer, is feeling very excited. He can&rsquo;t wait to help Santa deliver presents to all the good little boys and girls around the world. But when he arrives at the North Pole, he discovers that Santa is missing! Prancer is determined to find Santa, but he soon realizes that the North Pole is not as magical as he thought. The elves are overworked and exhausted, the reindeer are restless and hungry, and the air is filled with a sense of dread. As Prancer searches for Santa, he uncovers a dark secret that threatens to destroy Christmas. He learns that Santa has been kidnapped by the evil Krampus, a demon who punishes naughty children. Krampus is planning to use Santa&rsquo;s magic to spread fear and darkness throughout the world. Prancer must find a way to stop Krampus and save Santa before it&rsquo;s too late. He faces many challenges along the way, but he is determined to succeed. In the end, Prancer triumphs over Krampus and saves Christmas. But the experience has left him with a dark secret of his own. He knows that the world is not as innocent as he once thought, and that there are forces of evil that are always lurking in the shadows.<\/p>\n<cite>PaLM2 un chouya plus dark<\/cite><\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemple de summarization chain<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nous avons tous, \u00e0 un moment ou un autre de notre journ\u00e9e de travail, besoin de r\u00e9sumer du contenu textuel. Les documents \u00e0 r\u00e9sumer peuvent provenir de sources et \u00eatre de nature diff\u00e9rentes. Les LLMs sont un puissant outil pour augmenter notre productivit\u00e9 en ce sens, car ils sont tr\u00e8s versatiles \u00e0 cet \u00e9gard.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Or, bien que la technologie \u00e9volue sans cesse (notamment avec les windows \u00e0 32k tokens et plus), on doit toujours faire attention \u00e0 la limite de contexte que peut absorber un LLM lorsqu&rsquo;on le nourrit de documents \u00e0 r\u00e9sumer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LangChain rend cette t\u00e2che, et la management de context aff\u00e9rent, tr\u00e8s faciles. Dans l&rsquo;exemple ci-dessous:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>je prends deux pages d&rsquo;accueil li\u00e9es, celles du site de Reboot Conseil et de ce blog<\/li>\n\n\n\n<li>je merge ensuite le contenu textuel de ces deux sites<\/li>\n\n\n\n<li>cette fusion est ensuite splitt\u00e9e en tokens ingestables en un appel de LLM (la longueur variant selon le mod\u00e8le consid\u00e9r\u00e9)<\/li>\n\n\n\n<li>je cr\u00e9\u00e9 ensuite un prompt template expliquant au bot qu&rsquo;il doit de mani\u00e8re it\u00e9rative prendre le contenu textuel en cours et le r\u00e9sum\u00e9 pr\u00e9c\u00e9dent pour g\u00e9n\u00e9rer un r\u00e9sum\u00e9 final =&gt; la longueur de documents successifs n&rsquo;est plus un obstacle pour g\u00e9n\u00e9rer des r\u00e9sum\u00e9s pertinents<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Voici les \u00e9tapes susmentionn\u00e9es =&gt;<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a507a6396692&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a507a6396692\" class=\"wp-block-image size-full wp-lightbox-container\"><img decoding=\"async\" width=\"635\" height=\"186\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-27.png\" alt=\"cr\u00e9ation de web scrapers avec LangChain\" class=\"wp-image-641\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-27.png 635w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-27-300x88.png 300w\" sizes=\"(max-width: 635px) 100vw, 635px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">c&rsquo;est aussi simple que cela de cr\u00e9er un objet qui va scrapper un site web avec LangChain<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a507a63969b7&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a507a63969b7\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"82\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-29-1024x82.png\" alt=\"on split le contenu des pages scrapp\u00e9es pour rester dans la limite de tokens\" class=\"wp-image-643\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-29-1024x82.png 1024w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-29-300x24.png 300w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-29-768x62.png 768w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-29.png 1043w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">on split le contenu des pages scrapp\u00e9es pour rester dans la limite de tokens<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a507a6396cd0&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a507a6396cd0\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"887\" height=\"654\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-30.png\" alt=\"consignes pour le r\u00e9sum\u00e9 de documents successifs\" class=\"wp-image-644\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-30.png 887w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-30-300x221.png 300w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-30-768x566.png 768w\" sizes=\"(max-width: 887px) 100vw, 887px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">consignes pour le r\u00e9sum\u00e9 de documents successifs<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le r\u00e9sultat est tr\u00e8s concluant, comme vous le verrez dans le notebook: on peut instrumenter LangChain et n&rsquo;importe quel LLM pour cr\u00e9er un next-gen web scraper avec tr\u00e8s peu de lignes de code !<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemple de cha\u00eene de questions\/r\u00e9ponses<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Enfin, dans notre dernier example, nous allons r\u00e9 utiliser le m\u00eame contenu scrap\u00e9 tr\u00e8s facilement gr\u00e2ce aux classes de LangChain pour poser une question sur ce qui a \u00e9t\u00e9 scrap\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans le notebook, j&rsquo;utilise <a href=\"https:\/\/github.com\/facebookresearch\/faiss\">FAISS<\/a>, une librairie de recherche efficiente de vecteurs pour r\u00e9cup\u00e9rer les informations pertinentes dans le contenu scrapp\u00e9, transform\u00e9 pr\u00e9alablement en embeddings (rappel sur les embeddings disponible dans <a href=\"https:\/\/ai.reboot-conseil.com\/index.php\/2023\/12\/11\/la-comprehension-du-monde-par-les-lmms-focus-sur-les-embeddings\/\">cet article<\/a>) =&gt;<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a507a63970fa&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a507a63970fa\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"299\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-31-1024x299.png\" alt=\"connection de notre base de connaissances avec le LLM\" class=\"wp-image-648\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-31-1024x299.png 1024w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-31-300x88.png 300w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-31-768x224.png 768w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-31-1536x448.png 1536w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-31.png 1542w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">connection de notre base de connaissances avec le LLM<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a507a63973f4&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a507a63973f4\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"291\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-32-1024x291.png\" alt=\"questions et r\u00e9ponses, le LLM remplit tr\u00e8s bien son r\u00f4le\" class=\"wp-image-650\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-32-1024x291.png 1024w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-32-300x85.png 300w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-32-768x218.png 768w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-32-1536x436.png 1536w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/image-32.png 1585w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">questions et r\u00e9ponses, le LLM remplit tr\u00e8s bien son r\u00f4le<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Avec ces trois petits cas d&rsquo;usage qui ne font qu&rsquo;introduire le set de possibilit\u00e9s offert par LangChain, on se rend compte tr\u00e8s vite de l&rsquo;int\u00e9r\u00eat de d\u00e9velopper son expertise dans l&rsquo;utilisation de ce framework, aujourd&rsquo;hui dominant dans l&rsquo;instrumentation de LLMs. Vous avez une id\u00e9e ? un projet ? N&rsquo;h\u00e9sitez pas \u00e0 nous contacter et nous nous ferons un plaisir de vous construire de super agents intelligents \ud83e\udd16<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Suite \u00e0 l&rsquo;article de mon tr\u00e8s estim\u00e9 coll\u00e8gue de Squad, Tristan, ainsi qu&rsquo;\u00e0 son constant partage, chez Reboot Conseil, des d\u00e9couvertes qu&rsquo;il fait sur le framework depuis qu&rsquo;il s&rsquo;y int\u00e9resse (et je l&rsquo;en remercie vivement pour cela), j&rsquo;ai d\u00e9cid\u00e9 d&rsquo;enfin mettre les mains dans le cambouis et de d\u00e9couvrir les composants de cet incroyable outil. Tristan avait \u00e9crit lors de son pr\u00e9c\u00e9dent article: Toutefois, malgr\u00e9 son potentiel remarquable, la complexit\u00e9 de LangChain peut poser des d\u00e9fis, en particulier pour ceux moins vers\u00e9s dans la programmation avanc\u00e9e. Tristan, tr\u00e8s estim\u00e9 AI squad member Je le confirme: c&rsquo;est assez confusant quand on s&rsquo;y met, mais comme avec beaucoup de softs et concepts de notre m\u00e9tier de d\u00e9veloppeur, \u00e7a finit par faire \u00ab\u00a0click\u00a0\u00bb au bout d&rsquo;un moment. D\u00e9finition de \u00ab\u00a0click\u00a0\u00bb: compr\u00e9hension minimale mais suffisante d&rsquo;un concept hyper important, qui d\u00e9charge une soudaine vague de dopamine dans le cerveau qui souhaite comprendre ledit concept. Ce moment est arriv\u00e9 aujourd&rsquo;hui pour moi, alors je profite de mon excitation actuelle pour vous r\u00e9sumer le potentiel de LangChain de la perspective du d\u00e9veloppeur que je suis, que j&rsquo;ai aper\u00e7u lors de mon parcours exploratoire de sa documentation et de divers Jupyter notebooks pertinents. Qu&rsquo;est-ce que LangChain ? LangChain est un framework qui se pr\u00e9sente comme une \u00ab\u00a0bo\u00eete \u00e0 outils permettant de construire des applications contextuelles et intelligentes \u00e0 l&rsquo;aide d&rsquo;abstractions\u00a0\u00bb . Qu&rsquo;est-ce que \u00e7a veut dire concr\u00e8tement ? H\u00e9 bien, avec Python ou Javascript, vous allez pouvoir utiliser des classes, m\u00e9thodes, et divers pipelines et configurations pour construire des applications qui font un usage extensif des LLMs, et maintenant des LMMs. Prenez le LLM dont vous \u00eates familier, par example GPT-4, et faites-en une application \u00ab\u00a0agentic\u00a0\u00bb et \u00ab\u00a0context-aware\u00a0\u00bb (ce sont les termes que vous retrouverez souvent lorsque l&rsquo;on parle d&rsquo;agents autonomes). \u00ab\u00a0agentic\u00a0\u00bb On dit d&rsquo;une IA qu&rsquo;elle devient agentique lorsqu&rsquo;elle est capable de comprendre, raisonner, et utiliser des donn\u00e9es sp\u00e9cifiques pour ex\u00e9cuter une action qui lui fait sens. \u00ab\u00a0context-aware\u00a0\u00bb Un syst\u00e8me \u00ab\u00a0context-aware\u00a0\u00bb est capable de r\u00e9cup\u00e9rer des donn\u00e9es \u00e0 la demande depuis diverses sources de donn\u00e9es ou d&rsquo;autres syst\u00e8mes en se basant sur l&rsquo;input de l&rsquo;utilisateur. C&rsquo;est, concr\u00e8tement, ce que font les d\u00e9veloppeurs de logiciels depuis des ann\u00e9es mais, dans le contexte de LangChain, cela signifie que l&rsquo;on peut brancher ou un ou plusieurs syst\u00e8mes ou sources de donn\u00e9es, voire d&rsquo;autres LLMs, au dit syst\u00e8me afin d&rsquo;apporter une r\u00e9ponse plus pr\u00e9cise et opportune \u00e0 l&rsquo;utilisateur. Exemples de cas d&rsquo;utilisation de LangChain Une liste des meilleures int\u00e9grations de LangChain est maintenue dans ce repository GitHub, vous allez voir, \u00e7a d\u00e9pote ! LangChain: une approche modulaire Vous l&rsquo;avez compris, LangChain permet d&rsquo;augmenter des syst\u00e8mes avec des LLMs en vous proposant toutes sortes d&rsquo;outils pour ce faire. Son architecture modulaire favorise la construction d&rsquo;applications complexes bas\u00e9es sur les LLMs, en facilitant la connexion des mod\u00e8les \u00e0 diverses sources de donn\u00e9es et agents d\u00e9cisionnels. Parmi ces modules vous trouverez des: C&rsquo;est en combinant ces modules, et bien d&rsquo;autres disponibles, que vous pourrez construire vos applications agentiques. Les examples de cha\u00eenes que nous allons voir Vous trouverez dans ce notebook mes exp\u00e9rimentations li\u00e9es \u00e0 LangChain, j&rsquo;y essaie plusieurs composants du framework avec PaLM2 (le dernier LLM de Google avant Gemini) en LLM sous-jacent. Toute la partie setup n\u00e9cessite un projet sur Google Cloud et un fichier .env, jetez un oeil au repo et mettez \u00e0 jour les valeurs propres \u00e0 votre projet \ud83d\ude09 Nous allons nous pencher ici principalement sur quelques cas d&rsquo;usage d&rsquo;utilisation de cha\u00eenes: Vous allez le voir, les cha\u00eenes constituent un concept tr\u00e8s puissant (\u00e0 tel point que je pense qu&rsquo;il s&rsquo;agit de l&rsquo;\u00e9volution naturelle de notre m\u00e9tier de software developer) qui permet de cr\u00e9er des interactions plut\u00f4t complexes sans avoir \u00e0 \u00e9crire tout le code sous-jacent. A ce jour, LangChain utilise le LCEL (LangChain Expression Language) pour aider le d\u00e9velopper \u00e0 d\u00e9finir ces interactions. Commen\u00e7ons par la cha\u00eene s\u00e9quentielle: Exemple de cha\u00eene s\u00e9quentielle La cha\u00eene s\u00e9quentielle est pertinente pour de nombreux (voire tous) cas d&rsquo;usage: on prend l&rsquo;output d&rsquo;un LLM et on g\u00e9n\u00e8re un autre output avec le m\u00eame ou un autre LLM, dans l&rsquo;exemple de mon notebook: Cet exemple simple est complexifiable \u00e0 l&rsquo;infini et, F\u00eates obligent, je me suis laiss\u00e9 emporter avec cet exemple ^^ je me dois toutefois de rappeler que c&rsquo;est parfaitement pertinent d&rsquo;envisager toutes sortes de pipelines business dans le cadre plus s\u00e9rieux du travail (m\u00eame si dans l&rsquo;IA squad on s&rsquo;\u00e9clate). Dans cet exemple, on voit qu&rsquo;il est tr\u00e8s facile de \u00ab\u00a0piper\u00a0\u00bb des \u00e9l\u00e9ments \u00e0 une cha\u00eene d&rsquo;interactions LLM, j&rsquo;utilise ici RunnablePassThrough afin de pouvoir r\u00e9cup\u00e9rer les \u00e9tapes avant l&rsquo;output final. Dans ce contexte cr\u00e9er une instance de LLM (par exemple celui utilis\u00e9 dans la chain) est rendu aussi tr\u00e8s facile =&gt; **Synopsis: A Cute Christmas Tale** It&rsquo;s Christmas Eve, and the young reindeer, Prancer, is feeling very excited. He can&rsquo;t wait to help Santa deliver presents to all the good little boys and girls around the world. But when he arrives at the North Pole, he discovers that Santa is missing! Prancer is determined to find Santa and save Christmas. He sets off on a journey, meeting all sorts of interesting characters along the way, including a wise old owl, a friendly snowman, and a mischievous elf. As Prancer gets closer to finding Santa, he learns the true meaning of Christmas. He discovers that it&rsquo;s not about presents or decorations, but about love, kindness, and helping others. In the end, Prancer finds Santa and they deliver the presents together. It&rsquo;s a Christmas that Prancer will never forget! PaLM2 en mode cute **A Dark Christmas Tale** It&rsquo;s Christmas Eve, and the young reindeer, Prancer, is feeling very excited. He can&rsquo;t wait to help Santa deliver presents to all the good little boys and girls around the world. But when he arrives at the North Pole, he discovers that Santa is missing! Prancer is determined to find Santa, but he soon realizes that the North Pole is not as magical as he thought. The elves are overworked and exhausted, the reindeer are<\/p>\n","protected":false},"author":1,"featured_media":667,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[36,7,51,50,35],"class_list":["post-590","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-llm","tag-artificial-intelligence","tag-ia","tag-langchain","tag-llm","tag-reboot-conseil"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\ud83d\ude98 Test-drive de LangChain \u26d3\ufe0f: mon retour d&#039;exp\u00e9rience \ud83e\udd2f -<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\ud83d\ude98 Test-drive de LangChain \u26d3\ufe0f: mon retour d&#039;exp\u00e9rience \ud83e\udd2f -\" \/>\n<meta property=\"og:description\" content=\"Suite \u00e0 l&rsquo;article de mon tr\u00e8s estim\u00e9 coll\u00e8gue de Squad, Tristan, ainsi qu&rsquo;\u00e0 son constant partage, chez Reboot Conseil, des d\u00e9couvertes qu&rsquo;il fait sur le framework depuis qu&rsquo;il s&rsquo;y int\u00e9resse (et je l&rsquo;en remercie vivement pour cela), j&rsquo;ai d\u00e9cid\u00e9 d&rsquo;enfin mettre les mains dans le cambouis et de d\u00e9couvrir les composants de cet incroyable outil. Tristan avait \u00e9crit lors de son pr\u00e9c\u00e9dent article: Toutefois, malgr\u00e9 son potentiel remarquable, la complexit\u00e9 de LangChain peut poser des d\u00e9fis, en particulier pour ceux moins vers\u00e9s dans la programmation avanc\u00e9e. Tristan, tr\u00e8s estim\u00e9 AI squad member Je le confirme: c&rsquo;est assez confusant quand on s&rsquo;y met, mais comme avec beaucoup de softs et concepts de notre m\u00e9tier de d\u00e9veloppeur, \u00e7a finit par faire \u00ab\u00a0click\u00a0\u00bb au bout d&rsquo;un moment. D\u00e9finition de \u00ab\u00a0click\u00a0\u00bb: compr\u00e9hension minimale mais suffisante d&rsquo;un concept hyper important, qui d\u00e9charge une soudaine vague de dopamine dans le cerveau qui souhaite comprendre ledit concept. Ce moment est arriv\u00e9 aujourd&rsquo;hui pour moi, alors je profite de mon excitation actuelle pour vous r\u00e9sumer le potentiel de LangChain de la perspective du d\u00e9veloppeur que je suis, que j&rsquo;ai aper\u00e7u lors de mon parcours exploratoire de sa documentation et de divers Jupyter notebooks pertinents. Qu&rsquo;est-ce que LangChain ? LangChain est un framework qui se pr\u00e9sente comme une \u00ab\u00a0bo\u00eete \u00e0 outils permettant de construire des applications contextuelles et intelligentes \u00e0 l&rsquo;aide d&rsquo;abstractions\u00a0\u00bb . Qu&rsquo;est-ce que \u00e7a veut dire concr\u00e8tement ? H\u00e9 bien, avec Python ou Javascript, vous allez pouvoir utiliser des classes, m\u00e9thodes, et divers pipelines et configurations pour construire des applications qui font un usage extensif des LLMs, et maintenant des LMMs. Prenez le LLM dont vous \u00eates familier, par example GPT-4, et faites-en une application \u00ab\u00a0agentic\u00a0\u00bb et \u00ab\u00a0context-aware\u00a0\u00bb (ce sont les termes que vous retrouverez souvent lorsque l&rsquo;on parle d&rsquo;agents autonomes). \u00ab\u00a0agentic\u00a0\u00bb On dit d&rsquo;une IA qu&rsquo;elle devient agentique lorsqu&rsquo;elle est capable de comprendre, raisonner, et utiliser des donn\u00e9es sp\u00e9cifiques pour ex\u00e9cuter une action qui lui fait sens. \u00ab\u00a0context-aware\u00a0\u00bb Un syst\u00e8me \u00ab\u00a0context-aware\u00a0\u00bb est capable de r\u00e9cup\u00e9rer des donn\u00e9es \u00e0 la demande depuis diverses sources de donn\u00e9es ou d&rsquo;autres syst\u00e8mes en se basant sur l&rsquo;input de l&rsquo;utilisateur. C&rsquo;est, concr\u00e8tement, ce que font les d\u00e9veloppeurs de logiciels depuis des ann\u00e9es mais, dans le contexte de LangChain, cela signifie que l&rsquo;on peut brancher ou un ou plusieurs syst\u00e8mes ou sources de donn\u00e9es, voire d&rsquo;autres LLMs, au dit syst\u00e8me afin d&rsquo;apporter une r\u00e9ponse plus pr\u00e9cise et opportune \u00e0 l&rsquo;utilisateur. Exemples de cas d&rsquo;utilisation de LangChain Une liste des meilleures int\u00e9grations de LangChain est maintenue dans ce repository GitHub, vous allez voir, \u00e7a d\u00e9pote ! LangChain: une approche modulaire Vous l&rsquo;avez compris, LangChain permet d&rsquo;augmenter des syst\u00e8mes avec des LLMs en vous proposant toutes sortes d&rsquo;outils pour ce faire. Son architecture modulaire favorise la construction d&rsquo;applications complexes bas\u00e9es sur les LLMs, en facilitant la connexion des mod\u00e8les \u00e0 diverses sources de donn\u00e9es et agents d\u00e9cisionnels. Parmi ces modules vous trouverez des: C&rsquo;est en combinant ces modules, et bien d&rsquo;autres disponibles, que vous pourrez construire vos applications agentiques. Les examples de cha\u00eenes que nous allons voir Vous trouverez dans ce notebook mes exp\u00e9rimentations li\u00e9es \u00e0 LangChain, j&rsquo;y essaie plusieurs composants du framework avec PaLM2 (le dernier LLM de Google avant Gemini) en LLM sous-jacent. Toute la partie setup n\u00e9cessite un projet sur Google Cloud et un fichier .env, jetez un oeil au repo et mettez \u00e0 jour les valeurs propres \u00e0 votre projet \ud83d\ude09 Nous allons nous pencher ici principalement sur quelques cas d&rsquo;usage d&rsquo;utilisation de cha\u00eenes: Vous allez le voir, les cha\u00eenes constituent un concept tr\u00e8s puissant (\u00e0 tel point que je pense qu&rsquo;il s&rsquo;agit de l&rsquo;\u00e9volution naturelle de notre m\u00e9tier de software developer) qui permet de cr\u00e9er des interactions plut\u00f4t complexes sans avoir \u00e0 \u00e9crire tout le code sous-jacent. A ce jour, LangChain utilise le LCEL (LangChain Expression Language) pour aider le d\u00e9velopper \u00e0 d\u00e9finir ces interactions. Commen\u00e7ons par la cha\u00eene s\u00e9quentielle: Exemple de cha\u00eene s\u00e9quentielle La cha\u00eene s\u00e9quentielle est pertinente pour de nombreux (voire tous) cas d&rsquo;usage: on prend l&rsquo;output d&rsquo;un LLM et on g\u00e9n\u00e8re un autre output avec le m\u00eame ou un autre LLM, dans l&rsquo;exemple de mon notebook: Cet exemple simple est complexifiable \u00e0 l&rsquo;infini et, F\u00eates obligent, je me suis laiss\u00e9 emporter avec cet exemple ^^ je me dois toutefois de rappeler que c&rsquo;est parfaitement pertinent d&rsquo;envisager toutes sortes de pipelines business dans le cadre plus s\u00e9rieux du travail (m\u00eame si dans l&rsquo;IA squad on s&rsquo;\u00e9clate). Dans cet exemple, on voit qu&rsquo;il est tr\u00e8s facile de \u00ab\u00a0piper\u00a0\u00bb des \u00e9l\u00e9ments \u00e0 une cha\u00eene d&rsquo;interactions LLM, j&rsquo;utilise ici RunnablePassThrough afin de pouvoir r\u00e9cup\u00e9rer les \u00e9tapes avant l&rsquo;output final. Dans ce contexte cr\u00e9er une instance de LLM (par exemple celui utilis\u00e9 dans la chain) est rendu aussi tr\u00e8s facile =&gt; **Synopsis: A Cute Christmas Tale** It&rsquo;s Christmas Eve, and the young reindeer, Prancer, is feeling very excited. He can&rsquo;t wait to help Santa deliver presents to all the good little boys and girls around the world. But when he arrives at the North Pole, he discovers that Santa is missing! Prancer is determined to find Santa and save Christmas. He sets off on a journey, meeting all sorts of interesting characters along the way, including a wise old owl, a friendly snowman, and a mischievous elf. As Prancer gets closer to finding Santa, he learns the true meaning of Christmas. He discovers that it&rsquo;s not about presents or decorations, but about love, kindness, and helping others. In the end, Prancer finds Santa and they deliver the presents together. It&rsquo;s a Christmas that Prancer will never forget! PaLM2 en mode cute **A Dark Christmas Tale** It&rsquo;s Christmas Eve, and the young reindeer, Prancer, is feeling very excited. He can&rsquo;t wait to help Santa deliver presents to all the good little boys and girls around the world. But when he arrives at the North Pole, he discovers that Santa is missing! Prancer is determined to find Santa, but he soon realizes that the North Pole is not as magical as he thought. The elves are overworked and exhausted, the reindeer are\" \/>\n<meta property=\"og:url\" content=\"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-18T06:30:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-18T10:40:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/OIP.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"474\" \/>\n\t<meta property=\"og:image:height\" content=\"248\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Yacine Touati\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Yacine Touati\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/\"},\"author\":{\"name\":\"Yacine Touati\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/#\/schema\/person\/2947c0a3dd038b2bf559d53fbc9c5576\"},\"headline\":\"\ud83d\ude98 Test-drive de LangChain \u26d3\ufe0f: mon retour d&rsquo;exp\u00e9rience \ud83e\udd2f\",\"datePublished\":\"2023-12-18T06:30:00+00:00\",\"dateModified\":\"2023-12-18T10:40:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/\"},\"wordCount\":2111,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/OIP.jpeg\",\"keywords\":[\"Artificial Intelligence\",\"IA\",\"LangChain\",\"LLM\",\"Reboot Conseil\"],\"articleSection\":[\"LLM\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/\",\"url\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/\",\"name\":\"\ud83d\ude98 Test-drive de LangChain \u26d3\ufe0f: mon retour d'exp\u00e9rience \ud83e\udd2f -\",\"isPartOf\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/OIP.jpeg\",\"datePublished\":\"2023-12-18T06:30:00+00:00\",\"dateModified\":\"2023-12-18T10:40:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/#primaryimage\",\"url\":\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/OIP.jpeg\",\"contentUrl\":\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/OIP.jpeg\",\"width\":474,\"height\":248},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/beta.reboot-conseil.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\ud83d\ude98 Test-drive de LangChain \u26d3\ufe0f: mon retour d&rsquo;exp\u00e9rience \ud83e\udd2f\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/#website\",\"url\":\"https:\/\/beta.reboot-conseil.com\/\",\"name\":\"AI Squad\",\"description\":\"Dans le doute, Reboot\",\"publisher\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/beta.reboot-conseil.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/#organization\",\"name\":\"AI Squad By Reboot Conseil\",\"url\":\"https:\/\/beta.reboot-conseil.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/09\/cropped-cropped-Logo-IA-Squad-by-Reboot-Conseil-3.png\",\"contentUrl\":\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/09\/cropped-cropped-Logo-IA-Squad-by-Reboot-Conseil-3.png\",\"width\":500,\"height\":218,\"caption\":\"AI Squad By Reboot Conseil\"},\"image\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/#\/schema\/person\/2947c0a3dd038b2bf559d53fbc9c5576\",\"name\":\"Yacine Touati\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6da6ec3d9bbc05c0f70ccbd05c5fa47f4de7a9df9ec40ce281f012db7267c287?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6da6ec3d9bbc05c0f70ccbd05c5fa47f4de7a9df9ec40ce281f012db7267c287?s=96&d=mm&r=g\",\"caption\":\"Yacine Touati\"},\"sameAs\":[\"https:\/\/ai.rebootconseil.com\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\ud83d\ude98 Test-drive de LangChain \u26d3\ufe0f: mon retour d'exp\u00e9rience \ud83e\udd2f -","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/","og_locale":"fr_FR","og_type":"article","og_title":"\ud83d\ude98 Test-drive de LangChain \u26d3\ufe0f: mon retour d'exp\u00e9rience \ud83e\udd2f -","og_description":"Suite \u00e0 l&rsquo;article de mon tr\u00e8s estim\u00e9 coll\u00e8gue de Squad, Tristan, ainsi qu&rsquo;\u00e0 son constant partage, chez Reboot Conseil, des d\u00e9couvertes qu&rsquo;il fait sur le framework depuis qu&rsquo;il s&rsquo;y int\u00e9resse (et je l&rsquo;en remercie vivement pour cela), j&rsquo;ai d\u00e9cid\u00e9 d&rsquo;enfin mettre les mains dans le cambouis et de d\u00e9couvrir les composants de cet incroyable outil. Tristan avait \u00e9crit lors de son pr\u00e9c\u00e9dent article: Toutefois, malgr\u00e9 son potentiel remarquable, la complexit\u00e9 de LangChain peut poser des d\u00e9fis, en particulier pour ceux moins vers\u00e9s dans la programmation avanc\u00e9e. Tristan, tr\u00e8s estim\u00e9 AI squad member Je le confirme: c&rsquo;est assez confusant quand on s&rsquo;y met, mais comme avec beaucoup de softs et concepts de notre m\u00e9tier de d\u00e9veloppeur, \u00e7a finit par faire \u00ab\u00a0click\u00a0\u00bb au bout d&rsquo;un moment. D\u00e9finition de \u00ab\u00a0click\u00a0\u00bb: compr\u00e9hension minimale mais suffisante d&rsquo;un concept hyper important, qui d\u00e9charge une soudaine vague de dopamine dans le cerveau qui souhaite comprendre ledit concept. Ce moment est arriv\u00e9 aujourd&rsquo;hui pour moi, alors je profite de mon excitation actuelle pour vous r\u00e9sumer le potentiel de LangChain de la perspective du d\u00e9veloppeur que je suis, que j&rsquo;ai aper\u00e7u lors de mon parcours exploratoire de sa documentation et de divers Jupyter notebooks pertinents. Qu&rsquo;est-ce que LangChain ? LangChain est un framework qui se pr\u00e9sente comme une \u00ab\u00a0bo\u00eete \u00e0 outils permettant de construire des applications contextuelles et intelligentes \u00e0 l&rsquo;aide d&rsquo;abstractions\u00a0\u00bb . Qu&rsquo;est-ce que \u00e7a veut dire concr\u00e8tement ? H\u00e9 bien, avec Python ou Javascript, vous allez pouvoir utiliser des classes, m\u00e9thodes, et divers pipelines et configurations pour construire des applications qui font un usage extensif des LLMs, et maintenant des LMMs. Prenez le LLM dont vous \u00eates familier, par example GPT-4, et faites-en une application \u00ab\u00a0agentic\u00a0\u00bb et \u00ab\u00a0context-aware\u00a0\u00bb (ce sont les termes que vous retrouverez souvent lorsque l&rsquo;on parle d&rsquo;agents autonomes). \u00ab\u00a0agentic\u00a0\u00bb On dit d&rsquo;une IA qu&rsquo;elle devient agentique lorsqu&rsquo;elle est capable de comprendre, raisonner, et utiliser des donn\u00e9es sp\u00e9cifiques pour ex\u00e9cuter une action qui lui fait sens. \u00ab\u00a0context-aware\u00a0\u00bb Un syst\u00e8me \u00ab\u00a0context-aware\u00a0\u00bb est capable de r\u00e9cup\u00e9rer des donn\u00e9es \u00e0 la demande depuis diverses sources de donn\u00e9es ou d&rsquo;autres syst\u00e8mes en se basant sur l&rsquo;input de l&rsquo;utilisateur. C&rsquo;est, concr\u00e8tement, ce que font les d\u00e9veloppeurs de logiciels depuis des ann\u00e9es mais, dans le contexte de LangChain, cela signifie que l&rsquo;on peut brancher ou un ou plusieurs syst\u00e8mes ou sources de donn\u00e9es, voire d&rsquo;autres LLMs, au dit syst\u00e8me afin d&rsquo;apporter une r\u00e9ponse plus pr\u00e9cise et opportune \u00e0 l&rsquo;utilisateur. Exemples de cas d&rsquo;utilisation de LangChain Une liste des meilleures int\u00e9grations de LangChain est maintenue dans ce repository GitHub, vous allez voir, \u00e7a d\u00e9pote ! LangChain: une approche modulaire Vous l&rsquo;avez compris, LangChain permet d&rsquo;augmenter des syst\u00e8mes avec des LLMs en vous proposant toutes sortes d&rsquo;outils pour ce faire. Son architecture modulaire favorise la construction d&rsquo;applications complexes bas\u00e9es sur les LLMs, en facilitant la connexion des mod\u00e8les \u00e0 diverses sources de donn\u00e9es et agents d\u00e9cisionnels. Parmi ces modules vous trouverez des: C&rsquo;est en combinant ces modules, et bien d&rsquo;autres disponibles, que vous pourrez construire vos applications agentiques. Les examples de cha\u00eenes que nous allons voir Vous trouverez dans ce notebook mes exp\u00e9rimentations li\u00e9es \u00e0 LangChain, j&rsquo;y essaie plusieurs composants du framework avec PaLM2 (le dernier LLM de Google avant Gemini) en LLM sous-jacent. Toute la partie setup n\u00e9cessite un projet sur Google Cloud et un fichier .env, jetez un oeil au repo et mettez \u00e0 jour les valeurs propres \u00e0 votre projet \ud83d\ude09 Nous allons nous pencher ici principalement sur quelques cas d&rsquo;usage d&rsquo;utilisation de cha\u00eenes: Vous allez le voir, les cha\u00eenes constituent un concept tr\u00e8s puissant (\u00e0 tel point que je pense qu&rsquo;il s&rsquo;agit de l&rsquo;\u00e9volution naturelle de notre m\u00e9tier de software developer) qui permet de cr\u00e9er des interactions plut\u00f4t complexes sans avoir \u00e0 \u00e9crire tout le code sous-jacent. A ce jour, LangChain utilise le LCEL (LangChain Expression Language) pour aider le d\u00e9velopper \u00e0 d\u00e9finir ces interactions. Commen\u00e7ons par la cha\u00eene s\u00e9quentielle: Exemple de cha\u00eene s\u00e9quentielle La cha\u00eene s\u00e9quentielle est pertinente pour de nombreux (voire tous) cas d&rsquo;usage: on prend l&rsquo;output d&rsquo;un LLM et on g\u00e9n\u00e8re un autre output avec le m\u00eame ou un autre LLM, dans l&rsquo;exemple de mon notebook: Cet exemple simple est complexifiable \u00e0 l&rsquo;infini et, F\u00eates obligent, je me suis laiss\u00e9 emporter avec cet exemple ^^ je me dois toutefois de rappeler que c&rsquo;est parfaitement pertinent d&rsquo;envisager toutes sortes de pipelines business dans le cadre plus s\u00e9rieux du travail (m\u00eame si dans l&rsquo;IA squad on s&rsquo;\u00e9clate). Dans cet exemple, on voit qu&rsquo;il est tr\u00e8s facile de \u00ab\u00a0piper\u00a0\u00bb des \u00e9l\u00e9ments \u00e0 une cha\u00eene d&rsquo;interactions LLM, j&rsquo;utilise ici RunnablePassThrough afin de pouvoir r\u00e9cup\u00e9rer les \u00e9tapes avant l&rsquo;output final. Dans ce contexte cr\u00e9er une instance de LLM (par exemple celui utilis\u00e9 dans la chain) est rendu aussi tr\u00e8s facile =&gt; **Synopsis: A Cute Christmas Tale** It&rsquo;s Christmas Eve, and the young reindeer, Prancer, is feeling very excited. He can&rsquo;t wait to help Santa deliver presents to all the good little boys and girls around the world. But when he arrives at the North Pole, he discovers that Santa is missing! Prancer is determined to find Santa and save Christmas. He sets off on a journey, meeting all sorts of interesting characters along the way, including a wise old owl, a friendly snowman, and a mischievous elf. As Prancer gets closer to finding Santa, he learns the true meaning of Christmas. He discovers that it&rsquo;s not about presents or decorations, but about love, kindness, and helping others. In the end, Prancer finds Santa and they deliver the presents together. It&rsquo;s a Christmas that Prancer will never forget! PaLM2 en mode cute **A Dark Christmas Tale** It&rsquo;s Christmas Eve, and the young reindeer, Prancer, is feeling very excited. He can&rsquo;t wait to help Santa deliver presents to all the good little boys and girls around the world. But when he arrives at the North Pole, he discovers that Santa is missing! Prancer is determined to find Santa, but he soon realizes that the North Pole is not as magical as he thought. The elves are overworked and exhausted, the reindeer are","og_url":"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/","article_published_time":"2023-12-18T06:30:00+00:00","article_modified_time":"2023-12-18T10:40:00+00:00","og_image":[{"width":474,"height":248,"url":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/OIP.jpeg","type":"image\/jpeg"}],"author":"Yacine Touati","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Yacine Touati","Dur\u00e9e de lecture estim\u00e9e":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/#article","isPartOf":{"@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/"},"author":{"name":"Yacine Touati","@id":"https:\/\/beta.reboot-conseil.com\/#\/schema\/person\/2947c0a3dd038b2bf559d53fbc9c5576"},"headline":"\ud83d\ude98 Test-drive de LangChain \u26d3\ufe0f: mon retour d&rsquo;exp\u00e9rience \ud83e\udd2f","datePublished":"2023-12-18T06:30:00+00:00","dateModified":"2023-12-18T10:40:00+00:00","mainEntityOfPage":{"@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/"},"wordCount":2111,"commentCount":0,"publisher":{"@id":"https:\/\/beta.reboot-conseil.com\/#organization"},"image":{"@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/#primaryimage"},"thumbnailUrl":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/OIP.jpeg","keywords":["Artificial Intelligence","IA","LangChain","LLM","Reboot Conseil"],"articleSection":["LLM"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/","url":"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/","name":"\ud83d\ude98 Test-drive de LangChain \u26d3\ufe0f: mon retour d'exp\u00e9rience \ud83e\udd2f -","isPartOf":{"@id":"https:\/\/beta.reboot-conseil.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/#primaryimage"},"image":{"@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/#primaryimage"},"thumbnailUrl":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/OIP.jpeg","datePublished":"2023-12-18T06:30:00+00:00","dateModified":"2023-12-18T10:40:00+00:00","breadcrumb":{"@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/#primaryimage","url":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/OIP.jpeg","contentUrl":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/12\/OIP.jpeg","width":474,"height":248},{"@type":"BreadcrumbList","@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2023\/12\/18\/test-drive-de-langchain-mon-retour-dexperience\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/beta.reboot-conseil.com\/"},{"@type":"ListItem","position":2,"name":"\ud83d\ude98 Test-drive de LangChain \u26d3\ufe0f: mon retour d&rsquo;exp\u00e9rience \ud83e\udd2f"}]},{"@type":"WebSite","@id":"https:\/\/beta.reboot-conseil.com\/#website","url":"https:\/\/beta.reboot-conseil.com\/","name":"AI Squad","description":"Dans le doute, Reboot","publisher":{"@id":"https:\/\/beta.reboot-conseil.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/beta.reboot-conseil.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/beta.reboot-conseil.com\/#organization","name":"AI Squad By Reboot Conseil","url":"https:\/\/beta.reboot-conseil.com\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/beta.reboot-conseil.com\/#\/schema\/logo\/image\/","url":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/09\/cropped-cropped-Logo-IA-Squad-by-Reboot-Conseil-3.png","contentUrl":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/09\/cropped-cropped-Logo-IA-Squad-by-Reboot-Conseil-3.png","width":500,"height":218,"caption":"AI Squad By Reboot Conseil"},"image":{"@id":"https:\/\/beta.reboot-conseil.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/beta.reboot-conseil.com\/#\/schema\/person\/2947c0a3dd038b2bf559d53fbc9c5576","name":"Yacine Touati","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/beta.reboot-conseil.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/6da6ec3d9bbc05c0f70ccbd05c5fa47f4de7a9df9ec40ce281f012db7267c287?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6da6ec3d9bbc05c0f70ccbd05c5fa47f4de7a9df9ec40ce281f012db7267c287?s=96&d=mm&r=g","caption":"Yacine Touati"},"sameAs":["https:\/\/ai.rebootconseil.com"]}]}},"_links":{"self":[{"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/posts\/590","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/comments?post=590"}],"version-history":[{"count":73,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/posts\/590\/revisions"}],"predecessor-version":[{"id":677,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/posts\/590\/revisions\/677"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/media\/667"}],"wp:attachment":[{"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/media?parent=590"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/categories?post=590"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/tags?post=590"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}