Buckets:
| <meta charset="utf-8" /><meta name="hf:doc:metadata" content="{"title":"smolagents로 첫 번째 에이전트 만들기","local":"lets-create-our-first-agent-using-smolagents","sections":[{"title":"smolagents란 무엇인가요?","local":"what-is-smolagents","sections":[],"depth":2},{"title":"에이전트 만들기!","local":"lets-build-our-agent","sections":[{"title":"도구","local":"the-tools","sections":[],"depth":3},{"title":"에이전트","local":"the-agent","sections":[],"depth":3}],"depth":2}],"depth":1}"> | |
| <link href="/docs/agents-course/pr_545/ko/_app/immutable/assets/0.e3b0c442.css" rel="modulepreload"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_545/ko/_app/immutable/entry/start.6bd6007b.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_545/ko/_app/immutable/chunks/scheduler.f6b352c8.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_545/ko/_app/immutable/chunks/singletons.d509bc8a.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_545/ko/_app/immutable/chunks/index.26cf6c5a.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_545/ko/_app/immutable/chunks/paths.ee75497a.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_545/ko/_app/immutable/entry/app.5df77bcf.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_545/ko/_app/immutable/chunks/index.7f38e934.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_545/ko/_app/immutable/nodes/0.e7b8cf8b.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_545/ko/_app/immutable/chunks/each.e59479a4.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_545/ko/_app/immutable/nodes/18.f64edf91.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_545/ko/_app/immutable/chunks/CodeBlock.3ee8293b.js"> | |
| <link rel="modulepreload" href="/docs/agents-course/pr_545/ko/_app/immutable/chunks/getInferenceSnippets.1ddaa658.js"><!-- HEAD_svelte-u9bgzb_START --><meta name="hf:doc:metadata" content="{"title":"smolagents로 첫 번째 에이전트 만들기","local":"lets-create-our-first-agent-using-smolagents","sections":[{"title":"smolagents란 무엇인가요?","local":"what-is-smolagents","sections":[],"depth":2},{"title":"에이전트 만들기!","local":"lets-build-our-agent","sections":[{"title":"도구","local":"the-tools","sections":[],"depth":3},{"title":"에이전트","local":"the-agent","sections":[],"depth":3}],"depth":2}],"depth":1}"><!-- HEAD_svelte-u9bgzb_END --> <p></p> <h1 class="relative group"><a id="lets-create-our-first-agent-using-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="#lets-create-our-first-agent-using-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>smolagents로 첫 번째 에이전트 만들기</span></h1> <p data-svelte-h="svelte-16kao9e">앞 섹션에서 우리는 Python 코드로 에이전트를 처음부터 만드는 방법을 배웠고, <strong>이 과정이 얼마나 번거로울 수 있는지</strong> 직접 확인했습니다. 다행히도 많은 에이전트 라이브러리들이 <strong>복잡한 작업들을 자동화하여</strong> 이 과정을 훨씬 간단하게 만들어줍니다.</p> <p data-svelte-h="svelte-12xl0qp">이 튜토리얼에서는 <strong>여러분의 첫 번째 에이전트를 만들게 됩니다</strong>. 이 에이전트는 이미지 생성, 웹 검색, 시간대 확인 등 다양한 작업을 수행할 수 있습니다!</p> <p data-svelte-h="svelte-7pj360">또한 여러분이 만든 에이전트를 <strong>Hugging Face Space에 올려서 친구들이나 동료들과 공유</strong>할 수도 있습니다.</p> <p data-svelte-h="svelte-1p77l2g">시작해 볼까요!</p> <h2 class="relative group"><a id="what-is-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="#what-is-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>smolagents란 무엇인가요?</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-fm8o9f">이 에이전트를 만들기 위해, 우리는 <strong>에이전트 개발을 쉽게 해주는 프레임워크인</strong> <code>smolagents</code> 라이브러리를 사용할 것입니다.</p> <p data-svelte-h="svelte-1ye5gey">이 가벼운 라이브러리는 단순함을 목표로 설계되었지만, 에이전트 구축의 복잡한 부분들을 추상화하여 여러분이 에이전트의 행동 설계에만 집중할 수 있게 도와줍니다.</p> <p data-svelte-h="svelte-10ris7n">다음 Unit에서 smolagents에 대해 더 자세히 알아볼 예정입니다. 그동안 이 <a href="https://huggingface.co/blog/smolagents" target="_blank">블로그 포스트</a>나 라이브러리의 <a href="https://github.com/huggingface/smolagents" target="_blank">GitHub 저장소</a>를 확인해보세요.</p> <p data-svelte-h="svelte-1i1mxrq">간단히 말해, <code>smolagents</code>는 <strong>codeAgent</strong>에 초점을 맞춘 라이브러리입니다. 이런 유형의 에이전트는 코드 블록을 통해 <strong>“행동(Actions)”</strong>을 수행한 다음, 코드를 실행하여 결과를 <strong>“관찰(Observes)”</strong>합니다.</p> <p data-svelte-h="svelte-w93vl6">다음은 우리가 만들 에이전트의 예시입니다!</p> <p data-svelte-h="svelte-qzgmx9">우리가 에이전트에 <strong>이미지 생성 도구</strong>를 제공하고 고양이 이미지를 생성해달라고 요청했습니다.</p> <p data-svelte-h="svelte-u9i4n2"><code>smolagents</code> 내의 에이전트는 <strong>이전에 우리가 직접 만든 에이전트와 동일한 방식으로 작동합니다</strong>: 최종 답변에 도달할 때까지 <strong>생각하고, 행동하고, 관찰하는 사이클을 반복</strong>합니다:</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-t8xohv">흥미롭지 않나요?</p> <h2 class="relative group"><a id="lets-build-our-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="#lets-build-our-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>에이전트 만들기!</span></h2> <p data-svelte-h="svelte-1vu2nx4">시작하려면 이 Space를 복제하세요: <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-1h14509"><p>이 템플릿을 만들어준 <a href="https://huggingface.co/m-ric" target="_blank">Aymeric</a>에게 감사드립니다! 🙌</p></blockquote> <p data-svelte-h="svelte-av6lbx">Space를 복제한다는 것은 <strong>자신의 프로필에 개인 사본을 만드는 것</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-m6o041">이 강의를 통틀어 여러분이 수정해야 할 파일은 (현재 미완성 상태인) <strong>“app.py”</strong> 하나뿐입니다. 여기서 <a href="https://huggingface.co/spaces/agents-course/First_agent_template/blob/main/app.py" rel="nofollow">템플릿의 원본 파일</a>을 확인할 수 있습니다. 여러분의 파일을 찾으려면, 복제한 Space로 이동한 다음 <code>Files</code> 탭을 클릭하고 디렉토리 목록에서 <code>app.py</code>를 클릭하세요.</p> <p data-svelte-h="svelte-2gsad3">코드를 함께 살펴봅시다:</p> <ul data-svelte-h="svelte-p9wgv0"><li>파일은 몇 가지 필요한 라이브러리 불러오기로 시작합니다</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, HfApiModel, 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-3ac5pg">앞서 설명했듯이, <strong>smolagents</strong>에서 직접 <strong>CodeAgent</strong> 클래스를 사용할 것입니다.</p> <h3 class="relative group"><a id="the-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="#the-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>도구</span></h3> <p data-svelte-h="svelte-11qln8j">이제 도구에 대해 알아봅시다! 도구에 관한 내용을 다시 복습하고 싶다면, 강의의 <a href="tools">도구</a> 섹션을 참고하세요.</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>)-> <span class="hljs-built_in">str</span>: <span class="hljs-comment"># 반환 타입을 명시하는 것이 중요합니다</span> | |
| <span class="hljs-comment"># 도구 설명/인수 설명 형식은 유지하되, 도구 자체는 자유롭게 수정하세요</span> | |
| <span class="hljs-string">"""아직 아무 기능이 없는 도구입니다 | |
| Args: | |
| arg1: 첫 번째 인수 | |
| arg2: 두 번째 인수 | |
| """</span> | |
| <span class="hljs-keyword">return</span> <span class="hljs-string">"어떤 마법을 만들어 보실 건가요?"</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>) -> <span class="hljs-built_in">str</span>: | |
| <span class="hljs-string">"""특정 시간대의 현재 시간을 알려주는 도구입니다. | |
| Args: | |
| timezone: 유효한 시간대를 나타내는 문자열(예: 'America/New_York'). | |
| """</span> | |
| <span class="hljs-keyword">try</span>: | |
| <span class="hljs-comment"># 시간대 객체 생성</span> | |
| tz = pytz.timezone(timezone) | |
| <span class="hljs-comment"># 해당 시간대의 현재 시간 가져오기</span> | |
| local_time = datetime.datetime.now(tz).strftime(<span class="hljs-string">"%Y-%m-%d %H:%M:%S"</span>) | |
| <span class="hljs-keyword">return</span> <span class="hljs-string">f"<span class="hljs-subst">{timezone}</span>의 현재 시간은 <span class="hljs-subst">{local_time}</span>입니다"</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"'<span class="hljs-subst">{timezone}</span>' 시간대 정보를 가져오는 중 오류 발생: <span class="hljs-subst">{<span class="hljs-built_in">str</span>(e)}</span>"</span><!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-16klbo6">도구는 이 섹션에서 여러분이 직접 만들어볼 것입니다! 두 가지 예시를 제공해드립니다:</p> <ol data-svelte-h="svelte-xjbyew"><li>실제로는 아무것도 하지 않는 <strong>더미 도구</strong> - 이것을 유용한 기능으로 수정해보세요.</li> <li>전 세계 어디서든 현재 시간을 알려주는 <strong>실제 작동하는 도구</strong>.</li></ol> <p data-svelte-h="svelte-n26bay">도구를 정의할 때 중요한 점:</p> <ol data-svelte-h="svelte-1omuioh"><li><code>get_current_time_in_timezone(timezone: str) -> str:</code>처럼 함수의 입력 및 출력 타입을 명확히 지정해주세요.</li> <li><strong>잘 작성된 문서 문자열(docstring)</strong>을 포함하세요. <code>smolagents</code>는 모든 인수에 대해 <strong>docstring에 설명이 있어야</strong> 합니다.</li></ol> <h3 class="relative group"><a id="the-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="#the-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>에이전트</span></h3> <p data-svelte-h="svelte-uqmryk">이 에이전트는 LLM 엔진으로 <a href="https://huggingface.co/Qwen/Qwen2.5-Coder-32B-Instruct" rel="nofollow"><code>Qwen/Qwen2.5-Coder-32B-Instruct</code></a>를 사용합니다. 이는 서버리스 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 = HfApiModel( | |
| max_tokens=<span class="hljs-number">2096</span>, | |
| temperature=<span class="hljs-number">0.5</span>, | |
| model_id=<span class="hljs-string">'Qwen/Qwen2.5-Coder-32B-Instruct'</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">"prompts.yaml"</span>, <span class="hljs-string">'r'</span>) <span class="hljs-keyword">as</span> stream: | |
| prompt_templates = yaml.safe_load(stream) | |
| <span class="hljs-comment"># CodeAgent 생성</span> | |
| agent = CodeAgent( | |
| model=model, | |
| tools=[final_answer], <span class="hljs-comment"># 여기에 도구들을 추가하세요 (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-iy1c9h">이 에이전트는 이전 섹션에서 살펴본 <code>InferenceClient</code>를 <strong>HfApiModel</strong> 클래스 내부에서 사용하고 있습니다!</p> <p data-svelte-h="svelte-zeqhvn">Unit 2에서 이 프레임워크에 대해 더 자세한 예시를 제공할 예정입니다. 지금은 에이전트의 <code>tools</code> 매개변수를 사용해 <strong>도구 목록에 새로운 도구를 추가</strong>하는 데 집중하세요.</p> <p data-svelte-h="svelte-1xk6jtz">예를 들어, 코드 첫 줄에서 불러온 <code>DuckDuckGoSearchTool</code>을 사용하거나, 코드 뒷부분에서 Hub에서 불러오는 <code>image_generation_tool</code>을 활용해볼 수 있습니다.</p> <p data-svelte-h="svelte-8kilq4"><strong>도구를 추가하면 에이전트에 새로운 능력이 생깁니다</strong>. 창의성을 발휘해 보세요!</p> <p data-svelte-h="svelte-1fx31qq">완성된 “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, HfApiModel, 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"># 아래는 아무 기능이 없는 도구의 예시입니다. 여러분의 창의력으로 멋진 것을 만들어보세요!</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>)-> <span class="hljs-built_in">str</span>: <span class="hljs-comment"># 반환 타입을 명시하는 것이 중요합니다</span> | |
| <span class="hljs-comment"># 도구 설명/인수 설명 형식은 유지하되, 도구 자체는 자유롭게 수정하세요</span> | |
| <span class="hljs-string">"""아직 아무 기능이 없는 도구입니다 | |
| Args: | |
| arg1: 첫 번째 인수 | |
| arg2: 두 번째 인수 | |
| """</span> | |
| <span class="hljs-keyword">return</span> <span class="hljs-string">"어떤 마법을 만들어 보실 건가요?"</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>) -> <span class="hljs-built_in">str</span>: | |
| <span class="hljs-string">"""특정 시간대의 현재 시간을 알려주는 도구입니다. | |
| Args: | |
| timezone: 유효한 시간대를 나타내는 문자열(예: 'America/New_York'). | |
| """</span> | |
| <span class="hljs-keyword">try</span>: | |
| <span class="hljs-comment"># 시간대 객체 생성</span> | |
| tz = pytz.timezone(timezone) | |
| <span class="hljs-comment"># 해당 시간대의 현재 시간 가져오기</span> | |
| local_time = datetime.datetime.now(tz).strftime(<span class="hljs-string">"%Y-%m-%d %H:%M:%S"</span>) | |
| <span class="hljs-keyword">return</span> <span class="hljs-string">f"<span class="hljs-subst">{timezone}</span>의 현재 시간은 <span class="hljs-subst">{local_time}</span>입니다"</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"'<span class="hljs-subst">{timezone}</span>' 시간대 정보를 가져오는 중 오류 발생: <span class="hljs-subst">{<span class="hljs-built_in">str</span>(e)}</span>"</span> | |
| final_answer = FinalAnswerTool() | |
| model = HfApiModel( | |
| max_tokens=<span class="hljs-number">2096</span>, | |
| temperature=<span class="hljs-number">0.5</span>, | |
| model_id=<span class="hljs-string">'Qwen/Qwen2.5-Coder-32B-Instruct'</span>, | |
| custom_role_conversions=<span class="hljs-literal">None</span>, | |
| ) | |
| <span class="hljs-comment"># Hub에서 도구 불러오기</span> | |
| image_generation_tool = load_tool(<span class="hljs-string">"agents-course/text-to-image"</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">"prompts.yaml"</span>, <span class="hljs-string">'r'</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"># 여기에 도구들을 추가하세요 (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-3h3cut">여러분의 <strong>목표</strong>는 Space와 에이전트에 친숙해지는 것입니다.</p> <p data-svelte-h="svelte-eyyg9b">현재 템플릿의 에이전트는 <strong>아무런 도구도 사용하지 않고 있습니다. 미리 만들어진 도구들을 추가하거나 직접 새로운 도구를 만들어보세요!</strong></p> <p data-svelte-h="svelte-1f2yrn3">디스코드 채널 <strong>#agents-course-showcase</strong>에서 여러분이 만든 멋진 에이전트 결과물을 기다리고 있습니다!</p> <hr> <p data-svelte-h="svelte-1u7giru">축하합니다! 첫 번째 에이전트를 만드셨네요! 친구나 동료들과 자유롭게 공유해보세요.</p> <p data-svelte-h="svelte-182z3xu">첫 시도이니만큼 약간의 버그가 있거나 속도가 느릴 수 있는 건 매우 자연스러운 일입니다. 앞으로의 단원에서는 더 나은 에이전트를 만드는 방법을 배울 예정입니다.</p> <p data-svelte-h="svelte-1c8lfnp">가장 좋은 학습 방법은 직접 시도해보는 것입니다. 에이전트를 업데이트하거나, 더 많은 도구를 추가하거나, 다른 모델을 시험해보는 것을 망설이지 마세요.</p> <p data-svelte-h="svelte-1ngafis">다음 섹션에서는 최종 퀴즈를 풀고 수료증을 받게 됩니다!</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/ko/unit1/tutorial.mdx" target="_blank"><span data-svelte-h="svelte-1kd6by1"><</span> <span data-svelte-h="svelte-x0xyl0">></span> <span data-svelte-h="svelte-1dajgef"><span class="underline ml-1.5">Update</span> on GitHub</span></a> <p></p> | |
| <script> | |
| { | |
| __sveltekit_wsuob5 = { | |
| assets: "/docs/agents-course/pr_545/ko", | |
| base: "/docs/agents-course/pr_545/ko", | |
| env: {} | |
| }; | |
| const element = document.currentScript.parentElement; | |
| const data = [null,null]; | |
| Promise.all([ | |
| import("/docs/agents-course/pr_545/ko/_app/immutable/entry/start.6bd6007b.js"), | |
| import("/docs/agents-course/pr_545/ko/_app/immutable/entry/app.5df77bcf.js") | |
| ]).then(([kit, app]) => { | |
| kit.start(app, element, { | |
| node_ids: [0, 18], | |
| data, | |
| form: null, | |
| error: null | |
| }); | |
| }); | |
| } | |
| </script> | |
Xet Storage Details
- Size:
- 31.5 kB
- Xet hash:
- 4cb11f29bada379d1a16eb81f9813597e603f88b838dd1306f8c90494b105d7a
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.