import{s as Se,n as Ee,o as Re}from"../chunks/scheduler.505acc25.js";import{S as Fe,i as Qe,e as o,s as l,c,h as Ne,a as i,d as n,b as s,f as He,g as m,j as r,k as Q,l as Ye,m as t,n as d,t as u,o as p,p as b}from"../chunks/index.fbb49fb4.js";import{C as Xe}from"../chunks/CopyLLMTxtMenu.38c593c4.js";import{C as ge}from"../chunks/CodeBlock.2ead06c8.js";import{H as N}from"../chunks/Heading.511e0027.js";import{E as ze}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.9ca82795.js";function Pe(Ue){let y,Y,R,X,T,z,J,P,g,je=`<strong>Definir un conjunto claro de herramientas es crucial para el rendimiento.</strong> Como discutimos en <a href="../../unit1/tools">unidad 1</a>, las interfaces de herramientas claras son más fáciles de usar para los LLM.
Al igual que una interfaz de API para ingenieros humanos, pueden obtener m s de la herramienta si es f cil de entender c mo funciona.`,A,U,we="Hay <strong>cuatro tipos principales de herramientas en LlamaIndex</strong>:",K,j,ve='<img src="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/llama-index/tools.png" alt="Herramientas"/>',D,w,Ge="<li><code>FunctionTool</code>: Convierte cualquier función de Python en una herramienta que un agente puede utilizar. Averigua autom ticamente cómo funciona.</li> <li><code>QueryEngineTool</code>: Una herramienta que permite a los agentes utilizar motores de consulta. Dado que los agentes est n construidos sobre motores de consulta, también pueden utilizar a otros agentes como herramientas.</li> <li><code>Toolspecs</code>: Conjuntos de herramientas creados por la comunidad, que a menudo incluyen herramientas para servicios específicos como Gmail.</li> <li><code>Utility Tools</code>: Herramientas especiales que ayudan a manejar grandes cantidades de datos de otras herramientas.</li>",O,v,Ze="Vamos a ver cada una de ellas en más detalle a continuación.",ee,G,ae,h,Ie='<p>Puedes seguir el código en <a href="https://huggingface.co/agents-course/notebooks/blob/main/unit2/llama-index/tools.ipynb" target="_blank">este cuaderno</a> que puedes ejecutar utilizando Google Colab.</p>',ne,Z,We=`Una FunctionTool proporciona una forma sencilla de envolver cualquier función de Python y hacerla disponible para un agente.
Puedes pasar tanto una función sincrónica como asincrona a la herramienta, junto con par metros opcionales <code>name</code> y <code>description</code>.
El nombre y la descripción son particularmente importantes, ya que ayudan al agente a entender cuando y cómo utilizar la herramienta de manera efectiva.
Vamos a ver cómo crear una FunctionTool a continuación y luego llamarla.`,te,I,le,f,Ce='<p>Cuando se utiliza un agente o LLM con llamadas a funciones, la herramienta seleccionada (y los argumentos escritos para esa herramienta) dependen en gran medida del nombre de la herramienta y la descripción del proposito y argumentos de la herramienta. Aprende más sobre la llamada a funciones en la <a href="https://docs.llamaindex.ai/en/stable/examples/workflow/function_calling_agent/">Guía de llamada a funciones</a>.</p>',se,W,oe,C,xe=`The <code>QueryEngine</code> que definimos en la unidad anterior puede ser facilmente transformado en una herramienta usando la clase <code>QueryEngineTool</code>.
Vamos a ver como crear un <code>QueryEngineTool</code> desde un <code>QueryEngine</code> en el ejemplo siguiente.`,ie,x,re,_,ce,$,_e=`Piensa en <code>ToolSpecs</code> como colecciones de herramientas que trabajan juntas armoniosamente - como una caja de herramientas bien organizada de un profesional.
Al igual que una caja de herramientas de un mecanico contiene herramientas complementarias que trabajan juntas para reparaciones de vehiculos, un <code>ToolSpec</code> combina herramientas relacionadas para un proposito especifico.
Por ejemplo, la herramienta especifica de un agente contable podria combinar elegante mente capacidades de hoja de calculo, funcionalidad de correo electronico y herramientas de calculo para manejar tareas financieras con precision y eficiencia.`,me,V,$e="<summary>Instalar la herramienta especifica de Google</summary>\nComo se introdujo en la [seccion sobre LlamaHub](llama-hub), podemos instalar la herramienta especifica de Google con el siguiente comando:\n```python\npip install llama-index-tools-google\n```",de,B,Ve="Y ahora podemos cargar la herramienta especifica y convertirla en una lista de herramientas.",ue,L,pe,k,be,q,Be=`A menudo, realizar consultas a una API <strong>puede devolver una cantidad excesiva de datos</strong>, algunos de los cuales pueden ser irrelevantes, desbordar la ventana de contexto del LLM o aumentar innecesariamente el número de tokens que se están utilizando.
Vamos a revisar nuestras dos principales herramientas de utilidad a continuaci n.`,ye,H,Le="<li><code>OnDemandToolLoader</code>: Esta herramienta convierte cualquier cargador de datos existente de LlamaIndex (clase BaseReader) en una herramienta que un agente puede utilizar. La herramienta se puede llamar con todos los parámetros necesarios para desencadenar <code>load_data</code> del cargador de datos, junto con una cadena de consulta de lenguaje natural. Durante la ejecución, primero cargamos datos del cargador de datos, los indexamos (por ejemplo, con un vector store) y luego los consultamos. Todos estos tres pasos se realizan en una sola llamada a la herramienta.</li> <li><code>LoadAndSearchToolSpec</code>: El LoadAndSearchToolSpec toma cualquier herramienta existente como entrada. Como herramienta específicas, implementa <code>to_tool_list</code>, y cuando se llama a esa función, se devuelven dos herramientas: una herramienta de carga y una herramienta de búsqueda. La ejecución de la herramienta de carga llamar  a la herramienta subyacente, y luego indexar  la salida (por defecto con un vector index). La ejecución de la herramienta de búsqueda tomar  una cadena de consulta como entrada y llamar  al vector index subyacente.</li>",he,M,ke='<p>Puedes encontrar herramientas y herramientas de utilidad en <a href="https://llamahub.ai/">LlamaHub</a></p>',fe,S,qe="Ahora que entendemos los conceptos básicos de agentes y herramientas en LlamaIndex, veamos cómo podemos <strong>usar LlamaIndex para crear flujos de trabajo configurables y manejables!</strong>",Me,E,Te,F,Je;return T=new Xe({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),J=new N({props:{title:"Uso de Herramientas en LlamaIndex",local:"uso-de-herramientas-en-llamaindex",headingTag:"h1"}}),G=new N({props:{title:"Crear una FunctionTool",local:"crear-una-functiontool",headingTag:"h2"}}),I=new ge({props:{code:"ZnJvbSUyMGxsYW1hX2luZGV4LmNvcmUudG9vbHMlMjBpbXBvcnQlMjBGdW5jdGlvblRvb2wlMEElMEFkZWYlMjBnZXRfd2VhdGhlcihsb2NhdGlvbiUzQSUyMHN0ciklMjAtJTNFJTIwc3RyJTNBJTBBJTIwJTIwJTIwJTIwJTIyJTIyJTIyJUMzJTlBdGlsJTIwcGFyYSUyMG9idGVuZXIlMjBlbCUyMGNsaW1hJTIwcGFyYSUyMHVuYSUyMHViaWNhY2klQzMlQjNuJTIwZGV0ZXJtaW5hZGEuJTIyJTIyJTIyJTBBJTIwJTIwJTIwJTIwcHJpbnQoZiUyMk9idGVuZXIlMjBjbGltYSUyMGRlJTIwJTdCbG9jYXRpb24lN0QlMjIpJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwZiUyMkVsJTIwY2xpbWElMjBlbiUyMCU3QmxvY2F0aW9uJTdEJTIwZXMlMjBzb2xlYWRvJTIyJTBBJTBBdG9vbCUyMCUzRCUyMEZ1bmN0aW9uVG9vbC5mcm9tX2RlZmF1bHRzKCUwQSUyMCUyMCUyMCUyMGdldF93ZWF0aGVyJTJDJTBBJTIwJTIwJTIwJTIwbmFtZSUzRCUyMm15X3dlYXRoZXJfdG9vbCUyMiUyQyUwQSUyMCUyMCUyMCUyMGRlc2NyaXB0aW9uJTNEJTIyJUMzJTlBdGlsJTIwcGFyYSUyMG9idGVuZXIlMjBlbCUyMGNsaW1hJTIwcGFyYSUyMHVuYSUyMHViaWNhY2klQzMlQjNuJTIwZGV0ZXJtaW5hZGEuJTIyJTJDJTBBKSUwQXRvb2wuY2FsbCglMjJOdWV2byUyMFlvcmslMjIp",highlighted:`<span class="hljs-keyword">from</span> llama_index.core.tools <span class="hljs-keyword">import</span> FunctionTool

