Buckets:

rtrm's picture
download
raw
30.9 kB
<meta charset="utf-8" /><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;Hãy tạo Agent đầu tiên của chúng ta với smolagents&quot;,&quot;local&quot;:&quot;hãy-tạo-agent-đầu-tiên-của-chúng-ta-với-smolagents&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;smolagents là gì?&quot;,&quot;local&quot;:&quot;smolagents-là-gì&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Cùng build Agent thôi!&quot;,&quot;local&quot;:&quot;cùng-build-agent-thôi&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Các Tools&quot;,&quot;local&quot;:&quot;các-tools&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Agent&quot;,&quot;local&quot;:&quot;agent&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2}],&quot;depth&quot;:1}">
<link href="/docs/agents-course/pr_545/vi/_app/immutable/assets/0.e3b0c442.css" rel="modulepreload">
<link rel="modulepreload" href="/docs/agents-course/pr_545/vi/_app/immutable/entry/start.aedc0924.js">
<link rel="modulepreload" href="/docs/agents-course/pr_545/vi/_app/immutable/chunks/scheduler.f6b352c8.js">
<link rel="modulepreload" href="/docs/agents-course/pr_545/vi/_app/immutable/chunks/singletons.21caee07.js">
<link rel="modulepreload" href="/docs/agents-course/pr_545/vi/_app/immutable/chunks/index.26cf6c5a.js">
<link rel="modulepreload" href="/docs/agents-course/pr_545/vi/_app/immutable/chunks/paths.9e3b2f65.js">
<link rel="modulepreload" href="/docs/agents-course/pr_545/vi/_app/immutable/entry/app.7987e38c.js">
<link rel="modulepreload" href="/docs/agents-course/pr_545/vi/_app/immutable/chunks/index.7f38e934.js">
<link rel="modulepreload" href="/docs/agents-course/pr_545/vi/_app/immutable/nodes/0.ec512cbf.js">
<link rel="modulepreload" href="/docs/agents-course/pr_545/vi/_app/immutable/chunks/each.e59479a4.js">
<link rel="modulepreload" href="/docs/agents-course/pr_545/vi/_app/immutable/nodes/23.2f329c4f.js">
<link rel="modulepreload" href="/docs/agents-course/pr_545/vi/_app/immutable/chunks/CodeBlock.3ee8293b.js">
<link rel="modulepreload" href="/docs/agents-course/pr_545/vi/_app/immutable/chunks/Heading.333929c4.js">
<link rel="modulepreload" href="/docs/agents-course/pr_545/vi/_app/immutable/chunks/getInferenceSnippets.40a969e5.js"><!-- HEAD_svelte-u9bgzb_START --><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;Hãy tạo Agent đầu tiên của chúng ta với smolagents&quot;,&quot;local&quot;:&quot;hãy-tạo-agent-đầu-tiên-của-chúng-ta-với-smolagents&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;smolagents là gì?&quot;,&quot;local&quot;:&quot;smolagents-là-gì&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Cùng build Agent thôi!&quot;,&quot;local&quot;:&quot;cùng-build-agent-thôi&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Các Tools&quot;,&quot;local&quot;:&quot;các-tools&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Agent&quot;,&quot;local&quot;:&quot;agent&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2}],&quot;depth&quot;:1}"><!-- HEAD_svelte-u9bgzb_END --> <p></p> <h1 class="relative group"><a id="hãy-tạo-agent-đầu-tiên-của-chúng-ta-với-smolagents" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#hãy-tạo-agent-đầu-tiên-của-chúng-ta-với-smolagents"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Hãy tạo Agent đầu tiên của chúng ta với smolagents</span></h1> <p data-svelte-h="svelte-buqkgk">Ở chương trước, ta đã học cách tạo Agent từ đầu bằng Python và <strong>thấy quá trình này tốn công thế nào</strong>. May mắn thay, nhiều thư viện Agent giúp đơn giản hóa công việc này bằng cách <strong>xử lý phần lớn công đoạn phức tạp</strong>.</p> <p data-svelte-h="svelte-12zeh2c">Trong bài thực hành này, <strong>bạn sẽ tạo Agent đầu tiên của riêng mình</strong> có khả năng thực hiện các hành động như tạo ảnh, tìm kiếm web, kiểm tra múi giờ và hơn thế nữa!</p> <p data-svelte-h="svelte-1mbcqdt">Bạn cũng sẽ publish agent <strong>trên Hugging Face Space để chia sẻ với bạn bè và đồng nghiệp</strong>.</p> <p data-svelte-h="svelte-1ll10q1">Cùng bắt đầu thôi!</p> <h2 class="relative group"><a id="smolagents-là-gì" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#smolagents-là-gì"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>smolagents là gì?</span></h2> <img src="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit1/smolagents.png" alt="smolagents"> <p data-svelte-h="svelte-qwjigl">Để tạo Agent này, ta sẽ dùng <code>smolagents</code> - thư viện <strong>cung cấp framework để phát triển agent dễ dàng</strong>.</p> <p data-svelte-h="svelte-3cpfpg">Thư viện nhẹ này được thiết kế cho sự đơn giản, nhưng nó đóng gói phần lớn độ phức tạp khi xây dựng Agent, giúp bạn tập trung vào thiết kế hành vi cho agent.</p> <p data-svelte-h="svelte-1rqsvym">Ta sẽ tìm hiểu sâu hơn về smolagents ở chương tiếp theo. Trong lúc chờ, bạn có thể xem <a href="https://huggingface.co/blog/smolagents" target="_blank">blog post</a> hoặc <a href="https://github.com/huggingface/smolagents" target="_blank">repo GitHub</a> của thư viện.</p> <p data-svelte-h="svelte-1v3p60h">Tóm lại, <code>smolagents</code> là thư viện tập trung vào <strong>codeAgent</strong> - loại agent thực hiện <strong>“Hành động”</strong> qua các khối code, sau đó <strong>“Quan sát”</strong> kết quả bằng cách chạy code.</p> <p data-svelte-h="svelte-1mku3r9">Đây là ví dụ những gì ta sẽ xây dựng!</p> <p data-svelte-h="svelte-kd3zwk">Ta cung cấp cho agent <strong>công cụ tạo ảnh</strong> và yêu cầu nó tạo ảnh mèo.</p> <p data-svelte-h="svelte-8ooi62">Agent trong <code>smolagents</code> sẽ có <strong>hành vi giống với agent tự build trước đây</strong>: nó sẽ <strong>tư duy, hành động và quan sát theo chu kỳ</strong> cho đến khi có câu trả lời cuối:</p> <iframe width="560" height="315" src="https://www.youtube.com/embed/PQDKcWiuln4?si=ysSTDZoi8y55FVvA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe> <p data-svelte-h="svelte-1sw1vep">Thú vị quá phải không?</p> <h2 class="relative group"><a id="cùng-build-agent-thôi" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#cùng-build-agent-thôi"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Cùng build Agent thôi!</span></h2> <p data-svelte-h="svelte-owbvel">Để bắt đầu, duplicate Space này: <a href="https://huggingface.co/spaces/agents-course/First_agent_template" target="_blank">https://huggingface.co/spaces/agents-course/First_agent_template</a></p> <blockquote data-svelte-h="svelte-tiqk6e"><p>Cảm ơn <a href="https://huggingface.co/m-ric" target="_blank">Aymeric</a> đã tạo template này! 🙌</p></blockquote> <p data-svelte-h="svelte-vnzkgj">Duplicate Space nghĩa là <strong>tạo bản copy local trên profile của bạn</strong>:</p> <img src="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit1/duplicate-space.gif" alt="Duplicate"> <p data-svelte-h="svelte-8zx3dl">Xuyên suốt Bài học này, file duy nhất bạn cần sửa là <strong>“app.py”</strong> (hiện đang chưa hoàn thiện). Bạn có thể xem <a href="https://huggingface.co/spaces/agents-course/First_agent_template/blob/main/app.py" rel="nofollow">bản gốc trong template</a>. Để tìm bản của bạn, vào bản copy Space, click tab <code>Files</code> rồi chọn <code>app.py</code> trong danh sách.</p> <p data-svelte-h="svelte-o2blaz">Cùng phân tích code nhé:</p> <ul data-svelte-h="svelte-e9aajc"><li>File bắt đầu với các thư viện cần thiết</li></ul> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START --><span class="hljs-keyword">from</span> smolagents <span class="hljs-keyword">import</span> CodeAgent, DuckDuckGoSearchTool, InferenceClientModel, load_tool, tool
<span class="hljs-keyword">import</span> datetime
<span class="hljs-keyword">import</span> requests
<span class="hljs-keyword">import</span> pytz
<span class="hljs-keyword">import</span> yaml
<span class="hljs-keyword">from</span> tools.final_answer <span class="hljs-keyword">import</span> FinalAnswerTool<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-15kzf9o">Như đã đề cập, ta sẽ dùng trực tiếp lớp <strong>CodeAgent</strong> từ <strong>smolagents</strong>.</p> <h3 class="relative group"><a id="các-tools" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#các-tools"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Các Tools</span></h3> <p data-svelte-h="svelte-1lgvvxk">Giờ đến phần Tools! Nếu cần ôn lại về Tools, hãy xem lại <a href="tools">phần Tools</a> của khóa học.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START --><span class="hljs-meta">@tool</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">my_custom_tool</span>(<span class="hljs-params">arg1:<span class="hljs-built_in">str</span>, arg2:<span class="hljs-built_in">int</span></span>)-&gt; <span class="hljs-built_in">str</span>: <span class="hljs-comment"># quan trọng phải chỉ định kiểu trả về</span>
<span class="hljs-comment"># Giữ nguyên định dạng này cho mô tả công cụ/mô tả đối số nhưng hãy thoải mái sửa đổi công cụ</span>
<span class="hljs-string">&quot;&quot;&quot;Công cụ chưa làm gì cả
Args:
arg1: đối số đầu tiên
arg2: đối số thứ hai
&quot;&quot;&quot;</span>
<span class="hljs-keyword">return</span> <span class="hljs-string">&quot;Bạn sẽ tạo ra phép thuật gì đây?&quot;</span>
<span class="hljs-meta">@tool</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">get_current_time_in_timezone</span>(<span class="hljs-params">timezone: <span class="hljs-built_in">str</span></span>) -&gt; <span class="hljs-built_in">str</span>:
<span class="hljs-string">&quot;&quot;&quot;Công cụ lấy giờ hiện tại theo múi giờ chỉ định.
Args:
timezone: Chuỗi biểu diễn múi giờ hợp lệ (ví dụ: &#x27;America/New_York&#x27;).
&quot;&quot;&quot;</span>
<span class="hljs-keyword">try</span>:
<span class="hljs-comment"># Tạo object múi giờ</span>
tz = pytz.timezone(timezone)
<span class="hljs-comment"># Lấy giờ hiện tại theo múi giờ đó</span>
local_time = datetime.datetime.now(tz).strftime(<span class="hljs-string">&quot;%Y-%m-%d %H:%M:%S&quot;</span>)
<span class="hljs-keyword">return</span> <span class="hljs-string">f&quot;Giờ hiện tại tại <span class="hljs-subst">{timezone}</span> là: <span class="hljs-subst">{local_time}</span>&quot;</span>
<span class="hljs-keyword">except</span> Exception <span class="hljs-keyword">as</span> e:
<span class="hljs-keyword">return</span> <span class="hljs-string">f&quot;Lỗi khi lấy giờ cho múi giờ &#x27;<span class="hljs-subst">{timezone}</span>&#x27;: <span class="hljs-subst">{<span class="hljs-built_in">str</span>(e)}</span>&quot;</span><!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-igb045">Đây chính là phần chúng mình khuyến khích bạn xây dựng! Chúng mình cung cấp hai ví dụ:</p> <ol data-svelte-h="svelte-1kxrjc2"><li><strong>Tool ảo</strong> chưa hoạt động để bạn có thể sửa thành tool hữu ích.</li> <li><strong>Tool thực sự hoạt động</strong> để lấy giờ hiện tại ở bất kỳ đâu.</li></ol> <p data-svelte-h="svelte-pnrvla">Khi định nghĩa tool, quan trọng phải:</p> <ol data-svelte-h="svelte-x833my"><li>Chỉ định kiểu đầu vào/ra cho hàm, ví dụ <code>get_current_time_in_timezone(timezone: str) -&gt; str:</code></li> <li><strong>Docstring định dạng chuẩn</strong>. <code>smolagents</code> yêu cầu mọi đối số phải có <strong>mô tả bằng text trong docstring</strong>.</li></ol> <h3 class="relative group"><a id="agent" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#agent"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Agent</span></h3> <p data-svelte-h="svelte-bof55y">Agent sử dụng <a href="https://huggingface.co/Qwen/Qwen2.5-Coder-32B-Instruct" rel="nofollow"><code>Qwen/Qwen2.5-Coder-32B-Instruct</code></a> làm LLM engine. Đây là mô hình mạnh mẽ mà ta sẽ truy cập qua serverless API.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->final_answer = FinalAnswerTool()
model = InferenceClientModel(
max_tokens=<span class="hljs-number">2096</span>,
temperature=<span class="hljs-number">0.5</span>,
model_id=<span class="hljs-string">&#x27;Qwen/Qwen2.5-Coder-32B-Instruct&#x27;</span>,
custom_role_conversions=<span class="hljs-literal">None</span>,
)
<span class="hljs-keyword">with</span> <span class="hljs-built_in">open</span>(<span class="hljs-string">&quot;prompts.yaml&quot;</span>, <span class="hljs-string">&#x27;r&#x27;</span>) <span class="hljs-keyword">as</span> stream:
prompt_templates = yaml.safe_load(stream)
<span class="hljs-comment"># Tạo CodeAgent</span>
agent = CodeAgent(
model=model,
tools=[final_answer], <span class="hljs-comment"># thêm tools của bạn vào đây (đừng xóa final_answer)</span>
max_steps=<span class="hljs-number">6</span>,
verbosity_level=<span class="hljs-number">1</span>,
grammar=<span class="hljs-literal">None</span>,
planning_interval=<span class="hljs-literal">None</span>,
name=<span class="hljs-literal">None</span>,
description=<span class="hljs-literal">None</span>,
prompt_templates=prompt_templates
)
GradioUI(agent).launch()<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-5bv2w6">Agent này vẫn dùng <code>InferenceClient</code> mà ta đã thấy ở phần trước thông qua lớp <strong>InferenceClientModel</strong>!</p> <p data-svelte-h="svelte-102obei">Chúng mình sẽ đưa thêm ví dụ chi tiết khi giới thiệu framework ở chương 2. Hiện tại, bạn cần tập trung vào <strong>thêm tool mới vào danh sách tools</strong> qua tham số <code>tools</code> của Agent.</p> <p data-svelte-h="svelte-1j1fuxi">Ví dụ bạn có thể dùng <code>DuckDuckGoSearchTool</code> đã được import ở dòng đầu, hoặc xem qua <code>image_generation_tool</code> được load từ Hub ở phần sau.</p> <p data-svelte-h="svelte-1waavh0"><strong>Thêm tools sẽ mở rộng khả năng cho agent</strong> - hãy sáng tạo nhé!</p> <p data-svelte-h="svelte-sz30pr">Toàn bộ “app.py”:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START --><span class="hljs-keyword">from</span> smolagents <span class="hljs-keyword">import</span> CodeAgent, DuckDuckGoSearchTool, InferenceClientModel, load_tool, tool
<span class="hljs-keyword">import</span> datetime
<span class="hljs-keyword">import</span> requests
<span class="hljs-keyword">import</span> pytz
<span class="hljs-keyword">import</span> yaml
<span class="hljs-keyword">from</span> tools.final_answer <span class="hljs-keyword">import</span> FinalAnswerTool
<span class="hljs-keyword">from</span> Gradio_UI <span class="hljs-keyword">import</span> GradioUI
<span class="hljs-comment"># Đây là ví dụ tool chưa làm gì. Hãy khiến chúng mình kinh ngạc với sáng tạo của bạn!</span>
<span class="hljs-meta">@tool</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">my_custom_tool</span>(<span class="hljs-params">arg1:<span class="hljs-built_in">str</span>, arg2:<span class="hljs-built_in">int</span></span>)-&gt; <span class="hljs-built_in">str</span>: <span class="hljs-comment"># quan trọng phải chỉ định kiểu trả về</span>
<span class="hljs-comment"># Giữ nguyên định dạng này cho mô tả công cụ/mô tả đối số nhưng hãy thoải mái sửa đổi công cụ</span>
<span class="hljs-string">&quot;&quot;&quot;Công cụ chưa làm gì cả
Args:
arg1: đối số đầu tiên
arg2: đối số thứ hai
&quot;&quot;&quot;</span>
<span class="hljs-keyword">return</span> <span class="hljs-string">&quot;Bạn sẽ tạo ra phép thuật gì đây?&quot;</span>
<span class="hljs-meta">@tool</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">get_current_time_in_timezone</span>(<span class="hljs-params">timezone: <span class="hljs-built_in">str</span></span>) -&gt; <span class="hljs-built_in">str</span>:
<span class="hljs-string">&quot;&quot;&quot;Công cụ lấy giờ hiện tại theo múi giờ chỉ định.
Args:
timezone: Chuỗi biểu diễn múi giờ hợp lệ (ví dụ: &#x27;America/New_York&#x27;).
&quot;&quot;&quot;</span>
<span class="hljs-keyword">try</span>:
<span class="hljs-comment"># Tạo object múi giờ</span>
tz = pytz.timezone(timezone)
<span class="hljs-comment"># Lấy giờ hiện tại theo múi giờ đó</span>
local_time = datetime.datetime.now(tz).strftime(<span class="hljs-string">&quot;%Y-%m-%d %H:%M:%S&quot;</span>)
<span class="hljs-keyword">return</span> <span class="hljs-string">f&quot;Giờ hiện tại tại <span class="hljs-subst">{timezone}</span> là: <span class="hljs-subst">{local_time}</span>&quot;</span>
<span class="hljs-keyword">except</span> Exception <span class="hljs-keyword">as</span> e:
<span class="hljs-keyword">return</span> <span class="hljs-string">f&quot;Lỗi khi lấy giờ cho múi giờ &#x27;<span class="hljs-subst">{timezone}</span>&#x27;: <span class="hljs-subst">{<span class="hljs-built_in">str</span>(e)}</span>&quot;</span>
final_answer = FinalAnswerTool()
model = InferenceClientModel(
max_tokens=<span class="hljs-number">2096</span>,
temperature=<span class="hljs-number">0.5</span>,
model_id=<span class="hljs-string">&#x27;Qwen/Qwen2.5-Coder-32B-Instruct&#x27;</span>,
custom_role_conversions=<span class="hljs-literal">None</span>,
)
<span class="hljs-comment"># Import tool từ Hub</span>
image_generation_tool = load_tool(<span class="hljs-string">&quot;agents-course/text-to-image&quot;</span>, trust_remote_code=<span class="hljs-literal">True</span>)
<span class="hljs-keyword">with</span> <span class="hljs-built_in">open</span>(<span class="hljs-string">&quot;prompts.yaml&quot;</span>, <span class="hljs-string">&#x27;r&#x27;</span>) <span class="hljs-keyword">as</span> stream:
prompt_templates = yaml.safe_load(stream)
agent = CodeAgent(
model=model,
tools=[final_answer], <span class="hljs-comment"># thêm tools của bạn vào đây (đừng xóa final_answer)</span>
max_steps=<span class="hljs-number">6</span>,
verbosity_level=<span class="hljs-number">1</span>,
grammar=<span class="hljs-literal">None</span>,
planning_interval=<span class="hljs-literal">None</span>,
name=<span class="hljs-literal">None</span>,
description=<span class="hljs-literal">None</span>,
prompt_templates=prompt_templates
)
GradioUI(agent).launch()<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-1sfvm0b"><strong>Mục tiêu</strong> của bạn là làm quen với Space và Agent.</p> <p data-svelte-h="svelte-7m3v7d">Hiện tại, Agent trong template <strong>chưa dùng tool nào</strong>, hãy thử cung cấp cho nó các tool có sẵn hoặc tự tạo tool mới!</p> <p data-svelte-h="svelte-1xbcjlj">Chúng mình rất mong chờ thành quả Agent tuyệt vời của bạn ở kênh discord <strong>#agents-course-showcase</strong>!</p> <hr> <p data-svelte-h="svelte-1kbovdo">Chúc mừng bạn đã build xong Agent đầu tiên! Đừng ngại chia sẻ với bạn bè và đồng nghiệp nhé.</p> <p data-svelte-h="svelte-1wwkm66">Vì đây là lần đầu thử nghiệm, việc Agent có lỗi nhỏ hoặc chạy chậm là hoàn toàn bình thường. Ở các chương sau, ta sẽ học cách xây dựng Agent tốt hơn.</p> <p data-svelte-h="svelte-15mv9re">Cách học tốt nhất là thực hành, nên đừng ngần ngại cập nhật nó, thêm tool mới, thử với mô hình khác, v.v.</p> <p data-svelte-h="svelte-1pxdjiv">Ở phần tiếp theo, bạn sẽ hoàn thành Bài kiểm tra cuối cùng và nhận chứng chỉ!</p> <a class="!text-gray-400 !no-underline text-sm flex items-center not-prose mt-4" href="https://github.com/huggingface/agents-course/blob/main/units/vi/unit1/tutorial.mdx" target="_blank"><span data-svelte-h="svelte-1kd6by1">&lt;</span> <span data-svelte-h="svelte-x0xyl0">&gt;</span> <span data-svelte-h="svelte-1dajgef"><span class="underline ml-1.5">Update</span> on GitHub</span></a> <p></p>
<script>
{
__sveltekit_1ae7zjt = {
assets: "/docs/agents-course/pr_545/vi",
base: "/docs/agents-course/pr_545/vi",
env: {}
};
const element = document.currentScript.parentElement;
const data = [null,null];
Promise.all([
import("/docs/agents-course/pr_545/vi/_app/immutable/entry/start.aedc0924.js"),
import("/docs/agents-course/pr_545/vi/_app/immutable/entry/app.7987e38c.js")
]).then(([kit, app]) => {
kit.start(app, element, {
node_ids: [0, 23],
data,
form: null,
error: null
});
});
}
</script>

Xet Storage Details

Size:
30.9 kB
·
Xet hash:
5d9e946cbbc556d368f018d3ff02f35aa1d608de64d6749da784cc706bbc21ce

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