Agentes de IA
Un agente de IA es un LLM al que le das herramientas (funciones) que puede invocar por su cuenta para completar una tarea.
Imagina pedirle a un asistente que "investiga los mejores frameworks de React y me hace un resumen": el agente decide llamar a la herramienta de búsqueda, lee los resultados, llama de nuevo con términos refinados, y finalmente genera el resumen —todo sin que tú intervengas en cada paso. Esto es radicalmente diferente a un chatbot que solo genera texto.
El mecanismo técnico se llama Function Calling (OpenAI) o Tool Use (Anthropic). Defines las herramientas con nombre, descripción y parámetros; el modelo decide cuándo llamarlas, tú ejecutas la función real y devuelves el resultado al modelo, y el ciclo continúa hasta que el modelo considera la tarea completa.
Los peligros son reales: un agente con acceso a ejecutar código, enviar emails o modificar bases de datos puede causar daño si no tiene restricciones claras. Siempre limita qué pueden hacer tus agentes.
// Agente con Tools (Function Calling)
import OpenAI from "openai";
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
// Definir herramientas disponibles para el agente
const herramientas = [
{
type: "function",
function: {
name: "buscar_web",
description: "Busca información actualizada en internet",
parameters: {
type: "object",
properties: {
query: { type: "string", description: "Búsqueda a realizar" }
},
required: ["query"]
}
}
},
{
type: "function",
function: {
name: "ejecutar_codigo",
description: "Ejecuta código JavaScript y devuelve el resultado",
parameters: {
type: "object",
properties: {
codigo: { type: "string", description: "Código JS a ejecutar" }
},
required: ["codigo"]
}
}
}
];
// Ejecutores de herramientas
async function ejecutarHerramienta(nombre, args) {
switch (nombre) {
case "buscar_web":
// Integra con API de búsqueda real
return `Resultados de búsqueda para: ${args.query}`;
case "ejecutar_codigo":
try {
return String(eval(args.codigo));
} catch (e) {
return `Error: ${e.message}`;
}
default:
throw new Error(`Herramienta desconocida: ${nombre}`);
}
}
async function agente(tarea) {
const mensajes = [{ role: "user", content: tarea }];
while (true) {
const resp = await openai.chat.completions.create({
model: "gpt-4o",
messages: mensajes,
tools: herramientas,
});
const mensaje = resp.choices[0].message;
mensajes.push(mensaje);
if (resp.choices[0].finish_reason === "stop") break;
// Ejecutar tool calls
for (const toolCall of mensaje.tool_calls || []) {
const resultado = await ejecutarHerramienta(
toolCall.function.name,
JSON.parse(toolCall.function.arguments)
);
mensajes.push({
role: "tool",
tool_call_id: toolCall.id,
content: resultado
});
}
}
return mensajes.at(-1).content;
}
Practica esta lección
Resuelve los ejercicios del curso de IA para Devs en la app, gratis y con corrección automática.
Empezar a practicar