import{s as _t,n as kt,o as $t}from"../chunks/scheduler.f6b352c8.js";import{S as Bt,i as Ht,g as a,s as e,r as k,A as xt,h as M,f as n,c as i,j as vt,u as $,x as o,k as Et,y as Vt,a as s,v as B,d as H,t as x,w as V}from"../chunks/index.7f38e934.js";import{C as bt}from"../chunks/CodeBlock.3ee8293b.js";import{H as Lt}from"../chunks/Heading.333929c4.js";import{E as St}from"../chunks/getInferenceSnippets.98ff1e6e.js";function Nt(Tt){let u,S,L,N,c,Q,T,ht='Function-calling là <strong>cách để LLM thực hiện hành động trên môi trường của nó</strong>. Tính năng này được <a href="https://openai.com/index/function-calling-and-other-api-updates/" rel="nofollow">giới thiệu lần đầu trong GPT-4</a>, sau đó được áp dụng ở các model khác.',W,h,pt="Giống như Tools của Agent, function-calling cho phép model <strong>tương tác với môi trường</strong>. Tuy nhiên, khả năng gọi hàm <strong>được model học</strong> và ít phụ thuộc vào prompting hơn các kỹ thuật Agent khác.",G,p,Jt="Trong chương 1, Agent <strong>không học cách sử dụng Tools</strong> mà chỉ được cung cấp danh sách Tools, dựa trên khả năng tổng quát hóa của model để lập kế hoạch sử dụng chúng.",z,J,jt="Còn với function-calling, <strong>Agent được fine-tuning (tinh chỉnh) để sử dụng Tools</strong>.",P,j,Z,r,rt="Ở chương 1, ta đã tìm hiểu workflow tổng quan của Agent. Khi người dùng cung cấp Tools và đưa ra truy vấn, model sẽ lặp qua các bước:",Y,g,gt="<li><em>Suy nghĩ</em>: Xác định hành động cần thực hiện để đạt mục tiêu</li> <li><em>Hành động</em>: Định dạng hành động với tham số chính xác và dừng generation</li> <li><em>Quan sát</em>: Nhận kết quả từ việc thực thi</li>",R,I,It="Trong hội thoại thông thường qua API, cuộc trò chuyện sẽ luân phiên giữa user và assistant:",F,y,O,m,yt="Function-calling mang đến <strong>vai trò mới trong hội thoại</strong>:",D,w,mt="<li>Vai trò mới cho <strong>Hành động</strong></li> <li>Vai trò mới cho <strong>Quan sát</strong></li>",X,A,wt='Ví dụ từ <a href="https://docs.mistral.ai/capabilities/function_calling/" rel="nofollow">Mistral API</a>:',K,U,tt,q,At="<p>…Nhưng bạn nói có vai trò mới cho function calls?</p>",lt,d,Ut="<strong>Vừa đúng vừa sai</strong>. Trong trường hợp này và nhiều API khác, model định dạng hành động dưới dạng message “assistant”. Chat template sẽ biểu diễn điều này qua <strong>Special Token</strong> (Token đặc biệt):",nt,f,qt="<li><code>[AVAILABLE_TOOLS]</code> – Bắt đầu danh sách Tools</li> <li><code>[/AVAILABLE_TOOLS]</code> – Kết thúc danh sách Tools</li> <li><code>[TOOL_CALLS]</code> – Gọi Tool (thực hiện “Hành động”)</li> <li><code>[TOOL_RESULTS]</code> – “Quan sát” kết quả</li> <li><code>[/TOOL_RESULTS]</code> – Kết thúc quan sát (model có thể tiếp tục decode)</li>",st,C,dt='Chúng ta sẽ tìm hiểu thêm về function-calling trong khóa học. Bạn có thể xem <a href="https://docs.mistral.ai/capabilities/function_calling/" rel="nofollow">tài liệu chi tiết</a> để hiểu sâu hơn.',et,it,at,v,ft='Sau khi hiểu function-calling là gì và cách hoạt động, hãy <strong>thêm khả năng function-calling cho model chưa hỗ trợ</strong>: <a href="https://huggingface.co/google/gemma-2-2b-it" rel="nofollow">google/gemma-2-2b-it</a> bằng cách thêm Special Token mới.',Mt,E,Ct="<strong>Trước tiên cần hiểu về fine-tuning và LoRA</strong>.",ot,b,ut,_,ct;return c=new Lt({props:{title:"Function Calling là gì?",local:"function-calling-là-gì",headingTag:"h1"}}),j=new Lt({props:{title:"Model “học” cách thực hiện hành động như thế nào?",local:"model-học-cách-thực-hiện-hành-động-như-thế-nào",headingTag:"h2"}}),y=new bt({props:{code:"Y29udmVyc2F0aW9uJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTdCJTIycm9sZSUyMiUzQSUyMCUyMnVzZXIlMjIlMkMlMjAlMjJjb250ZW50JTIyJTNBJTIwJTIySSUyMG5lZWQlMjBoZWxwJTIwd2l0aCUyMG15JTIwb3JkZXIlMjIlN0QlMkMlMEElMjAlMjAlMjAlMjAlN0IlMjJyb2xlJTIyJTNBJTIwJTIyYXNzaXN0YW50JTIyJTJDJTIwJTIyY29udGVudCUyMiUzQSUyMCUyMkknZCUyMGJlJTIwaGFwcHklMjB0byUyMGhlbHAuJTIwQ291bGQlMjB5b3UlMjBwcm92aWRlJTIweW91ciUyMG9yZGVyJTIwbnVtYmVyJTNGJTIyJTdEJTJDJTBBJTIwJTIwJTIwJTIwJTdCJTIycm9sZSUyMiUzQSUyMCUyMnVzZXIlMjIlMkMlMjAlMjJjb250ZW50JTIyJTNBJTIwJTIySXQncyUyME9SREVSLTEyMyUyMiU3RCUyQyUwQSU1RA==",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;I need help with my order&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;I&#x27;d be happy to help. Could you provide your order number?&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;It&#x27;s ORDER-123&quot;</span>},
]`,wrap:!1}}),U=new bt({props:{code:"Y29udmVyc2F0aW9uJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIycm9sZSUyMiUzQSUyMCUyMnVzZXIlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJjb250ZW50JTIyJTNBJTIwJTIyV2hhdCdzJTIwdGhlJTIwc3RhdHVzJTIwb2YlMjBteSUyMHRyYW5zYWN0aW9uJTIwVDEwMDElM0YlMjIlMEElMjAlMjAlMjAlMjAlN0QlMkMlMEElMjAlMjAlMjAlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJyb2xlJTIyJTNBJTIwJTIyYXNzaXN0YW50JTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyY29udGVudCUyMiUzQSUyMCUyMiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMmZ1bmN0aW9uX2NhbGwlMjIlM0ElMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJuYW1lJTIyJTNBJTIwJTIycmV0cmlldmVfcGF5bWVudF9zdGF0dXMlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJhcmd1bWVudHMlMjIlM0ElMjAlMjIlN0IlNUMlMjJ0cmFuc2FjdGlvbl9pZCU1QyUyMiUzQSUyMCU1QyUyMlQxMDAxJTVDJTIyJTdEJTIyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTdEJTJDJTBBJTIwJTIwJTIwJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIycm9sZSUyMiUzQSUyMCUyMnRvb2wlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJuYW1lJTIyJTNBJTIwJTIycmV0cmlldmVfcGF5bWVudF9zdGF0dXMlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJjb250ZW50JTIyJTNBJTIwJTIyJTdCJTVDJTIyc3RhdHVzJTVDJTIyJTNBJTIwJTVDJTIyUGFpZCU1QyUyMiU3RCUyMiUwQSUyMCUyMCUyMCUyMCU3RCUyQyUwQSUyMCUyMCUyMCUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMnJvbGUlMjIlM0ElMjAlMjJhc3Npc3RhbnQlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJjb250ZW50JTIyJTNBJTIwJTIyWW91ciUyMHRyYW5zYWN0aW9uJTIwVDEwMDElMjBoYXMlMjBiZWVuJTIwc3VjY2Vzc2Z1bGx5JTIwcGFpZC4lMjIlMEElMjAlMjAlMjAlMjAlN0QlMEElNUQ=",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;What&#x27;s the status of my 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;Your transaction T1001 has been successfully paid.&quot;</span>
    }
]`,wrap:!1}}),b=new St({props:{source:"https://github.com/huggingface/agents-course/blob/main/units/vi/bonus-unit1/what-is-function-calling.mdx"}}),{c(){u=a("meta"),S=e(),L=a("p"),N=e(),k(c.$$.fragment),Q=e(),T=a("p"),T.innerHTML=ht,W=e(),h=a("p"),h.innerHTML=pt,G=e(),p=a("p"),p.innerHTML=Jt,z=e(),J=a("p"),J.innerHTML=jt,P=e(),k(j.$$.fragment),Z=e(),r=a("p"),r.textContent=rt,Y=e(),g=a("ol"),g.innerHTML=gt,R=e(),I=a("p"),I.textContent=It,F=e(),k(y.$$.fragment),O=e(),m=a("p"),m.innerHTML=yt,D=e(),w=a("ol"),w.innerHTML=mt,X=e(),A=a("p"),A.innerHTML=wt,K=e(),k(U.$$.fragment),tt=e(),q=a("blockquote"),q.innerHTML=At,lt=e(),d=a("p"),d.innerHTML=Ut,nt=e(),f=a("ul"),f.innerHTML=qt,st=e(),C=a("p"),C.innerHTML=dt,et=e(),it=a("hr"),at=e(),v=a("p"),v.innerHTML=ft,Mt=e(),E=a("p"),E.innerHTML=Ct,ot=e(),k(b.$$.fragment),ut=e(),_=a("p"),this.h()},l(t){const l=xt("svelte-u9bgzb",document.head);u=M(l,"META",{name:!0,content:!0}),l.forEach(n),S=i(t),L=M(t,"P",{}),vt(L).forEach(n),N=i(t),$(c.$$.fragment,t),Q=i(t),T=M(t,"P",{"data-svelte-h":!0}),o(T)!=="svelte-1jvh7zc"&&(T.innerHTML=ht),W=i(t),h=M(t,"P",{"data-svelte-h":!0}),o(h)!=="svelte-1gtkelx"&&(h.innerHTML=pt),G=i(t),p=M(t,"P",{"data-svelte-h":!0}),o(p)!=="svelte-1ckz7wb"&&(p.innerHTML=Jt),z=i(t),J=M(t,"P",{"data-svelte-h":!0}),o(J)!=="svelte-1kwwxzg"&&(J.innerHTML=jt),P=i(t),$(j.$$.fragment,t),Z=i(t),r=M(t,"P",{"data-svelte-h":!0}),o(r)!=="svelte-1b8tyma"&&(r.textContent=rt),Y=i(t),g=M(t,"OL",{"data-svelte-h":!0}),o(g)!=="svelte-1hdsccg"&&(g.innerHTML=gt),R=i(t),I=M(t,"P",{"data-svelte-h":!0}),o(I)!=="svelte-14jc72u"&&(I.textContent=It),F=i(t),$(y.$$.fragment,t),O=i(t),m=M(t,"P",{"data-svelte-h":!0}),o(m)!=="svelte-1mk18t5"&&(m.innerHTML=yt),D=i(t),w=M(t,"OL",{"data-svelte-h":!0}),o(w)!=="svelte-17g5qj6"&&(w.innerHTML=mt),X=i(t),A=M(t,"P",{"data-svelte-h":!0}),o(A)!=="svelte-1200hty"&&(A.innerHTML=wt),K=i(t),$(U.$$.fragment,t),tt=i(t),q=M(t,"BLOCKQUOTE",{"data-svelte-h":!0}),o(q)!=="svelte-1fanzbq"&&(q.innerHTML=At),lt=i(t),d=M(t,"P",{"data-svelte-h":!0}),o(d)!=="svelte-sotvol"&&(d.innerHTML=Ut),nt=i(t),f=M(t,"UL",{"data-svelte-h":!0}),o(f)!=="svelte-1n8dsrk"&&(f.innerHTML=qt),st=i(t),C=M(t,"P",{"data-svelte-h":!0}),o(C)!=="svelte-pc88k"&&(C.innerHTML=dt),et=i(t),it=M(t,"HR",{}),at=i(t),v=M(t,"P",{"data-svelte-h":!0}),o(v)!=="svelte-ef6g18"&&(v.innerHTML=ft),Mt=i(t),E=M(t,"P",{"data-svelte-h":!0}),o(E)!=="svelte-hk8tni"&&(E.innerHTML=Ct),ot=i(t),$(b.$$.fragment,t),ut=i(t),_=M(t,"P",{}),vt(_).forEach(n),this.h()},h(){Et(u,"name","hf:doc:metadata"),Et(u,"content",Qt)},m(t,l){Vt(document.head,u),s(t,S,l),s(t,L,l),s(t,N,l),B(c,t,l),s(t,Q,l),s(t,T,l),s(t,W,l),s(t,h,l),s(t,G,l),s(t,p,l),s(t,z,l),s(t,J,l),s(t,P,l),B(j,t,l),s(t,Z,l),s(t,r,l),s(t,Y,l),s(t,g,l),s(t,R,l),s(t,I,l),s(t,F,l),B(y,t,l),s(t,O,l),s(t,m,l),s(t,D,l),s(t,w,l),s(t,X,l),s(t,A,l),s(t,K,l),B(U,t,l),s(t,tt,l),s(t,q,l),s(t,lt,l),s(t,d,l),s(t,nt,l),s(t,f,l),s(t,st,l),s(t,C,l),s(t,et,l),s(t,it,l),s(t,at,l),s(t,v,l),s(t,Mt,l),s(t,E,l),s(t,ot,l),B(b,t,l),s(t,ut,l),s(t,_,l),ct=!0},p:kt,i(t){ct||(H(c.$$.fragment,t),H(j.$$.fragment,t),H(y.$$.fragment,t),H(U.$$.fragment,t),H(b.$$.fragment,t),ct=!0)},o(t){x(c.$$.fragment,t),x(j.$$.fragment,t),x(y.$$.fragment,t),x(U.$$.fragment,t),x(b.$$.fragment,t),ct=!1},d(t){t&&(n(S),n(L),n(N),n(Q),n(T),n(W),n(h),n(G),n(p),n(z),n(J),n(P),n(Z),n(r),n(Y),n(g),n(R),n(I),n(F),n(O),n(m),n(D),n(w),n(X),n(A),n(K),n(tt),n(q),n(lt),n(d),n(nt),n(f),n(st),n(C),n(et),n(it),n(at),n(v),n(Mt),n(E),n(ot),n(ut),n(_)),n(u),V(c,t),V(j,t),V(y,t),V(U,t),V(b,t)}}}const Qt='{"title":"Function Calling là gì?","local":"function-calling-là-gì","sections":[{"title":"Model “học” cách thực hiện hành động như thế nào?","local":"model-học-cách-thực-hiện-hành-động-như-thế-nào","sections":[],"depth":2}],"depth":1}';function Wt(Tt){return $t(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Rt extends Bt{constructor(u){super(),Ht(this,u,Wt,Nt,_t,{})}}export{Rt as component};
