¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Llamada a funciones con un modelo de lenguaje

Después de esta lección: Puedo describir una función para que un modelo pueda pedirla.

Lección de 60 min2 comandosLaboratorio de agente de programación con IA: usa opencode para explicar y corregir código, y comprueba su trabajo

Cómo puede un modelo usar tus funciones

Un modelo de lenguaje solo sabe escribir texto. No puede buscar un precio en tu tienda, porque no ejecuta tu código. La llamada a funciones, también llamada llamada a herramientas, cubre ese hueco.

Tú describes una función al modelo. Él responde con una petición de llamada, y es tu programa quien hace la llamada.

Al final de esta lección

Nota

Puedo describir una función para que un modelo pueda pedirla.

Palabras clave

PalabraQué significaEjemplo
Herramientauna función que tu programa ofrece a un modelo
Llamada a herramientala petición del modelo de ejecutar una herramienta
Esquemauna descripción de la forma de unos datos
Argumentoslos valores que una llamada pasa a la función{"item": "pera"}
Descripciónpalabras que dicen al modelo para qué sirve una herramienta

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Una herramienta tiene un nombre y entradas

Para ofrecer una función envías tres cosas. El nombre es el que usará el modelo. La descripción dice qué hace y cuándo usarla. Los parámetros dicen qué argumentos recibe, escritos como un esquema JSON.

El modelo nunca ve tu código. Solo lee esta descripción, así que una descripción vaga da malas peticiones.

Ejemplo resuelto: una herramienta, parte a parte

ParteQué contieneEn nuestra herramienta
nameEl nombre que usa el modeloget_price
descriptionQué haceDa el precio en céntimos de un artículo.
parametersLos argumentos, como esquemaun texto llamado item
requiredLos argumentos obligatoriositem

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Imprime la descripción de una herramienta

Comando
docker exec -w /home/node/project agent node -e "const tool={type:'function',function:{name:'get_price',description:'Da el precio en céntimos de un artículo.',parameters:{type:'object',properties:{item:{type:'string',description:'El nombre del artículo, por ejemplo manzana'}},required:['item']}}};console.log(JSON.stringify(tool,null,2))"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

El modelo responde con una petición

Cuando el modelo quiere una herramienta, su respuesta trae una lista llamada tool_calls en lugar de palabras. Cada llamada tiene un id, el name de la función y los arguments.

Los argumentos llegan en una sola cadena de JSON, no en un objeto. Tu programa debe leer esa cadena antes de usar los valores.

Pide una llamada a herramienta a un modelo

Comando
docker exec -w /home/node/project agent node -e "const u=(process.env.AI_URL||'http://ai:4000')+'/v1/chat/completions';const ask=async(m,t)=>{const r=await fetch(u,{method:'POST',headers:{'content-type':'application/json',authorization:'Bearer lab'},body:JSON.stringify({model:'lab',messages:m,tools:t,tool_choice:'required',max_tokens:80})});const j=await r.json();if(r.ok)return j.choices[0].message;throw Error(r.status+' '+j.error.message)};const tool={type:'function',function:{name:'get_price',description:'Da el precio de un artículo.',parameters:{type:'object',properties:{item:{type:'string'}}}}};(async()=>{let c;try{c=(await ask([{role:'user',content:'¿Cuánto cuesta una pera?'}],[tool])).tool_calls[0]}catch(e){console.log('Sin llamada ('+e.message+'). Muestra grabada:');c={function:{name:'get_price',arguments:JSON.stringify({item:'pera'})}}}const f=c.function;console.log('Nombre: '+f.name);console.log('Argumentos: '+f.arguments+' -> item '+JSON.parse(f.arguments).item)})()"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente cree que el modelo ejecuta la función. No es así. Solo escribe una petición. Tu programa lee la petición, ejecuta la función y decide qué hacer con el resultado.

Para ir más lejos: mejora una descripción

Cambia la descripción en la ejecución que consulta a un modelo, por ejemplo a Da un precio. Ejecútala tres veces y anota si la llamada cambia.

Después, añade required:['item'] al esquema. Escribe qué cambia para el modelo.

Sobre este laboratorio y su código: Laboratorio de agente de programación con IA: usa opencode para explicar y corregir código, y comprueba su trabajo

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.