import{s as Ee,n as _e,o as Be}from"../chunks/scheduler.37c15a92.js";import{S as He,i as Qe,g as o,s as n,r as _,A as $e,h as i,f as l,c as a,j as he,u as B,x as u,k as be,y as Se,a as s,v as H,d as Q,t as $,w as S}from"../chunks/index.2bf4358c.js";import{C as Le}from"../chunks/CodeBlock.4e987730.js";import{H as xe}from"../chunks/Heading.8ada512a.js";import{E as Ve}from"../chunks/getInferenceSnippets.0aa3753f.js";function Ne(pe){let M,V,x,N,r,z,p,ce="Tout comme les outils, l’appel de fonctions (<em>function-calling</em>) est une <strong>façon pour un LLM de prendre des actions basé sur son environnement</strong>. Cependant, la capacité d’appel de fonctions <strong>est apprise par le modèle</strong>, et repose <strong>moins sur le <em>prompting</em> que d’autres techniques d’agents</strong>.",k,c,Te='Cette approche a d’abord été <a href="https://openai.com/index/function-calling-and-other-api-updates/" rel="nofollow">introduite dans GPT-4</a>, et a ensuite été reproduite dans d’autres modèles.',P,T,me="Durant l’Unité 1, l’agent <strong>n’a pas appris à utiliser les outils</strong>. Nous avons juste fourni une liste, et nous nous sommes appuyés sur le fait que <strong>le modèle était capable de généraliser la définition d’un plan à l’aide de ces outils</strong>.",Z,m,Je="<strong>Aalors qu’avec l’appel de fonctions, l’agent est finetunét (entraîné) pour utiliser les outils</strong>.",R,J,F,j,je="Dans l’Unité 1, nous avons exploré le <em>workflow</em> général d’un agent. Une fois que l’utilisateur a donné quelques outils à l’agent et l’a sollicité avec une requête, le modèle va effectuer un cycle à travers :",G,d,de="<li><em>Réflexion</em> : Quelle(s) action(s) dois-je prendre pour atteindre l’objectif.</li> <li><em>Action</em> : Formater l’action avec le bon paramètre et arrêter la génération.</li> <li><em>Observation</em> : Récupérer le résultat de l’exécution.</li>",W,y,ye="Dans une conversation « typique » avec un modèle via une API, la conversation alternera entre les messages utilisateur et assistant comme ceci :",O,I,D,U,Ie="L’appel de fonctions apporte <strong>de nouveaux rôles à la conversation</strong> !",Y,f,Ue="<li>Un nouveau rôle pour une <strong>action</strong></li> <li>Un nouveau rôle pour une <strong>observation</strong></li>",X,w,fe='Si nous prenons l’<a href="https://docs.mistral.ai/capabilities/function_calling/" rel="nofollow">API Mistral</a> comme exemple, cela ressemble à ceci :',K,q,ee,A,we="<p>… Mais vous avez dit qu’il y a un nouveau rôle pour les appels de fonctions ?</p>",te,v,qe="<strong>Oui et non</strong>, dans ce cas et dans beaucoup d’autres API, le modèle formate l’action à prendre “assistant” comme message. Le gabarit de chat représentera ensuite cela comme des <strong><em>tokens</em> spéciaux</strong> pour l’appel de fonctions.",le,g,Ae="<li><code>[AVAILABLE_TOOLS]</code> – Démarre la liste des outils disponibles</li> <li><code>[/AVAILABLE_TOOLS]</code> – Termine la liste des outils disponibles</li> <li><code>[TOOL_CALLS]</code> – Fait un appel à un outil (c’est-à-dire, prend une action)</li> <li><code>[TOOL_RESULTS]</code> – Observe le résultat de l’action</li> <li><code>[/TOOL_RESULTS]</code> – Fin de l’observation (c’est-à-dire, le modèle peut décoder à nouveau)</li>",se,C,ve='Nous reparlerons de l’appel de fonctions dans ce cours, mais si vous voulez approfondir, vous pouvez consulter <a href="https://docs.mistral.ai/capabilities/function_calling/" rel="nofollow">cette excellente section de la documentation de Mistral</a>.',ne,ae,oe,h,ge='Maintenant que nous avons vu ce qu’est l’appel de fonctions et comment cela fonctionne, <strong>ajoutons cette capacité à un modèle qui n’en dispose pas nativement</strong> : le <a href="https://huggingface.co/google/gemma-2-2b-it" rel="nofollow">google/gemma-2-2b-it</a>. Pour cela nous allons ajouter de nouveaux <em>tokens</em> spéciaux au modèle.',ie,b,Ce="Pour être capable de faire ceci, <strong>nous devons d’abord comprendre comment marche le finetuning et la méthode LoRA</strong>.",ue,L,Me,E,re;return r=new xe({props:{title:"Qu’est-ce que l’appel de fonctions ?",local:"quest-ce-que-lappel-de-fonctions-",headingTag:"h1"}}),J=new xe({props:{title:"Comment le modèle apprend-il à prendre une action ?",local:"comment-le-modèle-apprend-il-à-prendre-une-action-",headingTag:"h2"}}),I=new Le({props:{code:"Y29udmVyc2F0aW9uJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTdCJTIycm9sZSUyMiUzQSUyMCUyMnVzZXIlMjIlMkMlMjAlMjJjb250ZW50JTIyJTNBJTIwJTIySidhaSUyMGJlc29pbiUyMGQnYWlkZSUyMGF2ZWMlMjBtYSUyMGNvbW1hbmRlJTIyJTdEJTJDJTBBJTIwJTIwJTIwJTIwJTdCJTIycm9sZSUyMiUzQSUyMCUyMmFzc2lzdGFudCUyMiUyQyUyMCUyMmNvbnRlbnQlMjIlM0ElMjAlMjJKZSUyMHNlcmFpcyUyMHJhdmklMjBkZSUyMHZvdXMlMjBhaWRlci4lMjBQb3Vycmllei12b3VzJTIwZm91cm5pciUyMHZvdHJlJTIwbnVtJUMzJUE5cm8lMjBkZSUyMGNvbW1hbmRlJTIwJTNGJTIyJTdEJTJDJTBBJTIwJTIwJTIwJTIwJTdCJTIycm9sZSUyMiUzQSUyMCUyMnVzZXIlMjIlMkMlMjAlMjJjb250ZW50JTIyJTNBJTIwJTIyQydlc3QlMjBPUkRFUi0xMjMlMjIlN0QlMkMlMEElNUQ=",highlighted:`conversation = [
    {<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;user&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;J&#x27;ai besoin d&#x27;aide avec ma commande&quot;</span>},
    {<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;assistant&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;Je serais ravi de vous aider. Pourriez-vous fournir votre numéro de commande ?&quot;</span>},
    {<span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;user&quot;</span>, <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;C&#x27;est ORDER-123&quot;</span>},
]`,wrap:!1}}),q=new Le({props:{code:"Y29udmVyc2F0aW9uJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIycm9sZSUyMiUzQSUyMCUyMnVzZXIlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJjb250ZW50JTIyJTNBJTIwJTIyUXVlbCUyMGVzdCUyMGxlJTIwc3RhdHV0JTIwZGUlMjBtYSUyMHRyYW5zYWN0aW9uJTIwVDEwMDElMjAlM0YlMjIlMEElMjAlMjAlMjAlMjAlN0QlMkMlMEElMjAlMjAlMjAlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJyb2xlJTIyJTNBJTIwJTIyYXNzaXN0YW50JTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyY29udGVudCUyMiUzQSUyMCUyMiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMmZ1bmN0aW9uX2NhbGwlMjIlM0ElMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJuYW1lJTIyJTNBJTIwJTIycmV0cmlldmVfcGF5bWVudF9zdGF0dXMlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJhcmd1bWVudHMlMjIlM0ElMjAlMjIlN0IlNUMlMjJ0cmFuc2FjdGlvbl9pZCU1QyUyMiUzQSUyMCU1QyUyMlQxMDAxJTVDJTIyJTdEJTIyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTdEJTJDJTBBJTIwJTIwJTIwJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIycm9sZSUyMiUzQSUyMCUyMnRvb2wlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJuYW1lJTIyJTNBJTIwJTIycmV0cmlldmVfcGF5bWVudF9zdGF0dXMlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJjb250ZW50JTIyJTNBJTIwJTIyJTdCJTVDJTIyc3RhdHVzJTVDJTIyJTNBJTIwJTVDJTIyUGFpZCU1QyUyMiU3RCUyMiUwQSUyMCUyMCUyMCUyMCU3RCUyQyUwQSUyMCUyMCUyMCUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMnJvbGUlMjIlM0ElMjAlMjJhc3Npc3RhbnQlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJjb250ZW50JTIyJTNBJTIwJTIyVm90cmUlMjB0cmFuc2FjdGlvbiUyMFQxMDAxJTIwYSUyMCVDMyVBOXQlQzMlQTklMjBwYXklQzMlQTllJTIwYXZlYyUyMHN1Y2MlQzMlQThzLiUyMiUwQSUyMCUyMCUyMCUyMCU3RCUwQSU1RA==",highlighted:`conversation = [
    {
        <span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;user&quot;</span>,
        <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;Quel est le statut de ma transaction T1001 ?&quot;</span>
    },
    {
        <span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;assistant&quot;</span>,
        <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;&quot;</span>,
        <span class="hljs-string">&quot;function_call&quot;</span>: {
            <span class="hljs-string">&quot;name&quot;</span>: <span class="hljs-string">&quot;retrieve_payment_status&quot;</span>,
            <span class="hljs-string">&quot;arguments&quot;</span>: <span class="hljs-string">&quot;{\\&quot;transaction_id\\&quot;: \\&quot;T1001\\&quot;}&quot;</span>
        }
    },
    {
        <span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;tool&quot;</span>,
        <span class="hljs-string">&quot;name&quot;</span>: <span class="hljs-string">&quot;retrieve_payment_status&quot;</span>,
        <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;{\\&quot;status\\&quot;: \\&quot;Paid\\&quot;}&quot;</span>
    },
    {
        <span class="hljs-string">&quot;role&quot;</span>: <span class="hljs-string">&quot;assistant&quot;</span>,
        <span class="hljs-string">&quot;content&quot;</span>: <span class="hljs-string">&quot;Votre transaction T1001 a été payée avec succès.&quot;</span>
    }
]`,wrap:!1}}),L=new Ve({props:{source:"https://github.com/huggingface/agents-course/blob/main/units/fr/bonus-unit1/what-is-function-calling.mdx"}}),{c(){M=o("meta"),V=n(),x=o("p"),N=n(),_(r.$$.fragment),z=n(),p=o("p"),p.innerHTML=ce,k=n(),c=o("p"),c.innerHTML=Te,P=n(),T=o("p"),T.innerHTML=me,Z=n(),m=o("p"),m.innerHTML=Je,R=n(),_(J.$$.fragment),F=n(),j=o("p"),j.innerHTML=je,G=n(),d=o("ol"),d.innerHTML=de,W=n(),y=o("p"),y.textContent=ye,O=n(),_(I.$$.fragment),D=n(),U=o("p"),U.innerHTML=Ie,Y=n(),f=o("ol"),f.innerHTML=Ue,X=n(),w=o("p"),w.innerHTML=fe,K=n(),_(q.$$.fragment),ee=n(),A=o("blockquote"),A.innerHTML=we,te=n(),v=o("p"),v.innerHTML=qe,le=n(),g=o("ul"),g.innerHTML=Ae,se=n(),C=o("p"),C.innerHTML=ve,ne=n(),ae=o("hr"),oe=n(),h=o("p"),h.innerHTML=ge,ie=n(),b=o("p"),b.innerHTML=Ce,ue=n(),_(L.$$.fragment),Me=n(),E=o("p"),this.h()},l(e){const t=$e("svelte-u9bgzb",document.head);M=i(t,"META",{name:!0,content:!0}),t.forEach(l),V=a(e),x=i(e,"P",{}),he(x).forEach(l),N=a(e),B(r.$$.fragment,e),z=a(e),p=i(e,"P",{"data-svelte-h":!0}),u(p)!=="svelte-q3ypsg"&&(p.innerHTML=ce),k=a(e),c=i(e,"P",{"data-svelte-h":!0}),u(c)!=="svelte-dpu9er"&&(c.innerHTML=Te),P=a(e),T=i(e,"P",{"data-svelte-h":!0}),u(T)!=="svelte-l6v82y"&&(T.innerHTML=me),Z=a(e),m=i(e,"P",{"data-svelte-h":!0}),u(m)!=="svelte-sf8olv"&&(m.innerHTML=Je),R=a(e),B(J.$$.fragment,e),F=a(e),j=i(e,"P",{"data-svelte-h":!0}),u(j)!=="svelte-xhofzk"&&(j.innerHTML=je),G=a(e),d=i(e,"OL",{"data-svelte-h":!0}),u(d)!=="svelte-1b41jd8"&&(d.innerHTML=de),W=a(e),y=i(e,"P",{"data-svelte-h":!0}),u(y)!=="svelte-1c9qbc6"&&(y.textContent=ye),O=a(e),B(I.$$.fragment,e),D=a(e),U=i(e,"P",{"data-svelte-h":!0}),u(U)!=="svelte-1ag0xq6"&&(U.innerHTML=Ie),Y=a(e),f=i(e,"OL",{"data-svelte-h":!0}),u(f)!=="svelte-q62dog"&&(f.innerHTML=Ue),X=a(e),w=i(e,"P",{"data-svelte-h":!0}),u(w)!=="svelte-lxi2j0"&&(w.innerHTML=fe),K=a(e),B(q.$$.fragment,e),ee=a(e),A=i(e,"BLOCKQUOTE",{"data-svelte-h":!0}),u(A)!=="svelte-imbbvy"&&(A.innerHTML=we),te=a(e),v=i(e,"P",{"data-svelte-h":!0}),u(v)!=="svelte-1y5r6lx"&&(v.innerHTML=qe),le=a(e),g=i(e,"UL",{"data-svelte-h":!0}),u(g)!=="svelte-1fwaikk"&&(g.innerHTML=Ae),se=a(e),C=i(e,"P",{"data-svelte-h":!0}),u(C)!=="svelte-j4ay08"&&(C.innerHTML=ve),ne=a(e),ae=i(e,"HR",{}),oe=a(e),h=i(e,"P",{"data-svelte-h":!0}),u(h)!=="svelte-r9ta16"&&(h.innerHTML=ge),ie=a(e),b=i(e,"P",{"data-svelte-h":!0}),u(b)!=="svelte-1y427x7"&&(b.innerHTML=Ce),ue=a(e),B(L.$$.fragment,e),Me=a(e),E=i(e,"P",{}),he(E).forEach(l),this.h()},h(){be(M,"name","hf:doc:metadata"),be(M,"content",ze)},m(e,t){Se(document.head,M),s(e,V,t),s(e,x,t),s(e,N,t),H(r,e,t),s(e,z,t),s(e,p,t),s(e,k,t),s(e,c,t),s(e,P,t),s(e,T,t),s(e,Z,t),s(e,m,t),s(e,R,t),H(J,e,t),s(e,F,t),s(e,j,t),s(e,G,t),s(e,d,t),s(e,W,t),s(e,y,t),s(e,O,t),H(I,e,t),s(e,D,t),s(e,U,t),s(e,Y,t),s(e,f,t),s(e,X,t),s(e,w,t),s(e,K,t),H(q,e,t),s(e,ee,t),s(e,A,t),s(e,te,t),s(e,v,t),s(e,le,t),s(e,g,t),s(e,se,t),s(e,C,t),s(e,ne,t),s(e,ae,t),s(e,oe,t),s(e,h,t),s(e,ie,t),s(e,b,t),s(e,ue,t),H(L,e,t),s(e,Me,t),s(e,E,t),re=!0},p:_e,i(e){re||(Q(r.$$.fragment,e),Q(J.$$.fragment,e),Q(I.$$.fragment,e),Q(q.$$.fragment,e),Q(L.$$.fragment,e),re=!0)},o(e){$(r.$$.fragment,e),$(J.$$.fragment,e),$(I.$$.fragment,e),$(q.$$.fragment,e),$(L.$$.fragment,e),re=!1},d(e){e&&(l(V),l(x),l(N),l(z),l(p),l(k),l(c),l(P),l(T),l(Z),l(m),l(R),l(F),l(j),l(G),l(d),l(W),l(y),l(O),l(D),l(U),l(Y),l(f),l(X),l(w),l(K),l(ee),l(A),l(te),l(v),l(le),l(g),l(se),l(C),l(ne),l(ae),l(oe),l(h),l(ie),l(b),l(ue),l(Me),l(E)),l(M),S(r,e),S(J,e),S(I,e),S(q,e),S(L,e)}}}const ze='{"title":"Qu’est-ce que l’appel de fonctions ?","local":"quest-ce-que-lappel-de-fonctions-","sections":[{"title":"Comment le modèle apprend-il à prendre une action ?","local":"comment-le-modèle-apprend-il-à-prendre-une-action-","sections":[],"depth":2}],"depth":1}';function ke(pe){return Be(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class We extends He{constructor(M){super(),Qe(this,M,ke,Ne,Ee,{})}}export{We as component};