<span class="hljs-keyword">def</span> <span class="hljs-title function_">get_weather</span>(<span class="hljs-params">location: <span class="hljs-built_in">str</span></span>) -&gt; <span class="hljs-built_in">str</span>:
    <span class="hljs-string">&quot;&quot;&quot;Útil para obtener el clima para una ubicación determinada.&quot;&quot;&quot;</span>
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Obtener clima de <span class="hljs-subst">{location}</span>&quot;</span>)
    <span class="hljs-keyword">return</span> <span class="hljs-string">f&quot;El clima en <span class="hljs-subst">{location}</span> es soleado&quot;</span>

tool = FunctionTool.from_defaults(
    get_weather,
    name=<span class="hljs-string">&quot;my_weather_tool&quot;</span>,
    description=<span class="hljs-string">&quot;Útil para obtener el clima para una ubicación determinada.&quot;</span>,
)
tool.call(<span class="hljs-string">&quot;Nuevo York&quot;</span>)`,wrap:!1}}),W=new N({props:{title:"Creando un QueryEngineTool",local:"creando-un-queryenginetool",headingTag:"h2"}}),x=new ge({props:{code:"ZnJvbSUyMGxsYW1hX2luZGV4LmNvcmUlMjBpbXBvcnQlMjBWZWN0b3JTdG9yZUluZGV4JTBBZnJvbSUyMGxsYW1hX2luZGV4LmNvcmUudG9vbHMlMjBpbXBvcnQlMjBRdWVyeUVuZ2luZVRvb2wlMEFmcm9tJTIwbGxhbWFfaW5kZXgubGxtcy5odWdnaW5nZmFjZV9hcGklMjBpbXBvcnQlMjBIdWdnaW5nRmFjZUluZmVyZW5jZUFQSSUwQWZyb20lMjBsbGFtYV9pbmRleC5lbWJlZGRpbmdzLmh1Z2dpbmdmYWNlX2FwaSUyMGltcG9ydCUyMEh1Z2dpbmdGYWNlSW5mZXJlbmNlQVBJRW1iZWRkaW5nJTBBZnJvbSUyMGxsYW1hX2luZGV4LnZlY3Rvcl9zdG9yZXMuY2hyb21hJTIwaW1wb3J0JTIwQ2hyb21hVmVjdG9yU3RvcmUlMEElMEFlbWJlZF9tb2RlbCUyMCUzRCUyMEh1Z2dpbmdGYWNlSW5mZXJlbmNlQVBJRW1iZWRkaW5nKCUyMkJBQUklMkZiZ2Utc21hbGwtZW4tdjEuNSUyMiklMEElMEFkYiUyMCUzRCUyMGNocm9tYWRiLlBlcnNpc3RlbnRDbGllbnQocGF0aCUzRCUyMi4lMkZhbGZyZWRfY2hyb21hX2RiJTIyKSUwQWNocm9tYV9jb2xsZWN0aW9uJTIwJTNEJTIwZGIuZ2V0X29yX2NyZWF0ZV9jb2xsZWN0aW9uKCUyMmFsZnJlZCUyMiklMEF2ZWN0b3Jfc3RvcmUlMjAlM0QlMjBDaHJvbWFWZWN0b3JTdG9yZShjaHJvbWFfY29sbGVjdGlvbiUzRGNocm9tYV9jb2xsZWN0aW9uKSUwQSUwQWluZGV4JTIwJTNEJTIwVmVjdG9yU3RvcmVJbmRleC5mcm9tX3ZlY3Rvcl9zdG9yZSh2ZWN0b3Jfc3RvcmUlMkMlMjBlbWJlZF9tb2RlbCUzRGVtYmVkX21vZGVsKSUwQSUwQWxsbSUyMCUzRCUyMEh1Z2dpbmdGYWNlSW5mZXJlbmNlQVBJKG1vZGVsX25hbWUlM0QlMjJRd2VuJTJGUXdlbjIuNS1Db2Rlci0zMkItSW5zdHJ1Y3QlMjIpJTBBcXVlcnlfZW5naW5lJTIwJTNEJTIwaW5kZXguYXNfcXVlcnlfZW5naW5lKGxsbSUzRGxsbSklMEF0b29sJTIwJTNEJTIwUXVlcnlFbmdpbmVUb29sLmZyb21fZGVmYXVsdHMocXVlcnlfZW5naW5lJTJDJTIwbmFtZSUzRCUyMnNvbWUlMjB1c2VmdWwlMjBuYW1lJTIyJTJDJTIwZGVzY3JpcHRpb24lM0QlMjJzb21lJTIwdXNlZnVsJTIwZGVzY3JpcHRpb24lMjIp",highlighted:`<span class="hljs-keyword">from</span> llama_index.core <span class="hljs-keyword">import</span> VectorStoreIndex
<span class="hljs-keyword">from</span> llama_index.core.tools <span class="hljs-keyword">import</span> QueryEngineTool
<span class="hljs-keyword">from</span> llama_index.llms.huggingface_api <span class="hljs-keyword">import</span> HuggingFaceInferenceAPI
<span class="hljs-keyword">from</span> llama_index.embeddings.huggingface_api <span class="hljs-keyword">import</span> HuggingFaceInferenceAPIEmbedding
<span class="hljs-keyword">from</span> llama_index.vector_stores.chroma <span class="hljs-keyword">import</span> ChromaVectorStore

