13 · Darle herramientas al modelo
Una herramienta es solo una función que el modelo tiene permitido llamar: un nombre, una descripción y un esquema de argumentos. El modelo emite una llamada a herramienta; tu código la despacha y devuelve el resultado como observación.
Las herramientas dejan que un LLM actúe sobre el mundo. Cada herramienta es una función con nombre, descripción y un esquema de argumentos; se las anuncias al modelo, este responde con una llamada a herramienta estructurada, y TU código valida, despacha y devuelve el resultado como observación. El modelo nunca ejecuta código — solo lo solicita.
Sin esto:
Sin herramientas el modelo solo puede emitir texto desde sus pesos congelados — no puede calcular con exactitud, consultar datos en vivo ni cambiar nada. Las herramientas son cómo alcanza más allá de su propio contexto.
En la lección pasada las acciones del agente estaban hard-codeadas (add_coin). Las herramientas generalizan eso: una herramienta es cualquier función que dejas que el modelo invoque. Cada herramienta que expones tiene tres partes que el modelo necesita para usarla bien:
- nombre — un identificador corto que el modelo emite para elegir la herramienta (
calculator). - descripción — una frase que le dice al modelo cuándo usarla. Esta es la parte más importante: el modelo decide qué herramienta llamar puramente a partir de estas descripciones.
- esquema de argumentos — los parámetros y sus tipos, para que el modelo sepa cómo llenar la llamada.
El protocolo es un round-trip limpio:
- Le envías al modelo la lista de herramientas disponibles (nombre + descripción + esquema).
- El modelo responde — en vez de texto plano — con una llamada a herramienta: un objeto estructurado que nombra una herramienta y sus argumentos, p. ej.
{"name": "calculator", "args": {"expression": "12 * 7"}}. - Tu código valida la llamada, corre la función correspondiente y captura el resultado.
- Devuelves ese resultado al modelo como observación, y este continúa.
El punto crítico de seguridad: el modelo nunca ejecuta nada por sí mismo. Solo solicita una llamada. Tu runtime decide si la honra, con qué permisos y cómo sanear los argumentos. Esa frontera es donde vive toda la seguridad del uso de herramientas.
Abajo hay un pequeño registro de herramientas — exactamente el diccionario que serializarías y mostrarías al modelo — con tres herramientas, más el dispatcher que convierte una llamada a herramienta en una observación. (La calculadora es un diminuto parser aritmético escrito a mano para que la celda sea segura y auto-contenida.)
Python (in browser)
Un registro de herramientas + dispatcher: nombre/descripción/esquema anunciados al modelo, luego TU código valida y ejecuta la llamada (nota que la herramienta desconocida es rechazada).
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Los proveedores reales formalizan este mismo protocolo como function calling (OpenAI) o tool use (Anthropic). Describes cada herramienta con un JSON Schema; el modelo devuelve un campo estructurado tool_calls en vez de texto libre; corres la función y devuelves el resultado con un mensaje especial "tool". Lee la versión estilo OpenAI de abajo y mapea cada pieza al registro que acabas de correr.
El function-calling del proveedor es nuestro registro hecho oficial: herramientas descritas como JSON Schema, el modelo devuelve un `tool_calls` estructurado, tu código despacha y devuelve el resultado.
Cuando un LLM 'usa una herramienta', ¿qué ejecuta en realidad el código de la herramienta?
- Una herramienta = una función expuesta al modelo con un nombre, una descripción y un esquema de argumentos.
- El modelo solo emite una llamada a herramienta estructurada; TU código valida, despacha y devuelve el resultado como observación.
- Descripciones claras + esquemas estrictos son cómo el modelo elige correctamente — son la interfaz del modelo hacia tus herramientas.
El function calling / tool use impulsa la recuperación, ejecución de código, búsqueda web, consultas a bases de datos y cada plugin — el modelo decide *qué* llamar y tu registro decide *si y cómo* ejecutarlo.
Si lo quitas: Sin herramientas el modelo queda sellado dentro de sus datos de entrenamiento: sin aritmética exacta, sin hechos en vivo, sin efectos secundarios — solo puede describir acciones, nunca tomarlas.