Buckets:

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

Xet Storage Details

Size:
55.4 kB
·
Xet hash:
1c67d822056203f605c83c8e40c5bacdb4c50bf3f347c02914e3487dae027f40

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