embed_model = HuggingFaceInferenceAPIEmbedding(<span class="hljs-string">&quot;BAAI/bge-small-en-v1.5&quot;</span>)

db = chromadb.PersistentClient(path=<span class="hljs-string">&quot;./alfred_chroma_db&quot;</span>)
chroma_collection = db.get_or_create_collection(<span class="hljs-string">&quot;alfred&quot;</span>)
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)

index = VectorStoreIndex.from_vector_store(vector_store, embed_model=embed_model)

llm = HuggingFaceInferenceAPI(model_name=<span class="hljs-string">&quot;Qwen/Qwen2.5-Coder-32B-Instruct&quot;</span>)
query_engine = index.as_query_engine(llm=llm)
tool = QueryEngineTool.from_defaults(query_engine, name=<span class="hljs-string">&quot;some useful name&quot;</span>, description=<span class="hljs-string">&quot;some useful description&quot;</span>)`,wrap:!1}}),_=new N({props:{title:"Crear Herramientas Especificas",local:"crear-herramientas-especificas",headingTag:"h2"}}),L=new ge({props:{code:"ZnJvbSUyMGxsYW1hX2luZGV4LnRvb2xzLmdvb2dsZSUyMGltcG9ydCUyMEdtYWlsVG9vbFNwZWMlMEElMEF0b29sX3NwZWMlMjAlM0QlMjBHbWFpbFRvb2xTcGVjKCklMEF0b29sX3NwZWNfbGlzdCUyMCUzRCUyMHRvb2xfc3BlYy50b190b29sX2xpc3QoKSUwQSUwQVBhcmElMjBvYnRlbmVyJTIwdW5hJTIwdmlzaSVDMyVCM24lMjBtJUMzJUExcyUyMGRldGFsbGFkYSUyMGRlJTIwbGFzJTIwaGVycmFtaWVudGFzJTJDJTIwcG9kZW1vcyUyMGV4YW1pbmFyJTIwbG9zJTIwJTYwbWV0YWRhdGElNjAlMjBkZSUyMGNhZGElMjB1bmElMjBkZSUyMGVsbGFzLiUwQSUwQSU2MCU2MCU2MHB5dGhvbiUwQSU1Qih0b29sLm1ldGFkYXRhLm5hbWUlMkMlMjB0b29sLm1ldGFkYXRhLmRlc2NyaXB0aW9uKSUyMGZvciUyMHRvb2wlMjBpbiUyMHRvb2xfc3BlY19saXN0JTVE",highlighted:`<span class="hljs-keyword">from</span> llama_index.tools.google <span class="hljs-keyword">import</span> GmailToolSpec

