Inicio

Agentes — Encapsulando la Inteligencia

Capítulo 7: Agentes — Encapsulando la Inteligencia

En el capítulo anterior construiste un chat con tools. El modelo llama herramientas, el SDK las ejecuta automáticamente, el modelo genera respuesta. Todo funciona.

Pero hay un problema práctico: cada vez que quieres usar esa configuración, tienes que repetir todo:

Si tienes múltiples endpoints que usan el mismo "asistente", estás duplicando código. Si cambias el system prompt, tienes que actualizarlo en varios lugares.

ToolLoopAgent resuelve esto: encapsula modelo, instrucciones y herramientas en un objeto reutilizable.

Código Primero

Define una vez, usa en cualquier parte.

¿Qué es un Agente?

Un agente tiene tres componentes:

  1. LLM — Procesa entrada y decide qué hacer
  2. Herramientas — Extienden capacidades más allá del texto
  3. Loop — Ejecuta herramientas hasta completar la tarea

ToolLoopAgent maneja los tres automáticamente. El loop continúa hasta que:

  • El modelo genera texto sin llamar tools (tarea completa)
  • Un tool requiere aprobación (needsApproval)
  • Se alcanza el límite de pasos (default: 20)
  • Un tool no tiene función execute

Parámetros del Constructor

El cambio de system a instructions

En AI SDK v6, el parámetro se renombró:

v5v6
system: '...'instructions: '...'

Esto refleja mejor el propósito: son instrucciones para el agente, no configuración del sistema.

Métodos: generate y stream

generate() — Ejecución Completa

El objeto de retorno incluye:

  • text — Respuesta final del agente
  • steps — Array con cada paso ejecutado
  • finishReason — Por qué terminó ('stop', 'tool-calls', etc.)

stream() — Respuesta en Tiempo Real

Para APIs web:

Control de Loop: stopWhen

Por defecto, el agente ejecuta hasta 20 pasos. Personaliza con stopWhen:

Límite de pasos

Parar en tool específico

Múltiples condiciones

Condición personalizada

Control de presupuesto

prepareStep: Modificación Dinámica

prepareStep se ejecuta antes de cada paso. Permite modificar configuración sobre la marcha.

Cambiar modelo según complejidad

Limitar herramientas por fase

Gestión de contexto largo

Inspeccionando los Pasos

Después de generate(), puedes ver exactamente qué hizo el agente:

Output típico:

Tipado con InferAgentUIMessage

Para type-safety completo en el frontend:

Caso Práctico: Agente de Cobranza

Uso:

Resumen

ConceptoQué aprendiste
ToolLoopAgentEncapsula modelo, instrucciones y tools en objeto reutilizable
instructionsPrompt de sistema (antes system)
generate()Ejecuta y retorna resultado completo
stream()Ejecuta con respuesta en tiempo real
stopWhenCondiciones de parada (default: 20 pasos)
stepCountIs(n)Para después de n pasos
hasToolCall(name)Para cuando se llama un tool específico
prepareStepModifica configuración antes de cada paso
onStepFinishCallback después de cada paso
onFinishCallback al completar
InferAgentUIMessageInfiere tipos para frontend

¿Cuándo usar ToolLoopAgent?

Usa funciones core (streamText)Usa ToolLoopAgent
Configuración únicaConfiguración reutilizada
Control muy específicoComportamiento estándar
Integración con código existenteNuevo desarrollo

El agente es una abstracción de conveniencia. Por debajo usa las mismas funciones core. Si necesitas control total, siempre puedes usar generateText o streamText directamente.


En el próximo capítulo exploraremos Embeddings y RAG: cómo darle a tu agente acceso a documentos y bases de conocimiento para respuestas más precisas y contextuales.

¿Ya compraste el libro?

Si compraste el libro y no encuentras tu email de descarga, ingresa tu email y te enviamos un nuevo enlace.