El desarrollo de software impulsado por inteligencia artificial ha dejado atrás la era de los prompts aislados. Cuando le pides a un único modelo de lenguaje que investigue, programe, redacte y audite una tarea compleja en una sola respuesta, el resultado suele ser superficial o propenso a alucinaciones. El verdadero salto productivo en 2026 radica en los sistemas multi-agente: equipos de IAs especializadas que colaboran, se corrigen mutuamente y ejecutan flujos de trabajo de principio a fin.
En este tutorial técnico aprenderás a utilizar CrewAI, el framework líder para orquestar agentes autónomos en Python, construyendo un comité de tres especialistas capaces de investigar una tecnología, redactar un análisis y auditar su rigor técnico automáticamente.
La anatomía de un agente en CrewAI
A diferencia de una simple llamada a una API de chat, un agente en CrewAI se diseña con tres componentes psicológicos y operativos que condicionan su comportamiento:
Role (Rol): Define la función específica del agente en el equipo (ej. «Analista de Ciberseguridad» o «Auditor de Código»).
Goal (Objetivo): La misión concreta que guía todas sus decisiones y búsquedas.
Backstory (Historia de fondo): El contexto profesional y la personalidad del agente. Esto actúa como un metaprompt de alta densidad que le enseña qué tono usar, qué priorizar y qué errores evitar.
Figura 1: Arquitectura y orquestación en CrewAI: anatomía técnica interna de cada agente (arriba) y pipeline secuencial de colaboración entre especialistas (abajo).
Paso 1: Instalación del framework y dependencias
Comenzamos configurando un entorno virtual dedicado e instalando crewai y sus herramientas de soporte. CrewAI es compatible tanto con modelos de nube (OpenAI, Claude, Gemini) como con modelos de código abierto locales a través de Ollama o vLLM.
Si deseas ejecutar este equipo de agentes completamente gratis en tu propia máquina sin gastar en APIs, solo necesitas tener Ollama encendido y configurar la variable de entorno OPENAI_API_BASE='http://localhost:11434/v1'. CrewAI enviará las peticiones a tu modelo local sin modificar el código.
Paso 2: Código completo del sistema colaborativo
A continuación se presenta el código completo del archivo equipo_agentes.py. Diseñaremos un flujo secuencial donde cada agente recibe como entrada el resultado producido por el colega anterior:
equipo_agentes.py
import os
from crewai import Agent, Task, Crew, Process
# Configuración del proveedor de modelo (compatible con Ollama local o APIs)
# Para usar modelos locales sin costo: export OPENAI_API_BASE='http://localhost:11434/v1'
os.environ["OPENAI_MODEL_NAME"] = "gpt-4o-mini" # O el nombre de tu modelo local
# ============================================================
# 1. Definición de los Agentes con Roles Especializados
# ============================================================
investigador = Agent(
role="Investigador Senior de Ciberseguridad",
goal="Identificar vulnerabilidades críticas y patrones de ataque en tecnologías emergentes",
backstory=(
"Eres un analista de seguridad ofensiva con 10 años de experiencia en auditoría de sistemas. "
"Tu habilidad radica en encontrar brechas técnicas que otros pasan por alto y respaldar cada hallazgo con hechos comprobables."
),
verbose=True,
allow_delegation=False
)
redactor = Agent(
role="Periodista y Divulgador Tecnológico",
goal="Transformar hallazgos técnicos densos en un informe ejecutivo claro y de alto impacto",
backstory=(
"Trabajas como editor jefe de una prestigiosa publicación de tecnología. "
"Sabes explicar conceptos de arquitectura de software para que tanto desarrolladores como directores entiendan su trascendencia."
),
verbose=True,
allow_delegation=False
)
auditor = Agent(
role="Auditor de Calidad y Verificación de Hechos",
goal="Revisar el informe final, eliminar sesgos y verificar que no existan alucinaciones o datos inventados",
backstory=(
"Eres un meticuloso verificador de hechos científicos. "
"Tu trabajo es cuestionar cada afirmación y certificar que las conclusiones sean objetivas y libres de clichés."
),
verbose=True,
allow_delegation=False
)
# ============================================================
# 2. Definición de Tareas con Entregables Claros
# ============================================================
tarea_investigacion = Task(
description=(
"Analiza los riesgos de seguridad emergentes en el uso de agentes de IA conectados a terminales locales. "
"Enumera los 3 vectores de ataque más peligrosos y proporciona ejemplos de mitigación técnica."
),
expected_output="Un documento técnico con los 3 vectores de ataque y sus contramedidas.",
agent=investigador
)
tarea_redaccion = Task(
description=(
"Toma el reporte de investigación sobre vectores de ataque y redacta un artículo de divulgación tecnológica "
"de 500 palabras, estructurado con subtítulos y recomendaciones para ingenieros de software."
),
expected_output="Un artículo periodístico estructurado listo para publicación.",
agent=redactor
)
tarea_auditoria = Task(
description=(
"Revisa el artículo redactado. Verifica que las afirmaciones de seguridad sean precisas, "
"elimina cualquier frase sensacionalista o cliché, y entrega la versión final impecable."
),
expected_output="El artículo final revisado y certificado para los lectores.",
agent=auditor
)
# ============================================================
# 3. Ensamblado y Orquestación del Equipo (Crew)
# ============================================================
equipo_seguridad = Crew(
agents=[investigador, redactor, auditor],
tasks=[tarea_investigacion, tarea_redaccion, tarea_auditoria],
process=Process.sequential, # Ejecución en cadena ordenada
verbose=True
)
if __name__ == "__main__":
print("🚀 Iniciando misión colaborativa del equipo de agentes...")
resultado_final = equipo_seguridad.kickoff()
print("\n" + "=" * 60)
print("INFORME FINAL CERTIFICADO:")
print("=" * 60)
print(resultado_final)
Paso 3: Cómo interactúan las Tareas (Tasks) y el Proceso Secuencial
El pegamento que une a los agentes son las Tasks. Cada tarea requiere dos parámetros indispensables:
description: Las instrucciones exactas de lo que debe investigar o resolver el agente.
expected_output: Una descripción rigurosa del formato del entregable (por ejemplo, «Una lista de 3 puntos con ejemplos de código»). Al definir el resultado esperado, el modelo sabe exactamente cuándo ha terminado su labor y evita divagar.
Al configurar process=Process.sequential, CrewAI garantiza que la salida de la tarea_investigacion se inyecte automáticamente en el contexto de la tarea_redaccion, y que el borrador resultante pase a manos del auditor para el control de calidad final.
Comparativa: CrewAI frente a otros frameworks de agentes en 2026
El ecosistema de agentes ha madurado con diferentes alternativas según la complejidad del proyecto:
Framework
Filosofía
Curva de Aprendizaje
Control de Flujo
Ideal para
CrewAI
Equipos humanos con roles y metas
Baja (Muy intuitivo)
Secuencial y Jerárquico
Investigación, redacción de informes, flujos de negocio
LangGraph
Grafos de estado y ciclos dirigidos
Alta (Requiere dominar LangChain)
Control Total (Bucle granular)
Aplicaciones empresariales complejas con lógica condicional
AutoGen (Microsoft)
Conversación multi-agente por turnos
Media
Dinámico / Conversacional
Generación de código, simulación de debates, ejecución local
Buenas prácticas para evitar bucles infinitos y controlar costos
Límite de iteraciones (max_iter): Por defecto, un agente autónomo podría intentar corregirse a sí mismo indefinidamente si no logra el resultado perfecto. Es una práctica recomendada fijar max_iter=5 para evitar consumo desmedido de tokens.
Control de peticiones por minuto (max_rpm): Si utilizas APIs con cuotas de uso gratuitas o limitadas, puedes configurar max_rpm=15 en la definición del Crew para que el orquestador espere automáticamente entre llamadas sin saturar los servicios.
Desactivar delegación cuando no sea necesaria: Al fijar allow_delegation=False, obligas al agente a resolver su propia tarea en lugar de perder tiempo preguntando a sus compañeros, lo que reduce el tiempo de ejecución en más de un 40 %.