tool_spec = GmailToolSpec()
tool_spec_list = tool_spec.to_tool_list()

Para obtener una visión más detallada de las herramientas, podemos examinar los \`metadata\` de cada una de ellas.

\`\`\`python
[(tool.metadata.name, tool.metadata.description) <span class="hljs-keyword">for</span> tool <span class="hljs-keyword">in</span> tool_spec_list]`,wrap:!1}}),k=new N({props:{title:"Herramientas de utilidad",local:"herramientas-de-utilidad",headingTag:"h2"}}),E=new ze({props:{source:"https://github.com/huggingface/agents-course/blob/main/units/es/unit2/llama-index/tools.mdx"}}),{c(){y=o("meta"),Y=l(),R=o("p"),X=l(),c(T.$$.fragment),z=l(),c(J.$$.fragment),P=l(),g=o("p"),g.innerHTML=je,A=l(),U=o("p"),U.innerHTML=we,K=l(),j=o("p"),j.innerHTML=ve,D=l(),w=o("ol"),w.innerHTML=Ge,O=l(),v=o("p"),v.textContent=Ze,ee=l(),c(G.$$.fragment),ae=l(),h=o("blockquote"),h.innerHTML=Ie,ne=l(),Z=o("p"),Z.innerHTML=We,te=l(),c(I.$$.fragment),le=l(),f=o("blockquote"),f.innerHTML=Ce,se=l(),c(W.$$.fragment),oe=l(),C=o("p"),C.innerHTML=xe,ie=l(),c(x.$$.fragment),re=l(),c(_.$$.fragment),ce=l(),$=o("p"),$.innerHTML=_e,me=l(),V=o("details"),V.innerHTML=$e,de=l(),B=o("p"),B.textContent=Ve,ue=l(),c(L.$$.fragment),pe=l(),c(k.$$.fragment),be=l(),q=o("p"),q.innerHTML=Be,ye=l(),H=o("ol"),H.innerHTML=Le,he=l(),M=o("blockquote"),M.innerHTML=ke,fe=l(),S=o("p"),S.innerHTML=qe,Me=l(),c(E.$$.fragment),Te=l(),F=o("p"),this.h()},l(e){const a=Ne("svelte-u9bgzb",document.head);y=i(a,"META",{name:!0,content:!0}),a.forEach(n),Y=s(e),R=i(e,"P",{}),He(R).forEach(n),X=s(e),m(T.$$.fragment,e),z=s(e),m(J.$$.fragment,e),P=s(e),g=i(e,"P",{"data-svelte-h":!0}),r(g)!=="svelte-rimq4e"&&(g.innerHTML=je),A=s(e),U=i(e,"P",{"data-svelte-h":!0}),r(U)!=="svelte-1cy837m"&&(U.innerHTML=we),K=s(e),j=i(e,"P",{"data-svelte-h":!0}),r(j)!=="svelte-1l1muw8"&&(j.innerHTML=ve),D=s(e),w=i(e,"OL",{"data-svelte-h":!0}),r(w)!=="svelte-wupxij"&&(w.innerHTML=Ge),O=s(e),v=i(e,"P",{"data-svelte-h":!0}),r(v)!=="svelte-1f9p9lp"&&(v.textContent=Ze),ee=s(e),m(G.$$.fragment,e),ae=s(e),h=i(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),r(h)!=="svelte-ipc89l"&&(h.innerHTML=Ie),ne=s(e),Z=i(e,"P",{"data-svelte-h":!0}),r(Z)!=="svelte-1emilc7"&&(Z.innerHTML=We),te=s(e),m(I.$$.fragment,e),le=s(e),f=i(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),r(f)!=="svelte-6rpr1h"&&(f.innerHTML=Ce),se=s(e),m(W.$$.fragment,e),oe=s(e),C=i(e,"P",{"data-svelte-h":!0}),r(C)!=="svelte-1v41ngd"&&(C.innerHTML=xe),ie=s(e),m(x.$$.fragment,e),re=s(e),m(_.$$.fragment,e),ce=s(e),$=i(e,"P",{"data-svelte-h":!0}),r($)!=="svelte-12erlp1"&&($.innerHTML=_e),me=s(e),V=i(e,"DETAILS",{"data-svelte-h":!0}),r(V)!=="svelte-1hp2yq8"&&(V.innerHTML=$e),de=s(e),B=i(e,"P",{"data-svelte-h":!0}),r(B)!=="svelte-84k6vq"&&(B.textContent=Ve),ue=s(e),m(L.$$.fragment,e),pe=s(e),m(k.$$.fragment,e),be=s(e),q=i(e,"P",{"data-svelte-h":!0}),r(q)!=="svelte-16x5wo5"&&(q.innerHTML=Be),ye=s(e),H=i(e,"OL",{"data-svelte-h":!0}),r(H)!=="svelte-1akw2o3"&&(H.innerHTML=Le),he=s(e),M=i(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),r(M)!=="svelte-b0jyqt"&&(M.innerHTML=ke),fe=s(e),S=i(e,"P",{"data-svelte-h":!0}),r(S)!=="svelte-1t4uhbz"&&(S.innerHTML=qe),Me=s(e),m(E.$$.fragment,e),Te=s(e),F=i(e,"P",{}),He(F).forEach(n),this.h()},h(){Q(y,"name","hf:doc:metadata"),Q(y,"content",Ae),Q(h,"class","tip"),Q(f,"class","tip"),Q(M,"class","tip")},m(e,a){Ye(document.head,y),t(e,Y,a),t(e,R,a),t(e,X,a),d(T,e,a),t(e,z,a),d(J,e,a),t(e,P,a),t(e,g,a),t(e,A,a),t(e,U,a),t(e,K,a),t(e,j,a),t(e,D,a),t(e,w,a),t(e,O,a),t(e,v,a),t(e,ee,a),d(G,e,a),t(e,ae,a),t(e,h,a),t(e,ne,a),t(e,Z,a),t(e,te,a),d(I,e,a),t(e,le,a),t(e,f,a),t(e,se,a),d(W,e,a),t(e,oe,a),t(e,C,a),t(e,ie,a),d(x,e,a),t(e,re,a),d(_,e,a),t(e,ce,a),t(e,$,a),t(e,me,a),t(e,V,a),t(e,de,a),t(e,B,a),t(e,ue,a),d(L,e,a),t(e,pe,a),d(k,e,a),t(e,be,a),t(e,q,a),t(e,ye,a),t(e,H,a),t(e,he,a),t(e,M,a),t(e,fe,a),t(e,S,a),t(e,Me,a),d(E,e,a),t(e,Te,a),t(e,F,a),Je=!0},p:Ee,i(e){Je||(u(T.$$.fragment,e),u(J.$$.fragment,e),u(G.$$.fragment,e),u(I.$$.fragment,e),u(W.$$.fragment,e),u(x.$$.fragment,e),u(_.$$.fragment,e),u(L.$$.fragment,e),u(k.$$.fragment,e),u(E.$$.fragment,e),Je=!0)},o(e){p(T.$$.fragment,e),p(J.$$.fragment,e),p(G.$$.fragment,e),p(I.$$.fragment,e),p(W.$$.fragment,e),p(x.$$.fragment,e),p(_.$$.fragment,e),p(L.$$.fragment,e),p(k.$$.fragment,e),p(E.$$.fragment,e),Je=!1},d(e){e&&(n(Y),n(R),n(X),n(z),n(P),n(g),n(A),n(U),n(K),n(j),n(D),n(w),n(O),n(v),n(ee),n(ae),n(h),n(ne),n(Z),n(te),n(le),n(f),n(se),n(oe),n(C),n(ie),n(re),n(ce),n($),n(me),n(V),n(de),n(B),n(ue),n(pe),n(be),n(q),n(ye),n(H),n(he),n(M),n(fe),n(S),n(Me),n(Te),n(F)),n(y),b(T,e),b(J,e),b(G,e),b(I,e),b(W,e),b(x,e),b(_,e),b(L,e),b(k,e),b(E,e)}}}const Ae='{"title":"Uso de Herramientas en LlamaIndex","local":"uso-de-herramientas-en-llamaindex","sections":[{"title":"Crear una FunctionTool","local":"crear-una-functiontool","sections":[],"depth":2},{"title":"Creando un QueryEngineTool","local":"creando-un-queryenginetool","sections":[],"depth":2},{"title":"Crear Herramientas Especificas","local":"crear-herramientas-especificas","sections":[],"depth":2},{"title":"Herramientas de utilidad","local":"herramientas-de-utilidad","sections":[],"depth":2}],"depth":1}';function Ke(Ue){return Re(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class la extends Fe{constructor(y){super(),Qe(this,y,Ke,Pe,Se,{})}}export{la as component};
