Buckets:

rtrm's picture
download
raw
55.1 kB
import{s as xJ,f as pM,n as fJ,o as gJ}from"../chunks/scheduler.f6b352c8.js";import{S as SJ,i as bJ,g as s,s as U,r as w,A as dJ,h as C,f as M,c as e,j as EM,u as j,x as n,k as A,y as uM,a as J,v as T,d as Q,t as y,w as i}from"../chunks/index.7f38e934.js";import{C as p}from"../chunks/CodeBlock.3ee8293b.js";import{H as Hl,E as hJ}from"../chunks/getInferenceSnippets.1ddaa658.js";function _J(VM){let a,Nl,Gl,ql,E,zl,u,RM,Yl,V,DM="Одним из важнейших аспектов AI Агентов является их способность предпринимать <strong>действия</strong>. Как мы видели, это происходит благодаря использованию <strong>Инструментов</strong>.",Wl,R,mM="В этом разделе мы узнаем, что такое Инструменты, как их эффективно разработать и как интегрировать их в вашего Агента с помощью Системного Сообщения.",Zl,D,oM="Предоставив своему агенту правильные инструменты и четко описав, как они работают, вы сможете значительно расширить возможности своего AI. Давайте погружаться!",Xl,m,Fl,o,cM="<strong>Инструмент - это функция, предоставленная LLM</strong>. Эта функция должна выполнять <strong>четкую цель</strong>.",Pl,c,rM="Вот некоторые часто используемые в AI агентах инструменты:",Kl,r,xM="<thead><tr><th>Инструмент</th> <th>Описание</th></tr></thead> <tbody><tr><td>Веб-поиск</td> <td>Позволяет агенту получать актуальную информацию из Интернета.</td></tr> <tr><td>Генерация изображений</td> <td>Создает изображения на основе текстовых описаний.</td></tr> <tr><td>Извлечение</td> <td>Извлекает информацию из внешнего источника.</td></tr> <tr><td></td> <td>Интерфейс API</td></tr></tbody>",lt,x,fM="Это лишь примеры, поскольку на самом деле вы можете создать инструмент для любого случая использования!",tt,f,gM="Хороший инструмент должен быть чем-то, что <strong>дополняет возможности LLM</strong>.",Mt,g,SM="Например, если вам нужно выполнить арифметические действия, то предоставление вашему LLM <strong>калькулятора</strong> обеспечит лучшие результаты, чем полагаться на собственные возможности модели.",Jt,S,bM="Кроме того, <strong>LLM предсказывают завершение подсказки на основе своих обучающих данных</strong>, что означает, что их внутренние знания включают только события, произошедшие до их обучения. Поэтому, если вашему агенту нужны свежие данные, вы должны предоставить их с помощью какого-либо инструмента.",Ut,b,dM="Например, если вы спросите у LLM напрямую (без инструмента поиска) о сегодняшней погоде, LLM потенциально может выдать случайную погоду в виде галлюцинаций.",et,d,hM,st,h,_M="<li><p>Инструмент должен:</p> <ul><li><strong>иметь текстовое описание того, что делает функция</strong>.</li> <li><em>быть Вызываемым (Callable)</em> (чем-то, что выполняет действие).</li> <li><em>иметь Аргументы</em> с типизацией.</li> <li>(Необязательно) иметь Выходные данные с типизацией.</li></ul></li>",Ct,_,nt,k,kM="Как мы видели, <strong>LLM могут только получать текстовые данные на вход и генерировать текстовые данные на выход. У них нет возможности самостоятельно вызывать инструменты. Когда мы говорим о <em>предоставлении инструментов агенту</em>, мы имеем в виду, что мы </strong>обучаем<strong>LLM существованию инструментов и просим модель генерировать текст, который будет вызывать инструменты, когда это необходимо. Например, если мы предоставим инструмент для проверки погоды в определенном месте из Интернета, а затем спросим LLM о погоде в Париже, LLM распознает этот вопрос как релевантную возможность использовать инструмент “weather”, которой мы его научили. LLM сгенерирует <em>текст</em> в виде кода, чтобы вызвать этот инструмент. Ответственность </strong>Агента** заключается в том, чтобы проанализировать вывод LLM, распознать, что требуется вызов инструмента, и вызвать его от имени LLM. Выходные данные от инструмента будут отправлены обратно в LLM, которая составит окончательный ответ для пользователя.",wt,B,BM="Выходные данные после вызова инструмента - это еще один тип сообщений в диалоге. Шаги вызова инструмента обычно не демонстрируются пользователю: агент извлекает диалог, вызывает инструмент(ы), получает выходные данные, добавляет их в новое сообщение диалога и снова отправляет обновленный диалог в LLM. С точки зрения пользователя это выглядит так, как будто LLM использовал инструмент, но на самом деле это сделал наш код приложения (<strong>Агент</strong>).",jt,v,vM="Мы поговорим об этом процессе подробнее на следующих занятиях.",Tt,L,Qt,$,LM="Полный ответ может показаться непомерно сложным, но мы, по сути, используем системную подсказку для предоставления текстовых описаний доступных модели инструментов:",yt,H,$M,it,G,HM="Чтобы это сработало, мы должны быть очень точны и аккуратны в отношении:",At,O,GM="<li><strong>Что делает инструмент</strong>.</li> <li><strong>Каких именно входных данных он ожидает</strong>.</li>",at,N,OM="Именно по этой причине описания инструментов обычно предоставляются с использованием выразительных, но точных структур, таких как компьютерные языки или JSON. Не обязательно делать это именно так, подойдет любой точный и последовательный формат.",pt,q,NM="Если это кажется слишком теоретическим, давайте разберемся на конкретном примере.",It,z,qM="Мы реализуем упрощенный <strong>калькулятор</strong>, который будет просто перемножать два целых числа. Это может быть наша реализация на Python:",Et,Y,ut,W,zM="Итак, наш инструмент называется <code>calculator</code>, он <strong>перемножает два целых числа</strong>, и ему требуются следующие входные данные:",Vt,Z,YM="<li><strong><code>a</code></strong> (<em>int</em>): Целое число.</li> <li><strong><code>b</code></strong> (<em>int</em>): Целое число.</li>",Rt,X,WM="На выходе получается другое целое число, которое можно описать следующим образом:",Dt,F,ZM="<li>(<em>int</em>): Произведение <code>a</code> и <code>b</code>.</li>",mt,P,XM="Все эти детали очень важны. Давайте соберем их вместе в текстовую строку, которая описывает наш инструмент для понимания LLM.",ot,K,ct,ll,FM="<p><strong>Напоминание:</strong> Это текстовое описание - <em>то, что мы хотим, чтобы LLM знала об инструменте</em>.</p>",rt,tl,PM="Когда мы передадим предыдущую строку как часть входных данных в LLM, модель распознает ее как инструмент, и будет знать, что ему нужно передавать в качестве входных данных и что ожидать от выходных данных.",xt,Ml,KM="Если мы хотим предоставить дополнительные инструменты, мы должны быть последовательными и всегда использовать один и тот же формат. Этот процесс может быть хрупким, и мы можем случайно упустить некоторые детали.",ft,Jl,lJ="Есть ли лучший способ?",gt,Ul,St,el,tJ="Наш инструмент написан на Python, и его реализация уже предоставляет все, что нам нужно:",bt,sl,MJ="<li>Описательное название того, что он делает: <code>calculator</code>.</li> <li>Более длинное описание, представленное в комментарии к docstring функции: <code>Multiply two integers.</code>.</li> <li>Входные данные и их тип: функция явно ожидает два <code>int</code>.</li> <li>Тип выходных данных.</li>",dt,Cl,JJ="Люди не просто так используют языки программирования: они выразительны, кратки и точны.",ht,nl,UJ="Мы могли бы предоставить исходный код Python в качестве <em>спецификации</em> инструмента для LLM, но способ реализации инструмента не имеет значения. Важно лишь его название, то, что он делает, какие входные данные он ожидает и какие выходные данные он предоставляет.",_t,wl,eJ="Мы воспользуемся возможностями интроспекции Python, чтобы изучить исходный код и автоматически составить описание инструмента. Все, что нам нужно, - это чтобы реализация инструмента использовала подсказки типов, строки документации и разумные имена функций. Мы напишем код для извлечения нужных фрагментов из исходного кода.",kt,jl,sJ="После этого нам останется только использовать декоратор Python, чтобы указать, что функция <code>calculator</code> является инструментом:",Bt,Tl,vt,Ql,CJ="Обратите внимание на декоратор <code>@tool</code> перед определением функции.",Lt,yl,nJ="С помощью реализации, которую мы рассмотрим далее, мы сможем автоматически извлекать следующий текст из исходного кода с помощью функции <code>to_string()</code>, предоставляемой декоратором:",$t,il,Ht,Al,wJ="Как видите, это то же самое, что мы уже писали вручную!",Gt,al,Ot,pl,jJ="Мы создаем общий класс <code>Tool</code>, который мы можем использовать каждый раз, когда нам нужно использовать инструмент.",Nt,Il,TJ="<p><strong>Отказ от ответственности:</strong> Этот пример реализации является вымышленным, но очень похож на реальные реализации в большинстве библиотек.</p>",qt,El,zt,ul,QJ="Это может показаться сложным, но если мы медленно пройдемся по нему, то сможем понять, что он делает. Мы определяем класс <strong><code>Tool</code></strong>, который включает в себя:",Yt,Vl,yJ="<li><strong><code>name</code></strong> (<em>str</em>): Название инструмента.</li> <li><strong><code>description</code></strong> (<em>str</em>): Краткое описание того, что делает инструмент.</li> <li><strong><code>function</code></strong> (<em>callable</em>): Функция, которую выполняет инструмент.</li> <li><strong><code>arguments</code></strong> (<em>list</em>): Ожидаемые входные параметры.</li> <li><strong><code>outputs</code></strong> (<em>str</em> или <em>list</em>): Ожидаемые выходные данные инструмента.</li> <li><strong><code>__call__()</code></strong>: Вызывает функцию при вызове экземпляра инструмента.</li> <li><strong><code>to_string()</code></strong>: Преобразует атрибуты инструмента в текстовое представление.</li>",Wt,Rl,iJ="Мы можем создать инструмент с помощью этого класса, используя следующий код:",Zt,Dl,Xt,ml,AJ="Но мы также можем использовать модуль Python <code>inspect</code>, чтобы получить всю информацию за нас! Вот что делает декоратор <code>@tool</code>.",Ft,ol,aJ="<p>Если вам интересно, вы можете посмотреть на реализацию декоратора в следующем разделе.</p>",Pt,I,$l,pJ="код декоратора",IM,cl,Kt,rl,IJ="Повторимся, что с этим декоратором мы можем реализовать наш инструмент следующим образом:",lM,xl,tM,fl,EJ="И мы можем использовать метод <code>Tool</code> <code>to_string</code> для автоматического получения текста, подходящего для использования в качестве описания инструмента для LLM:",MM,gl,JM,Sl,uJ="Описание <strong>вставляется</strong> в системную подсказку. Если взять пример, с которого мы начали этот раздел, то вот как он будет выглядеть после замены <code>tools_description</code>:",UM,bl,VJ,eM,dl,RJ='В разделе <a href="actions">Действия</a> мы узнаем, как агент может <strong>вызвать</strong> инструмент, который мы только что создали.',sM,CM,nM,hl,DJ="Инструменты играют решающую роль в расширении возможностей AI агентов.",wM,_l,mJ="Подводя итоги, мы узнали:",jM,kl,oJ="<li><p><em>Что такое инструменты</em>: Функции, которые предоставляют LLM дополнительные возможности, такие как выполнение вычислений или доступ к внешним данным.</p></li> <li><p><em>Как определить инструмент</em>: Предоставить четкое текстовое описание, входы, выходы и вызываемую функцию.</p></li> <li><p><em>Почему инструменты необходимы</em>: Они позволяют агентам преодолевать ограничения статического обучения модели, решать задачи в реальном времени и выполнять специализированные действия.</p></li>",TM,Bl,cJ='Теперь мы можем перейти к <a href="agent-steps-and-structure">Рабочему процессу Агента</a>, где вы увидите, как Агент наблюдает, думает и действует. Это <strong>собирает воедино все, что мы изучили до сих пор</strong>, и закладывает основу для создания вашего собственного полнофункционального AI Агента.',QM,vl,rJ="Но сначала - еще один короткий тест!",yM,Ll,iM,Ol,AM;return E=new Hl({props:{title:"Что такое Инструменты?",local:"что-такое-инструменты",headingTag:"h1"}}),m=new Hl({props:{title:"Что такое AI Инструменты?",local:"что-такое-ai-инструменты",headingTag:"h2"}}),_=new Hl({props:{title:"Как работают инструменты?",local:"как-работают-инструменты",headingTag:"h2"}}),L=new Hl({props:{title:"Как мы даем инструменты LLM?",local:"как-мы-даем-инструменты-llm",headingTag:"h2"}}),Y=new p({props:{code:"ZGVmJTIwY2FsY3VsYXRvcihhJTNBJTIwaW50JTJDJTIwYiUzQSUyMGludCklMjAtJTNFJTIwaW50JTNBJTBBJTIwJTIwJTIwJTIwJTIyJTIyJTIyTXVsdGlwbHklMjB0d28lMjBpbnRlZ2Vycy4lMjIlMjIlMjIlMEElMjAlMjAlMjAlMjByZXR1cm4lMjBhJTIwKiUyMGI=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">calculator</span>(<span class="hljs-params">a: <span class="hljs-built_in">int</span>, b: <span class="hljs-built_in">int</span></span>) -&gt; <span class="hljs-built_in">int</span>:
<span class="hljs-string">&quot;&quot;&quot;Multiply two integers.&quot;&quot;&quot;</span>
<span class="hljs-keyword">return</span> a * b`,wrap:!1}}),K=new p({props:{code:"VG9vbCUyME5hbWUlM0ElMjBjYWxjdWxhdG9yJTJDJTIwRGVzY3JpcHRpb24lM0ElMjBNdWx0aXBseSUyMHR3byUyMGludGVnZXJzLiUyQyUyMEFyZ3VtZW50cyUzQSUyMGElM0ElMjBpbnQlMkMlMjBiJTNBJTIwaW50JTJDJTIwT3V0cHV0cyUzQSUyMGludA==",highlighted:"Tool Name: calculator, Description: Multiply two integers., Arguments: a: int, b: int, Outputs: int",wrap:!1}}),Ul=new Hl({props:{title:"Автоформатирование секции Инструменты",local:"автоформатирование-секции-инструменты",headingTag:"h3"}}),Tl=new p({props:{code:"JTQwdG9vbCUwQWRlZiUyMGNhbGN1bGF0b3IoYSUzQSUyMGludCUyQyUyMGIlM0ElMjBpbnQpJTIwLSUzRSUyMGludCUzQSUwQSUyMCUyMCUyMCUyMCUyMiUyMiUyMk11bHRpcGx5JTIwdHdvJTIwaW50ZWdlcnMuJTIyJTIyJTIyJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwYSUyMColMjBiJTBBJTBBcHJpbnQoY2FsY3VsYXRvci50b19zdHJpbmcoKSk=",highlighted:`<span class="hljs-meta">@tool</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">calculator</span>(<span class="hljs-params">a: <span class="hljs-built_in">int</span>, b: <span class="hljs-built_in">int</span></span>) -&gt; <span class="hljs-built_in">int</span>:
<span class="hljs-string">&quot;&quot;&quot;Multiply two integers.&quot;&quot;&quot;</span>
<span class="hljs-keyword">return</span> a * b
<span class="hljs-built_in">print</span>(calculator.to_string())`,wrap:!1}}),il=new p({props:{code:"VG9vbCUyME5hbWUlM0ElMjBjYWxjdWxhdG9yJTJDJTIwRGVzY3JpcHRpb24lM0ElMjBNdWx0aXBseSUyMHR3byUyMGludGVnZXJzLiUyQyUyMEFyZ3VtZW50cyUzQSUyMGElM0ElMjBpbnQlMkMlMjBiJTNBJTIwaW50JTJDJTIwT3V0cHV0cyUzQSUyMGludA==",highlighted:"Tool Name: calculator, Description: Multiply two integers., Arguments: a: int, b: int, Outputs: int",wrap:!1}}),al=new Hl({props:{title:"Универсальная реализация Инструмента",local:"универсальная-реализация-инструмента",headingTag:"h3"}}),El=new p({props:{code:"Y2xhc3MlMjBUb29sJTNBJTBBJTIwJTIwJTIwJTIwJTIyJTIyJTIyJTBBJTIwJTIwJTIwJTIwJUQwJTlBJUQwJUJCJUQwJUIwJUQxJTgxJUQxJTgxJTJDJTIwJUQwJUJGJUQxJTgwJUQwJUI1JUQwJUI0JUQxJTgxJUQxJTgyJUQwJUIwJUQwJUIyJUQwJUJCJUQxJThGJUQxJThFJUQxJTg5JUQwJUI4JUQwJUI5JTIwJUQwJUJDJUQwJUJEJUQwJUJFJUQwJUIzJUQwJUJFJUQwJUJBJUQxJTgwJUQwJUIwJUQxJTgyJUQwJUJEJUQwJUJFJTIwJUQwJUI4JUQxJTgxJUQwJUJGJUQwJUJFJUQwJUJCJUQxJThDJUQwJUI3JUQxJTgzJUQwJUI1JUQwJUJDJUQxJThCJUQwJUI5JTIwJUQxJTg0JUQxJTgwJUQwJUIwJUQwJUIzJUQwJUJDJUQwJUI1JUQwJUJEJUQxJTgyJTIwJUQwJUJBJUQwJUJFJUQwJUI0JUQwJUIwJTIwKCVEMCVCOCVEMCVCRCVEMSU4MSVEMSU4MiVEMSU4MCVEMSU4MyVEMCVCQyVEMCVCNSVEMCVCRCVEMSU4MikuJTBBJTBBJTIwJTIwJTIwJTIwJUQwJTkwJUQxJTgyJUQxJTgwJUQwJUI4JUQwJUIxJUQxJTgzJUQxJTgyJUQxJThCJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbmFtZSUyMChzdHIpJTNBJTIwJUQwJTk4JUQwJUJDJUQxJThGJTIwJUQwJUI4JUQwJUJEJUQxJTgxJUQxJTgyJUQxJTgwJUQxJTgzJUQwJUJDJUQwJUI1JUQwJUJEJUQxJTgyJUQwJUIwLiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGRlc2NyaXB0aW9uJTIwKHN0ciklM0ElMjAlRDAlQTIlRDAlQjUlRDAlQkElRDElODElRDElODIlRDAlQkUlRDAlQjIlRDAlQkUlRDAlQjUlMjAlRDAlQkUlRDAlQkYlRDAlQjglRDElODElRDAlQjAlRDAlQkQlRDAlQjglRDAlQjUlMjAlRDElODIlRDAlQkUlRDAlQjMlRDAlQkUlMkMlMjAlRDElODclRDElODIlRDAlQkUlMjAlRDAlQjQlRDAlQjUlRDAlQkIlRDAlQjAlRDAlQjUlRDElODIlMjAlRDAlQjglRDAlQkQlRDElODElRDElODIlRDElODAlRDElODMlRDAlQkMlRDAlQjUlRDAlQkQlRDElODIuJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZnVuYyUyMCglRDAlQjIlRDElOEIlRDAlQjclRDElOEIlRDAlQjIlRDAlQjAlRDAlQjUlRDAlQkMlRDElOEIlRDAlQjkpJTNBJTIwJUQwJUE0JUQxJTgzJUQwJUJEJUQwJUJBJUQxJTg2JUQwJUI4JUQxJThGJTJDJTIwJUQwJUJBJUQwJUJFJUQxJTgyJUQwJUJFJUQxJTgwJUQxJTgzJUQxJThFJTIwJUQwJUJFJUQwJUIxJUQwJUJFJUQxJTgwJUQwJUIwJUQxJTg3JUQwJUI4JUQwJUIyJUQwJUIwJUQwJUI1JUQxJTgyJTIwJUQxJThEJUQxJTgyJUQwJUJFJUQxJTgyJTIwJUQwJUI4JUQwJUJEJUQxJTgxJUQxJTgyJUQxJTgwJUQxJTgzJUQwJUJDJUQwJUI1JUQwJUJEJUQxJTgyLiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFyZ3VtZW50cyUyMCglRDElODElRDAlQkYlRDAlQjglRDElODElRDAlQkUlRDAlQkEpJTNBJTIwJUQwJUExJUQwJUJGJUQwJUI4JUQxJTgxJUQwJUJFJUQwJUJBJTIwJUQwJUIwJUQxJTgwJUQwJUIzJUQxJTgzJUQwJUJDJUQwJUI1JUQwJUJEJUQxJTgyJUQwJUJFJUQwJUIyLiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG91dHB1dHMlMjAoc3RyJTIwJUQwJUI4JUQwJUJCJUQwJUI4JTIwbGlzdCklM0ElMjAlRDAlOTIlRDAlQkUlRDAlQjclRDAlQjIlRDElODAlRDAlQjAlRDElODklRDAlQjAlRDAlQjUlRDAlQkMlRDElOEIlRDAlQjUlMjAlRDAlQkUlRDAlQjElRDAlQjUlRDElODAlRDAlQkQlRDElODMlRDElODIlRDAlQkUlRDAlQjklMjAlRDElODQlRDElODMlRDAlQkQlRDAlQkElRDElODYlRDAlQjglRDAlQjUlRDAlQjklMjAlRDElODIlRDAlQjglRDAlQkYlRDElOEIuJTBBJTIwJTIwJTIwJTIwJTIyJTIyJTIyJTBBJTIwJTIwJTIwJTIwZGVmJTIwX19pbml0X18oc2VsZiUyQyUyMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG5hbWUlM0ElMjBzdHIlMkMlMjAlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBkZXNjcmlwdGlvbiUzQSUyMHN0ciUyQyUyMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZ1bmMlM0ElMjBjYWxsYWJsZSUyQyUyMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFyZ3VtZW50cyUzQSUyMGxpc3QlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRzJTNBJTIwc3RyKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNlbGYubmFtZSUyMCUzRCUyMG5hbWUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzZWxmLmRlc2NyaXB0aW9uJTIwJTNEJTIwZGVzY3JpcHRpb24lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzZWxmLmZ1bmMlMjAlM0QlMjBmdW5jJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2VsZi5hcmd1bWVudHMlMjAlM0QlMjBhcmd1bWVudHMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzZWxmLm91dHB1dHMlMjAlM0QlMjBvdXRwdXRzJTBBJTBBJTIwJTIwJTIwJTIwZGVmJTIwdG9fc3RyaW5nKHNlbGYpJTIwLSUzRSUyMHN0ciUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMiUyMiUyMiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVEMCU5MiVEMCVCRSVEMCVCNyVEMCVCMiVEMSU4MCVEMCVCMCVEMSU4OSVEMCVCMCVEMCVCNSVEMSU4MiUyMCVEMSU4MSVEMSU4MiVEMSU4MCVEMCVCRSVEMCVCQSVEMCVCRSVEMCVCMiVEMCVCRSVEMCVCNSUyMCVEMCVCRiVEMSU4MCVEMCVCNSVEMCVCNCVEMSU4MSVEMSU4MiVEMCVCMCVEMCVCMiVEMCVCQiVEMCVCNSVEMCVCRCVEMCVCOCVEMCVCNSUyMCVEMCVCOCVEMCVCRCVEMSU4MSVEMSU4MiVEMSU4MCVEMSU4MyVEMCVCQyVEMCVCNSVEMCVCRCVEMSU4MiVEMCVCMCUyQyUyMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVEMCVCMiVEMCVCQSVEMCVCQiVEMSU4RSVEMSU4NyVEMCVCMCVEMSU4RiUyMCVEMCVCNSVEMCVCMyVEMCVCRSUyMCVEMCVCRCVEMCVCMCVEMCVCNyVEMCVCMiVEMCVCMCVEMCVCRCVEMCVCOCVEMCVCNSUyQyUyMCVEMCVCRSVEMCVCRiVEMCVCOCVEMSU4MSVEMCVCMCVEMCVCRCVEMCVCOCVEMCVCNSUyQyUyMCVEMCVCMCVEMSU4MCVEMCVCMyVEMSU4MyVEMCVCQyVEMCVCNSVEMCVCRCVEMSU4MiVEMSU4QiUyMCVEMCVCOCUyMCVEMCVCMiVEMSU4QiVEMSU4NSVEMCVCRSVEMCVCNCVEMCVCRCVEMSU4QiVEMCVCNSUyMCVEMCVCNCVEMCVCMCVEMCVCRCVEMCVCRCVEMSU4QiVEMCVCNS4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjIlMjIlMjIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhcmdzX3N0ciUyMCUzRCUyMCUyMiUyQyUyMCUyMi5qb2luKCU1QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGYlMjIlN0JhcmdfbmFtZSU3RCUzQSUyMCU3QmFyZ190eXBlJTdEJTIyJTIwZm9yJTIwYXJnX25hbWUlMkMlMjBhcmdfdHlwZSUyMGluJTIwc2VsZi5hcmd1bWVudHMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUQpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGYlMjJUb29sJTIwTmFtZSUzQSUyMCU3QnNlbGYubmFtZSU3RCUyQyUyMiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGYlMjIlMjBEZXNjcmlwdGlvbiUzQSUyMCU3QnNlbGYuZGVzY3JpcHRpb24lN0QlMkMlMjIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmJTIyJTIwQXJndW1lbnRzJTNBJTIwJTdCYXJnc19zdHIlN0QlMkMlMjIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmJTIyJTIwT3V0cHV0cyUzQSUyMCU3QnNlbGYub3V0cHV0cyU3RCUyMiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMEElMEElMjAlMjAlMjAlMjBkZWYlMjBfX2NhbGxfXyhzZWxmJTJDJTIwKmFyZ3MlMkMlMjAqKmt3YXJncyklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjIlMjIlMjIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlRDAlOTIlRDElOEIlRDAlQjclRDAlQkUlRDAlQjIlMjAlRDAlQjElRDAlQjAlRDAlQjclRDAlQkUlRDAlQjIlRDAlQkUlRDAlQjklMjAlRDElODQlRDElODMlRDAlQkQlRDAlQkElRDElODYlRDAlQjglRDAlQjglMjAoJUQwJUIyJUQxJThCJUQwJUI3JUQxJThCJUQwJUIyJUQwJUIwJUQwJUI1JUQwJUJDJUQwJUJFJUQwJUI5KSUyMCVEMSU4MSUyMCVEMSU4MyVEMCVCQSVEMCVCMCVEMCVCNyVEMCVCMCVEMCVCRCVEMCVCRCVEMSU4QiVEMCVCQyVEMCVCOCUyMCVEMCVCMCVEMSU4MCVEMCVCMyVEMSU4MyVEMCVCQyVEMCVCNSVEMCVCRCVEMSU4MiVEMCVCMCVEMCVCQyVEMCVCOC4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjIlMjIlMjIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm4lMjBzZWxmLmZ1bmMoKmFyZ3MlMkMlMjAqKmt3YXJncyk=",highlighted:`<span class="hljs-keyword">class</span> <span class="hljs-title class_">Tool</span>:
<span class="hljs-string">&quot;&quot;&quot;
Класс, представляющий многократно используемый фрагмент кода (инструмент).
Атрибуты:
name (str): Имя инструмента.
description (str): Текстовое описание того, что делает инструмент.
func (вызываемый): Функция, которую оборачивает этот инструмент.
arguments (список): Список аргументов.
outputs (str или list): Возвращаемые обернутой функцией типы.
&quot;&quot;&quot;</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self,
name: <span class="hljs-built_in">str</span>,
description: <span class="hljs-built_in">str</span>,
func: <span class="hljs-built_in">callable</span>,
arguments: <span class="hljs-built_in">list</span>,
outputs: <span class="hljs-built_in">str</span></span>):
self.name = name
self.description = description
self.func = func
self.arguments = arguments
self.outputs = outputs
<span class="hljs-keyword">def</span> <span class="hljs-title function_">to_string</span>(<span class="hljs-params">self</span>) -&gt; <span class="hljs-built_in">str</span>:
<span class="hljs-string">&quot;&quot;&quot;
Возвращает строковое представление инструмента,
включая его название, описание, аргументы и выходные данные.
&quot;&quot;&quot;</span>
args_str = <span class="hljs-string">&quot;, &quot;</span>.join([
<span class="hljs-string">f&quot;<span class="hljs-subst">{arg_name}</span>: <span class="hljs-subst">{arg_type}</span>&quot;</span> <span class="hljs-keyword">for</span> arg_name, arg_type <span class="hljs-keyword">in</span> self.arguments
])
<span class="hljs-keyword">return</span> (
<span class="hljs-string">f&quot;Tool Name: <span class="hljs-subst">{self.name}</span>,&quot;</span>
<span class="hljs-string">f&quot; Description: <span class="hljs-subst">{self.description}</span>,&quot;</span>
<span class="hljs-string">f&quot; Arguments: <span class="hljs-subst">{args_str}</span>,&quot;</span>
<span class="hljs-string">f&quot; Outputs: <span class="hljs-subst">{self.outputs}</span>&quot;</span>
)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__call__</span>(<span class="hljs-params">self, *args, **kwargs</span>):
<span class="hljs-string">&quot;&quot;&quot;
Вызов базовой функции (вызываемой) с указанными аргументами.
&quot;&quot;&quot;</span>
<span class="hljs-keyword">return</span> self.func(*args, **kwargs)`,wrap:!1}}),Dl=new p({props:{code:"Y2FsY3VsYXRvcl90b29sJTIwJTNEJTIwVG9vbCglMEElMjAlMjAlMjAlMjAlMjJjYWxjdWxhdG9yJTIyJTJDJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwJUQwJUI4JUQwJUJDJUQxJThGJTBBJTIwJTIwJTIwJTIwJTIyTXVsdGlwbHklMjB0d28lMjBpbnRlZ2Vycy4lMjIlMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjAlRDAlQkUlRDAlQkYlRDAlQjglRDElODElRDAlQjAlRDAlQkQlRDAlQjglRDAlQjUlMEElMjAlMjAlMjAlMjBjYWxjdWxhdG9yJTJDJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwJUQxJTg0JUQxJTgzJUQwJUJEJUQwJUJBJUQxJTg2JUQwJUI4JUQxJThGJTIwJUQwJUI0JUQwJUJCJUQxJThGJTIwJUQwJUIyJUQxJThCJUQwJUI3JUQwJUJFJUQwJUIyJUQwJUIwJTBBJTIwJTIwJTIwJTIwJTVCKCUyMmElMjIlMkMlMjAlMjJpbnQlMjIpJTJDJTIwKCUyMmIlMjIlMkMlMjAlMjJpbnQlMjIpJTVEJTJDJTIwJTIwJTIwJTIzJTIwJUQwJUIyJUQwJUJFJUQwJUI0JUQwJUJEJUQxJThCJUQwJUI1JTIwJUQwJUI0JUQwJUIwJUQwJUJEJUQwJUJEJUQxJThCJUQwJUI1JTIwKCVEMCVCOCVEMCVCQyVEMCVCNSVEMCVCRCVEMCVCMCUyMCVEMCVCOCUyMCVEMSU4MiVEMCVCOCVEMCVCRiVEMSU4QiklMEElMjAlMjAlMjAlMjAlMjJpbnQlMjIlMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjAlRDAlQjIlRDElOEIlRDElODUlRDAlQkUlRDAlQjQlRDAlQkQlRDElOEIlRDAlQjUlMjAlRDAlQjQlRDAlQjAlRDAlQkQlRDAlQkQlRDElOEIlRDAlQjUlMEEp",highlighted:`calculator_tool = Tool(
<span class="hljs-string">&quot;calculator&quot;</span>, <span class="hljs-comment"># имя</span>
<span class="hljs-string">&quot;Multiply two integers.&quot;</span>, <span class="hljs-comment"># описание</span>
calculator, <span class="hljs-comment"># функция для вызова</span>
[(<span class="hljs-string">&quot;a&quot;</span>, <span class="hljs-string">&quot;int&quot;</span>), (<span class="hljs-string">&quot;b&quot;</span>, <span class="hljs-string">&quot;int&quot;</span>)], <span class="hljs-comment"># водные данные (имена и типы)</span>
<span class="hljs-string">&quot;int&quot;</span>, <span class="hljs-comment"># выходные данные</span>
)`,wrap:!1}}),cl=new p({props:{code:"ZGVmJTIwdG9vbChmdW5jKSUzQSUwQSUyMCUyMCUyMCUyMCUyMiUyMiUyMiUwQSUyMCUyMCUyMCUyMCVEMCU5NCVEMCVCNSVEMCVCQSVEMCVCRSVEMSU4MCVEMCVCMCVEMSU4MiVEMCVCRSVEMSU4MCUyQyUyMCVEMSU4MSVEMCVCRSVEMCVCNyVEMCVCNCVEMCVCMCVEMSU4RSVEMSU4OSVEMCVCOCVEMCVCOSUyMCVEMSU4RCVEMCVCQSVEMCVCNyVEMCVCNSVEMCVCQyVEMCVCRiVEMCVCQiVEMSU4RiVEMSU4MCUyMFRvb2wlMjAlRDAlQjglRDAlQjclMjAlRDAlQjclRDAlQjAlRDAlQjQlRDAlQjAlRDAlQkQlRDAlQkQlRDAlQkUlRDAlQjklMjAlRDElODQlRDElODMlRDAlQkQlRDAlQkElRDElODYlRDAlQjglRDAlQjguJTBBJTIwJTIwJTIwJTIwJTIyJTIyJTIyJTBBJTIwJTIwJTIwJTIwJTIzJTIwJUQwJTlGJUQwJUJFJUQwJUJCJUQxJTgzJUQxJTg3JUQwJUI1JUQwJUJEJUQwJUI4JUQwJUI1JTIwJUQxJTgxJUQwJUI4JUQwJUIzJUQwJUJEJUQwJUIwJUQxJTgyJUQxJTgzJUQxJTgwJUQxJThCJTIwJUQxJTg0JUQxJTgzJUQwJUJEJUQwJUJBJUQxJTg2JUQwJUI4JUQwJUI4JTBBJTIwJTIwJTIwJTIwc2lnbmF0dXJlJTIwJTNEJTIwaW5zcGVjdC5zaWduYXR1cmUoZnVuYyklMEElMjAlMjAlMjAlMjAlMEElMjAlMjAlMjAlMjAlMjMlMjAlRDAlOTglRDAlQjclRDAlQjIlRDAlQkIlRDAlQjUlRDAlQkElRDAlQjglRDElODIlRDAlQjUlMjAlRDAlQkYlRDAlQjAlRDElODAlRDElOEIlMjAocGFyYW1fbmFtZSUyQyUyMHBhcmFtX2Fubm90YXRpb24pJTIwJUQwJUI0JUQwJUJCJUQxJThGJTIwJUQwJUIyJUQxJTg1JUQwJUJFJUQwJUI0JUQwJUJEJUQxJThCJUQxJTg1JTIwJUQwJUI0JUQwJUIwJUQwJUJEJUQwJUJEJUQxJThCJUQxJTg1JTBBJTIwJTIwJTIwJTIwYXJndW1lbnRzJTIwJTNEJTIwJTVCJTVEJTBBJTIwJTIwJTIwJTIwZm9yJTIwcGFyYW0lMjBpbiUyMHNpZ25hdHVyZS5wYXJhbWV0ZXJzLnZhbHVlcygpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYW5ub3RhdGlvbl9uYW1lJTIwJTNEJTIwKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHBhcmFtLmFubm90YXRpb24uX19uYW1lX18lMjAlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGhhc2F0dHIocGFyYW0uYW5ub3RhdGlvbiUyQyUyMCdfX25hbWVfXycpJTIwJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZWxzZSUyMHN0cihwYXJhbS5hbm5vdGF0aW9uKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhcmd1bWVudHMuYXBwZW5kKChwYXJhbS5uYW1lJTJDJTIwYW5ub3RhdGlvbl9uYW1lKSklMEElMjAlMjAlMjAlMjAlMEElMjAlMjAlMjAlMjAlMjMlMjAlRDAlOUUlRDAlQkYlRDElODAlRDAlQjUlRDAlQjQlRDAlQjUlRDAlQkIlRDAlQjglRDElODIlRDAlQjUlMjAlRDAlQjAlRDAlQkQlRDAlQkQlRDAlQkUlRDElODIlRDAlQjAlRDElODYlRDAlQjglRDElOEUlMjAlRDAlQjIlRDAlQkUlRDAlQjclRDAlQjIlRDElODAlRDAlQjAlRDElODIlRDAlQjAlMEElMjAlMjAlMjAlMjByZXR1cm5fYW5ub3RhdGlvbiUyMCUzRCUyMHNpZ25hdHVyZS5yZXR1cm5fYW5ub3RhdGlvbiUwQSUyMCUyMCUyMCUyMGlmJTIwcmV0dXJuX2Fubm90YXRpb24lMjBpcyUyMGluc3BlY3QuX2VtcHR5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3V0cHV0cyUyMCUzRCUyMCUyMk5vJTIwcmV0dXJuJTIwYW5ub3RhdGlvbiUyMiUwQSUyMCUyMCUyMCUyMGVsc2UlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRzJTIwJTNEJTIwKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybl9hbm5vdGF0aW9uLl9fbmFtZV9fJTIwJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBoYXNhdHRyKHJldHVybl9hbm5vdGF0aW9uJTJDJTIwJ19fbmFtZV9fJyklMjAlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbHNlJTIwc3RyKHJldHVybl9hbm5vdGF0aW9uKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjAlMEElMjAlMjAlMjAlMjAlMjMlMjAlRDAlOTglRDElODElRDAlQkYlRDAlQkUlRDAlQkIlRDElOEMlRDAlQjclRDElODMlRDAlQjklRDElODIlRDAlQjUlMjAlRDElODElRDElODIlRDElODAlRDAlQkUlRDAlQkElRDElODMlMjAlRDAlQjQlRDAlQkUlRDAlQkElRDElODMlRDAlQkMlRDAlQjUlRDAlQkQlRDElODIlRDAlQjAlRDElODYlRDAlQjglRDAlQjglMjAlRDElODQlRDElODMlRDAlQkQlRDAlQkElRDElODYlRDAlQjglRDAlQjglMjAlRDAlQjIlMjAlRDAlQkElRDAlQjAlRDElODclRDAlQjUlRDElODElRDElODIlRDAlQjIlRDAlQjUlMjAlRDAlQkUlRDAlQkYlRDAlQjglRDElODElRDAlQjAlRDAlQkQlRDAlQjglRDElOEYlMjAoJUQwJUJGJUQwJUJFJTIwJUQxJTgzJUQwJUJDJUQwJUJFJUQwJUJCJUQxJTg3JUQwJUIwJUQwJUJEJUQwJUI4JUQxJThFJTJDJTIwJUQwJUI1JUQxJTgxJUQwJUJCJUQwJUI4JTIwTm9uZSklMEElMjAlMjAlMjAlMjBkZXNjcmlwdGlvbiUyMCUzRCUyMGZ1bmMuX19kb2NfXyUyMG9yJTIwJTIyJUQwJTlFJUQwJUJGJUQwJUI4JUQxJTgxJUQwJUIwJUQwJUJEJUQwJUI4JUQwJUI1JTIwJUQwJUJEJUQwJUI1JTIwJUQwJUJGJUQxJTgwJUQwJUI1JUQwJUI0JUQxJTgxJUQxJTgyJUQwJUIwJUQwJUIyJUQwJUJCJUQwJUI1JUQwJUJEJUQwJUJFLiUyMiUwQSUyMCUyMCUyMCUyMCUwQSUyMCUyMCUyMCUyMCUyMyUyMCVEMCU5OCVEMCVCQyVEMSU4RiUyMCVEMSU4NCVEMSU4MyVEMCVCRCVEMCVCQSVEMSU4NiVEMCVCOCVEMCVCOCUyMCVEMSU4MSVEMSU4MiVEMCVCMCVEMCVCRCVEMCVCRSVEMCVCMiVEMCVCOCVEMSU4MiVEMSU4MSVEMSU4RiUyMCVEMCVCOCVEMCVCQyVEMCVCNSVEMCVCRCVEMCVCNSVEMCVCQyUyMCVEMCU5OCVEMCVCRCVEMSU4MSVEMSU4MiVEMSU4MCVEMSU4MyVEMCVCQyVEMCVCNSVEMCVCRCVEMSU4MiVEMCVCMCUwQSUyMCUyMCUyMCUyMG5hbWUlMjAlM0QlMjBmdW5jLl9fbmFtZV9fJTBBJTIwJTIwJTIwJTIwJTBBJTIwJTIwJTIwJTIwJTIzJTIwJUQwJTkyJUQwJUJFJUQwJUI3JUQwJUIyJUQxJTgwJUQwJUIwJUQxJTg5JUQwJUIwJUQwJUI1JUQwJUJDJTIwJUQwJUJEJUQwJUJFJUQwJUIyJUQxJThCJUQwJUI5JTIwJUQxJThEJUQwJUJBJUQwJUI3JUQwJUI1JUQwJUJDJUQwJUJGJUQwJUJCJUQxJThGJUQxJTgwJTIwJUQwJTk4JUQwJUJEJUQxJTgxJUQxJTgyJUQxJTgwJUQxJTgzJUQwJUJDJUQwJUI1JUQwJUJEJUQxJTgyJUQwJUIwJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwVG9vbCglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBuYW1lJTNEbmFtZSUyQyUyMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGRlc2NyaXB0aW9uJTNEZGVzY3JpcHRpb24lMkMlMjAlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmdW5jJTNEZnVuYyUyQyUyMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFyZ3VtZW50cyUzRGFyZ3VtZW50cyUyQyUyMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG91dHB1dHMlM0RvdXRwdXRzJTBBJTIwJTIwJTIwJTIwKQ==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">tool</span>(<span class="hljs-params">func</span>):
<span class="hljs-string">&quot;&quot;&quot;
Декоратор, создающий экземпляр Tool из заданной функции.
&quot;&quot;&quot;</span>
<span class="hljs-comment"># Получение сигнатуры функции</span>
signature = inspect.signature(func)
<span class="hljs-comment"># Извлеките пары (param_name, param_annotation) для входных данных</span>
arguments = []
<span class="hljs-keyword">for</span> param <span class="hljs-keyword">in</span> signature.parameters.values():
annotation_name = (
param.annotation.__name__
<span class="hljs-keyword">if</span> <span class="hljs-built_in">hasattr</span>(param.annotation, <span class="hljs-string">&#x27;__name__&#x27;</span>)
<span class="hljs-keyword">else</span> <span class="hljs-built_in">str</span>(param.annotation)
)
arguments.append((param.name, annotation_name))
<span class="hljs-comment"># Определите аннотацию возврата</span>
return_annotation = signature.return_annotation
<span class="hljs-keyword">if</span> return_annotation <span class="hljs-keyword">is</span> inspect._empty:
outputs = <span class="hljs-string">&quot;No return annotation&quot;</span>
<span class="hljs-keyword">else</span>:
outputs = (
return_annotation.__name__
<span class="hljs-keyword">if</span> <span class="hljs-built_in">hasattr</span>(return_annotation, <span class="hljs-string">&#x27;__name__&#x27;</span>)
<span class="hljs-keyword">else</span> <span class="hljs-built_in">str</span>(return_annotation)
)
<span class="hljs-comment"># Используйте строку документации функции в качестве описания (по умолчанию, если None)</span>
description = func.__doc__ <span class="hljs-keyword">or</span> <span class="hljs-string">&quot;Описание не представлено.&quot;</span>
<span class="hljs-comment"># Имя функции становится именем Инструмента</span>
name = func.__name__
<span class="hljs-comment"># Возвращаем новый экземпляр Инструмента</span>
<span class="hljs-keyword">return</span> Tool(
name=name,
description=description,
func=func,
arguments=arguments,
outputs=outputs
)`,wrap:!1}}),xl=new p({props:{code:"JTQwdG9vbCUwQWRlZiUyMGNhbGN1bGF0b3IoYSUzQSUyMGludCUyQyUyMGIlM0ElMjBpbnQpJTIwLSUzRSUyMGludCUzQSUwQSUyMCUyMCUyMCUyMCUyMiUyMiUyMk11bHRpcGx5JTIwdHdvJTIwaW50ZWdlcnMuJTIyJTIyJTIyJTBBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwYSUyMColMjBiJTBBJTBBcHJpbnQoY2FsY3VsYXRvci50b19zdHJpbmcoKSk=",highlighted:`<span class="hljs-meta">@tool</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">calculator</span>(<span class="hljs-params">a: <span class="hljs-built_in">int</span>, b: <span class="hljs-built_in">int</span></span>) -&gt; <span class="hljs-built_in">int</span>:
<span class="hljs-string">&quot;&quot;&quot;Multiply two integers.&quot;&quot;&quot;</span>
<span class="hljs-keyword">return</span> a * b
<span class="hljs-built_in">print</span>(calculator.to_string())`,wrap:!1}}),gl=new p({props:{code:"VG9vbCUyME5hbWUlM0ElMjBjYWxjdWxhdG9yJTJDJTIwRGVzY3JpcHRpb24lM0ElMjBNdWx0aXBseSUyMHR3byUyMGludGVnZXJzLiUyQyUyMEFyZ3VtZW50cyUzQSUyMGElM0ElMjBpbnQlMkMlMjBiJTNBJTIwaW50JTJDJTIwT3V0cHV0cyUzQSUyMGludA==",highlighted:"Tool Name: calculator, Description: Multiply two integers., Arguments: a: int, b: int, Outputs: int",wrap:!1}}),Ll=new hJ({props:{source:"https://github.com/huggingface/agents-course/blob/main/units/ru-RU/unit1/tools.mdx"}}),{c(){a=s("meta"),Nl=U(),Gl=s("p"),ql=U(),w(E.$$.fragment),zl=U(),u=s("img"),Yl=U(),V=s("p"),V.innerHTML=DM,Wl=U(),R=s("p"),R.textContent=mM,Zl=U(),D=s("p"),D.textContent=oM,Xl=U(),w(m.$$.fragment),Fl=U(),o=s("p"),o.innerHTML=cM,Pl=U(),c=s("p"),c.textContent=rM,Kl=U(),r=s("table"),r.innerHTML=xM,lt=U(),x=s("p"),x.textContent=fM,tt=U(),f=s("p"),f.innerHTML=gM,Mt=U(),g=s("p"),g.innerHTML=SM,Jt=U(),S=s("p"),S.innerHTML=bM,Ut=U(),b=s("p"),b.textContent=dM,et=U(),d=s("img"),st=U(),h=s("ul"),h.innerHTML=_M,Ct=U(),w(_.$$.fragment),nt=U(),k=s("p"),k.innerHTML=kM,wt=U(),B=s("p"),B.innerHTML=BM,jt=U(),v=s("p"),v.textContent=vM,Tt=U(),w(L.$$.fragment),Qt=U(),$=s("p"),$.textContent=LM,yt=U(),H=s("img"),it=U(),G=s("p"),G.textContent=HM,At=U(),O=s("ol"),O.innerHTML=GM,at=U(),N=s("p"),N.textContent=OM,pt=U(),q=s("p"),q.textContent=NM,It=U(),z=s("p"),z.innerHTML=qM,Et=U(),w(Y.$$.fragment),ut=U(),W=s("p"),W.innerHTML=zM,Vt=U(),Z=s("ul"),Z.innerHTML=YM,Rt=U(),X=s("p"),X.textContent=WM,Dt=U(),F=s("ul"),F.innerHTML=ZM,mt=U(),P=s("p"),P.textContent=XM,ot=U(),w(K.$$.fragment),ct=U(),ll=s("blockquote"),ll.innerHTML=FM,rt=U(),tl=s("p"),tl.textContent=PM,xt=U(),Ml=s("p"),Ml.textContent=KM,ft=U(),Jl=s("p"),Jl.textContent=lJ,gt=U(),w(Ul.$$.fragment),St=U(),el=s("p"),el.textContent=tJ,bt=U(),sl=s("ul"),sl.innerHTML=MJ,dt=U(),Cl=s("p"),Cl.textContent=JJ,ht=U(),nl=s("p"),nl.innerHTML=UJ,_t=U(),wl=s("p"),wl.textContent=eJ,kt=U(),jl=s("p"),jl.innerHTML=sJ,Bt=U(),w(Tl.$$.fragment),vt=U(),Ql=s("p"),Ql.innerHTML=CJ,Lt=U(),yl=s("p"),yl.innerHTML=nJ,$t=U(),w(il.$$.fragment),Ht=U(),Al=s("p"),Al.textContent=wJ,Gt=U(),w(al.$$.fragment),Ot=U(),pl=s("p"),pl.innerHTML=jJ,Nt=U(),Il=s("blockquote"),Il.innerHTML=TJ,qt=U(),w(El.$$.fragment),zt=U(),ul=s("p"),ul.innerHTML=QJ,Yt=U(),Vl=s("ul"),Vl.innerHTML=yJ,Wt=U(),Rl=s("p"),Rl.textContent=iJ,Zt=U(),w(Dl.$$.fragment),Xt=U(),ml=s("p"),ml.innerHTML=AJ,Ft=U(),ol=s("blockquote"),ol.innerHTML=aJ,Pt=U(),I=s("details"),$l=s("summary"),$l.textContent=pJ,IM=U(),w(cl.$$.fragment),Kt=U(),rl=s("p"),rl.textContent=IJ,lM=U(),w(xl.$$.fragment),tM=U(),fl=s("p"),fl.innerHTML=EJ,MM=U(),w(gl.$$.fragment),JM=U(),Sl=s("p"),Sl.innerHTML=uJ,UM=U(),bl=s("img"),eM=U(),dl=s("p"),dl.innerHTML=RJ,sM=U(),CM=s("hr"),nM=U(),hl=s("p"),hl.textContent=DJ,wM=U(),_l=s("p"),_l.textContent=mJ,jM=U(),kl=s("ul"),kl.innerHTML=oJ,TM=U(),Bl=s("p"),Bl.innerHTML=cJ,QM=U(),vl=s("p"),vl.textContent=rJ,yM=U(),w(Ll.$$.fragment),iM=U(),Ol=s("p"),this.h()},l(l){const t=dJ("svelte-u9bgzb",document.head);a=C(t,"META",{name:!0,content:!0}),t.forEach(M),Nl=e(l),Gl=C(l,"P",{}),EM(Gl).forEach(M),ql=e(l),j(E.$$.fragment,l),zl=e(l),u=C(l,"IMG",{src:!0,alt:!0}),Yl=e(l),V=C(l,"P",{"data-svelte-h":!0}),n(V)!=="svelte-1gy2pfq"&&(V.innerHTML=DM),Wl=e(l),R=C(l,"P",{"data-svelte-h":!0}),n(R)!=="svelte-1us9ggt"&&(R.textContent=mM),Zl=e(l),D=C(l,"P",{"data-svelte-h":!0}),n(D)!=="svelte-19kbse6"&&(D.textContent=oM),Xl=e(l),j(m.$$.fragment,l),Fl=e(l),o=C(l,"P",{"data-svelte-h":!0}),n(o)!=="svelte-akmbg5"&&(o.innerHTML=cM),Pl=e(l),c=C(l,"P",{"data-svelte-h":!0}),n(c)!=="svelte-w69lfk"&&(c.textContent=rM),Kl=e(l),r=C(l,"TABLE",{"data-svelte-h":!0}),n(r)!=="svelte-fg38wq"&&(r.innerHTML=xM),lt=e(l),x=C(l,"P",{"data-svelte-h":!0}),n(x)!=="svelte-17s6sot"&&(x.textContent=fM),tt=e(l),f=C(l,"P",{"data-svelte-h":!0}),n(f)!=="svelte-6amqsy"&&(f.innerHTML=gM),Mt=e(l),g=C(l,"P",{"data-svelte-h":!0}),n(g)!=="svelte-a8x1zp"&&(g.innerHTML=SM),Jt=e(l),S=C(l,"P",{"data-svelte-h":!0}),n(S)!=="svelte-11zbl1w"&&(S.innerHTML=bM),Ut=e(l),b=C(l,"P",{"data-svelte-h":!0}),n(b)!=="svelte-1kntwtx"&&(b.textContent=dM),et=e(l),d=C(l,"IMG",{src:!0,alt:!0}),st=e(l),h=C(l,"UL",{"data-svelte-h":!0}),n(h)!=="svelte-sd73uc"&&(h.innerHTML=_M),Ct=e(l),j(_.$$.fragment,l),nt=e(l),k=C(l,"P",{"data-svelte-h":!0}),n(k)!=="svelte-1sz8u8q"&&(k.innerHTML=kM),wt=e(l),B=C(l,"P",{"data-svelte-h":!0}),n(B)!=="svelte-vhrlll"&&(B.innerHTML=BM),jt=e(l),v=C(l,"P",{"data-svelte-h":!0}),n(v)!=="svelte-1i2or8b"&&(v.textContent=vM),Tt=e(l),j(L.$$.fragment,l),Qt=e(l),$=C(l,"P",{"data-svelte-h":!0}),n($)!=="svelte-3gfutm"&&($.textContent=LM),yt=e(l),H=C(l,"IMG",{src:!0,alt:!0}),it=e(l),G=C(l,"P",{"data-svelte-h":!0}),n(G)!=="svelte-1vuldnz"&&(G.textContent=HM),At=e(l),O=C(l,"OL",{"data-svelte-h":!0}),n(O)!=="svelte-xpnfnt"&&(O.innerHTML=GM),at=e(l),N=C(l,"P",{"data-svelte-h":!0}),n(N)!=="svelte-ple0xz"&&(N.textContent=OM),pt=e(l),q=C(l,"P",{"data-svelte-h":!0}),n(q)!=="svelte-1o2mtpj"&&(q.textContent=NM),It=e(l),z=C(l,"P",{"data-svelte-h":!0}),n(z)!=="svelte-1kf9mud"&&(z.innerHTML=qM),Et=e(l),j(Y.$$.fragment,l),ut=e(l),W=C(l,"P",{"data-svelte-h":!0}),n(W)!=="svelte-l9qtp8"&&(W.innerHTML=zM),Vt=e(l),Z=C(l,"UL",{"data-svelte-h":!0}),n(Z)!=="svelte-8hdzul"&&(Z.innerHTML=YM),Rt=e(l),X=C(l,"P",{"data-svelte-h":!0}),n(X)!=="svelte-dospot"&&(X.textContent=WM),Dt=e(l),F=C(l,"UL",{"data-svelte-h":!0}),n(F)!=="svelte-9q43r9"&&(F.innerHTML=ZM),mt=e(l),P=C(l,"P",{"data-svelte-h":!0}),n(P)!=="svelte-m36l5b"&&(P.textContent=XM),ot=e(l),j(K.$$.fragment,l),ct=e(l),ll=C(l,"BLOCKQUOTE",{"data-svelte-h":!0}),n(ll)!=="svelte-1soij0w"&&(ll.innerHTML=FM),rt=e(l),tl=C(l,"P",{"data-svelte-h":!0}),n(tl)!=="svelte-r2l7sg"&&(tl.textContent=PM),xt=e(l),Ml=C(l,"P",{"data-svelte-h":!0}),n(Ml)!=="svelte-czy594"&&(Ml.textContent=KM),ft=e(l),Jl=C(l,"P",{"data-svelte-h":!0}),n(Jl)!=="svelte-13iq0g6"&&(Jl.textContent=lJ),gt=e(l),j(Ul.$$.fragment,l),St=e(l),el=C(l,"P",{"data-svelte-h":!0}),n(el)!=="svelte-epp1s2"&&(el.textContent=tJ),bt=e(l),sl=C(l,"UL",{"data-svelte-h":!0}),n(sl)!=="svelte-1nk6rdc"&&(sl.innerHTML=MJ),dt=e(l),Cl=C(l,"P",{"data-svelte-h":!0}),n(Cl)!=="svelte-1nialwj"&&(Cl.textContent=JJ),ht=e(l),nl=C(l,"P",{"data-svelte-h":!0}),n(nl)!=="svelte-6kqlb1"&&(nl.innerHTML=UJ),_t=e(l),wl=C(l,"P",{"data-svelte-h":!0}),n(wl)!=="svelte-v6s95a"&&(wl.textContent=eJ),kt=e(l),jl=C(l,"P",{"data-svelte-h":!0}),n(jl)!=="svelte-1b4rrzh"&&(jl.innerHTML=sJ),Bt=e(l),j(Tl.$$.fragment,l),vt=e(l),Ql=C(l,"P",{"data-svelte-h":!0}),n(Ql)!=="svelte-nufzck"&&(Ql.innerHTML=CJ),Lt=e(l),yl=C(l,"P",{"data-svelte-h":!0}),n(yl)!=="svelte-1g7iio7"&&(yl.innerHTML=nJ),$t=e(l),j(il.$$.fragment,l),Ht=e(l),Al=C(l,"P",{"data-svelte-h":!0}),n(Al)!=="svelte-whfbx9"&&(Al.textContent=wJ),Gt=e(l),j(al.$$.fragment,l),Ot=e(l),pl=C(l,"P",{"data-svelte-h":!0}),n(pl)!=="svelte-1wbn5d2"&&(pl.innerHTML=jJ),Nt=e(l),Il=C(l,"BLOCKQUOTE",{"data-svelte-h":!0}),n(Il)!=="svelte-k6vedc"&&(Il.innerHTML=TJ),qt=e(l),j(El.$$.fragment,l),zt=e(l),ul=C(l,"P",{"data-svelte-h":!0}),n(ul)!=="svelte-1gta8ng"&&(ul.innerHTML=QJ),Yt=e(l),Vl=C(l,"UL",{"data-svelte-h":!0}),n(Vl)!=="svelte-5uufvr"&&(Vl.innerHTML=yJ),Wt=e(l),Rl=C(l,"P",{"data-svelte-h":!0}),n(Rl)!=="svelte-oagh6r"&&(Rl.textContent=iJ),Zt=e(l),j(Dl.$$.fragment,l),Xt=e(l),ml=C(l,"P",{"data-svelte-h":!0}),n(ml)!=="svelte-bu6ssu"&&(ml.innerHTML=AJ),Ft=e(l),ol=C(l,"BLOCKQUOTE",{"data-svelte-h":!0}),n(ol)!=="svelte-xmqs02"&&(ol.innerHTML=aJ),Pt=e(l),I=C(l,"DETAILS",{});var aM=EM(I);$l=C(aM,"SUMMARY",{"data-svelte-h":!0}),n($l)!=="svelte-d7q2d7"&&($l.textContent=pJ),IM=e(aM),j(cl.$$.fragment,aM),aM.forEach(M),Kt=e(l),rl=C(l,"P",{"data-svelte-h":!0}),n(rl)!=="svelte-1601phb"&&(rl.textContent=IJ),lM=e(l),j(xl.$$.fragment,l),tM=e(l),fl=C(l,"P",{"data-svelte-h":!0}),n(fl)!=="svelte-1jvv5sv"&&(fl.innerHTML=EJ),MM=e(l),j(gl.$$.fragment,l),JM=e(l),Sl=C(l,"P",{"data-svelte-h":!0}),n(Sl)!=="svelte-1b3l8gj"&&(Sl.innerHTML=uJ),UM=e(l),bl=C(l,"IMG",{src:!0,alt:!0}),eM=e(l),dl=C(l,"P",{"data-svelte-h":!0}),n(dl)!=="svelte-enq84r"&&(dl.innerHTML=RJ),sM=e(l),CM=C(l,"HR",{}),nM=e(l),hl=C(l,"P",{"data-svelte-h":!0}),n(hl)!=="svelte-1w7f83w"&&(hl.textContent=DJ),wM=e(l),_l=C(l,"P",{"data-svelte-h":!0}),n(_l)!=="svelte-1ra4jrq"&&(_l.textContent=mJ),jM=e(l),kl=C(l,"UL",{"data-svelte-h":!0}),n(kl)!=="svelte-1x46gbm"&&(kl.innerHTML=oJ),TM=e(l),Bl=C(l,"P",{"data-svelte-h":!0}),n(Bl)!=="svelte-dlhewo"&&(Bl.innerHTML=cJ),QM=e(l),vl=C(l,"P",{"data-svelte-h":!0}),n(vl)!=="svelte-dpn7to"&&(vl.textContent=rJ),yM=e(l),j(Ll.$$.fragment,l),iM=e(l),Ol=C(l,"P",{}),EM(Ol).forEach(M),this.h()},h(){A(a,"name","hf:doc:metadata"),A(a,"content",kJ),pM(u.src,RM="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit1/whiteboard-check-2.jpg")||A(u,"src",RM),A(u,"alt","Раздел 1 планирование"),pM(d.src,hM="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit1/weather.jpg")||A(d,"src",hM),A(d,"alt","Погода"),pM(H.src,$M="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit1/Agent_system_prompt.png")||A(H,"src",$M),A(H,"alt","Системная подсказка для использования инструментов"),pM(bl.src,VJ="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit1/Agent_system_prompt_tools.png")||A(bl,"src",VJ),A(bl,"alt","Системная подсказка для инструментов")},m(l,t){uM(document.head,a),J(l,Nl,t),J(l,Gl,t),J(l,ql,t),T(E,l,t),J(l,zl,t),J(l,u,t),J(l,Yl,t),J(l,V,t),J(l,Wl,t),J(l,R,t),J(l,Zl,t),J(l,D,t),J(l,Xl,t),T(m,l,t),J(l,Fl,t),J(l,o,t),J(l,Pl,t),J(l,c,t),J(l,Kl,t),J(l,r,t),J(l,lt,t),J(l,x,t),J(l,tt,t),J(l,f,t),J(l,Mt,t),J(l,g,t),J(l,Jt,t),J(l,S,t),J(l,Ut,t),J(l,b,t),J(l,et,t),J(l,d,t),J(l,st,t),J(l,h,t),J(l,Ct,t),T(_,l,t),J(l,nt,t),J(l,k,t),J(l,wt,t),J(l,B,t),J(l,jt,t),J(l,v,t),J(l,Tt,t),T(L,l,t),J(l,Qt,t),J(l,$,t),J(l,yt,t),J(l,H,t),J(l,it,t),J(l,G,t),J(l,At,t),J(l,O,t),J(l,at,t),J(l,N,t),J(l,pt,t),J(l,q,t),J(l,It,t),J(l,z,t),J(l,Et,t),T(Y,l,t),J(l,ut,t),J(l,W,t),J(l,Vt,t),J(l,Z,t),J(l,Rt,t),J(l,X,t),J(l,Dt,t),J(l,F,t),J(l,mt,t),J(l,P,t),J(l,ot,t),T(K,l,t),J(l,ct,t),J(l,ll,t),J(l,rt,t),J(l,tl,t),J(l,xt,t),J(l,Ml,t),J(l,ft,t),J(l,Jl,t),J(l,gt,t),T(Ul,l,t),J(l,St,t),J(l,el,t),J(l,bt,t),J(l,sl,t),J(l,dt,t),J(l,Cl,t),J(l,ht,t),J(l,nl,t),J(l,_t,t),J(l,wl,t),J(l,kt,t),J(l,jl,t),J(l,Bt,t),T(Tl,l,t),J(l,vt,t),J(l,Ql,t),J(l,Lt,t),J(l,yl,t),J(l,$t,t),T(il,l,t),J(l,Ht,t),J(l,Al,t),J(l,Gt,t),T(al,l,t),J(l,Ot,t),J(l,pl,t),J(l,Nt,t),J(l,Il,t),J(l,qt,t),T(El,l,t),J(l,zt,t),J(l,ul,t),J(l,Yt,t),J(l,Vl,t),J(l,Wt,t),J(l,Rl,t),J(l,Zt,t),T(Dl,l,t),J(l,Xt,t),J(l,ml,t),J(l,Ft,t),J(l,ol,t),J(l,Pt,t),J(l,I,t),uM(I,$l),uM(I,IM),T(cl,I,null),J(l,Kt,t),J(l,rl,t),J(l,lM,t),T(xl,l,t),J(l,tM,t),J(l,fl,t),J(l,MM,t),T(gl,l,t),J(l,JM,t),J(l,Sl,t),J(l,UM,t),J(l,bl,t),J(l,eM,t),J(l,dl,t),J(l,sM,t),J(l,CM,t),J(l,nM,t),J(l,hl,t),J(l,wM,t),J(l,_l,t),J(l,jM,t),J(l,kl,t),J(l,TM,t),J(l,Bl,t),J(l,QM,t),J(l,vl,t),J(l,yM,t),T(Ll,l,t),J(l,iM,t),J(l,Ol,t),AM=!0},p:fJ,i(l){AM||(Q(E.$$.fragment,l),Q(m.$$.fragment,l),Q(_.$$.fragment,l),Q(L.$$.fragment,l),Q(Y.$$.fragment,l),Q(K.$$.fragment,l),Q(Ul.$$.fragment,l),Q(Tl.$$.fragment,l),Q(il.$$.fragment,l),Q(al.$$.fragment,l),Q(El.$$.fragment,l),Q(Dl.$$.fragment,l),Q(cl.$$.fragment,l),Q(xl.$$.fragment,l),Q(gl.$$.fragment,l),Q(Ll.$$.fragment,l),AM=!0)},o(l){y(E.$$.fragment,l),y(m.$$.fragment,l),y(_.$$.fragment,l),y(L.$$.fragment,l),y(Y.$$.fragment,l),y(K.$$.fragment,l),y(Ul.$$.fragment,l),y(Tl.$$.fragment,l),y(il.$$.fragment,l),y(al.$$.fragment,l),y(El.$$.fragment,l),y(Dl.$$.fragment,l),y(cl.$$.fragment,l),y(xl.$$.fragment,l),y(gl.$$.fragment,l),y(Ll.$$.fragment,l),AM=!1},d(l){l&&(M(Nl),M(Gl),M(ql),M(zl),M(u),M(Yl),M(V),M(Wl),M(R),M(Zl),M(D),M(Xl),M(Fl),M(o),M(Pl),M(c),M(Kl),M(r),M(lt),M(x),M(tt),M(f),M(Mt),M(g),M(Jt),M(S),M(Ut),M(b),M(et),M(d),M(st),M(h),M(Ct),M(nt),M(k),M(wt),M(B),M(jt),M(v),M(Tt),M(Qt),M($),M(yt),M(H),M(it),M(G),M(At),M(O),M(at),M(N),M(pt),M(q),M(It),M(z),M(Et),M(ut),M(W),M(Vt),M(Z),M(Rt),M(X),M(Dt),M(F),M(mt),M(P),M(ot),M(ct),M(ll),M(rt),M(tl),M(xt),M(Ml),M(ft),M(Jl),M(gt),M(St),M(el),M(bt),M(sl),M(dt),M(Cl),M(ht),M(nl),M(_t),M(wl),M(kt),M(jl),M(Bt),M(vt),M(Ql),M(Lt),M(yl),M($t),M(Ht),M(Al),M(Gt),M(Ot),M(pl),M(Nt),M(Il),M(qt),M(zt),M(ul),M(Yt),M(Vl),M(Wt),M(Rl),M(Zt),M(Xt),M(ml),M(Ft),M(ol),M(Pt),M(I),M(Kt),M(rl),M(lM),M(tM),M(fl),M(MM),M(JM),M(Sl),M(UM),M(bl),M(eM),M(dl),M(sM),M(CM),M(nM),M(hl),M(wM),M(_l),M(jM),M(kl),M(TM),M(Bl),M(QM),M(vl),M(yM),M(iM),M(Ol)),M(a),i(E,l),i(m,l),i(_,l),i(L,l),i(Y,l),i(K,l),i(Ul,l),i(Tl,l),i(il,l),i(al,l),i(El,l),i(Dl,l),i(cl),i(xl,l),i(gl,l),i(Ll,l)}}}const kJ='{"title":"Что такое Инструменты?","local":"что-такое-инструменты","sections":[{"title":"Что такое AI Инструменты?","local":"что-такое-ai-инструменты","sections":[],"depth":2},{"title":"Как работают инструменты?","local":"как-работают-инструменты","sections":[],"depth":2},{"title":"Как мы даем инструменты LLM?","local":"как-мы-даем-инструменты-llm","sections":[{"title":"Автоформатирование секции Инструменты","local":"автоформатирование-секции-инструменты","sections":[],"depth":3},{"title":"Универсальная реализация Инструмента","local":"универсальная-реализация-инструмента","sections":[],"depth":3}],"depth":2}],"depth":1}';function BJ(VM){return gJ(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class GJ extends SJ{constructor(a){super(),bJ(this,a,BJ,_J,xJ,{})}}export{GJ as component};

Xet Storage Details

Size:
55.1 kB
·
Xet hash:
cc50472dd1c4e8a2c5d81483d675d060525303ec4f633f6156b583cb0060fb98

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