CrewAI: Framework de Orquestación Multi-Agente para Python

La guía definitiva de CrewAI -- el framework de orquestación multi-agente basado en roles para Python. Desde conceptos centrales (Agent, Task, Crew, Process) hasta integración de herramientas, sistemas de memoria, Flows API, backends de LLM, patrones avanzados, comparación de frameworks y despliegue en producción con CrewAI+.

CrewAI 1.14+Multi-AgentPythonRole-Based AgentsSequentialHierarchicalFlows APIMemoryToolsMCPOpenAIClaudeOllamaCrewAI+

Por Jose Nobile | Publicado 2026-04-23 | 14 min de lectura

1. ¿Qué es CrewAI?

CrewAI es un framework de código abierto en Python para orquestar agentes autónomos de IA que colaboran como un equipo. Creado por João Moura y lanzado a finales de 2023, modela sistemas multi-agente como equipos de especialistas con roles definidos -- cada agente tiene un rol, una meta y un trasfondo que moldea su comportamiento. Los agentes trabajan juntos en tareas organizadas en procesos secuenciales o jerárquicos, produciendo salidas estructuradas que fluyen a través del pipeline.

La filosofía de diseño central es colaboración basada en roles sobre programación rígida. En lugar de escribir flujo de control explícito para cada decisión, defines agentes con roles y metas en lenguaje natural, les asignas tareas con salidas esperadas y dejas que el framework orqueste su colaboración. Esto hace que CrewAI sea particularmente efectivo para automatización de trabajo intelectual: investigación, creación de contenido, análisis, planificación y cualquier flujo de trabajo donde múltiples especialistas contribuyen a un resultado compartido.

A junio 2026, CrewAI cruzó el hito 1.0 (v1.0.0 lanzada en octubre 2025; la versión actual es 1.14) y tiene más de 53,000 estrellas en GitHub, siendo uno de los frameworks multi-agente más adoptados en el ecosistema Python. El framework soporta cualquier proveedor de LLM (OpenAI, Anthropic Claude, Google Gemini, Ollama, Groq, Azure OpenAI y más), incluye un sistema de memoria integrado, se integra con servidores MCP y herramientas LangChain, y ofrece CrewAI+ -- una plataforma gestionada para despliegue en producción con monitoreo, testing y características empresariales.

USE CASE

Cuándo Usar Multi-Agente

Usa CrewAI cuando tu flujo de trabajo requiere múltiples perspectivas o especializaciones distintas -- investigación + escritura, análisis + revisión, planificación + ejecución. Multi-agente brilla cuando las tareas se benefician de la división del trabajo, cuando diferentes pasos necesitan diferentes configuraciones de LLM, o cuando quieres que los agentes critiquen y refinen el trabajo del otro.

USE CASE

Cuándo un Solo Agente es Suficiente

Si tu flujo de trabajo es un ciclo único de pregunta-respuesta o una cadena lineal de llamadas a herramientas, un solo agente (vía el OpenAI Agents SDK o Claude Agent SDK) es más simple y rápido. CrewAI agrega valor cuando la complejidad de coordinación entre especialistas justifica la sobrecarga de orquestación.

STRENGTH

El Punto Fuerte de CrewAI

CrewAI sobresale en flujos de trabajo multi-paso estructurados donde cada paso tiene un dueño claro: pipelines de contenido (investigar, redactar, editar, publicar), análisis de datos (recopilar, procesar, analizar, reportar), operaciones de cliente (triaje, resolver, seguimiento) y planificación de proyectos (alcance, estimar, programar, asignar).

2. Conceptos Centrales

CORE

Agent

Una unidad autónoma con un rol, meta y trasfondo. Cada agente envuelve un LLM y puede usar herramientas, delegar tareas a otros agentes y mantener memoria. Los agentes son los trabajadores de tu crew -- piensa en ellos como miembros especializados del equipo con experiencia y responsabilidades distintas.

CORE

Task

Una unidad de trabajo asignada a un agente. Cada tarea tiene una descripción, formato de salida esperado y opcionalmente un contexto (lista de otras tareas cuyas salidas alimentan esta). Las tareas son los bloques de construcción de tu flujo de trabajo -- definen qué hay que hacer y cómo debe verse el resultado.

CORE

Crew

El orquestador que une agentes y tareas. Un Crew define qué agentes participan, qué tareas ejecutan, qué tipo de proceso gobierna el orden de ejecución y configuración compartida como memoria, verbosidad y ajustes de LLM. Llamar a crew.kickoff() inicia la orquestación.

CORE

Process

La estrategia de ejecución del crew. Sequential ejecuta tareas una por una en orden. Hierarchical usa un agente manager para delegar tareas dinámicamente. Estos son los dos tipos de proceso que ofrece CrewAI. El tipo de proceso determina cómo fluye la colaboración.

CORE

Tool

Una capacidad que los agentes pueden usar para interactuar con el mundo exterior -- buscar en la web, leer archivos, consultar bases de datos, llamar APIs, ejecutar código. CrewAI soporta herramientas integradas, herramientas de función personalizadas, herramientas LangChain y herramientas de servidores MCP. Las herramientas conectan el razonamiento del LLM con acciones del mundo real.

from crewai import Agent, Task, Crew, Process

# Define agents
researcher = Agent(
    role="Senior Research Analyst",
    goal="Find and synthesize the latest information on {topic}",
    backstory="You are an expert research analyst with 15 years of "
              "experience. You excel at finding patterns in data and "
              "presenting clear, actionable insights.",
    verbose=True
)

writer = Agent(
    role="Technical Writer",
    goal="Write a compelling technical article based on research findings",
    backstory="You are a skilled technical writer who transforms complex "
              "research into clear, engaging content for developers."
)

# Define tasks
research_task = Task(
    description="Research the latest developments in {topic}. "
                "Focus on key trends, major players, and technical details.",
    expected_output="A comprehensive research brief with key findings, "
                    "statistics, and sources.",
    agent=researcher
)

writing_task = Task(
    description="Write a technical article based on the research findings.",
    expected_output="A polished 1500-word technical article with clear "
                    "sections, code examples, and actionable takeaways.",
    agent=writer,
    context=[research_task]  # receives output from research_task
)

# Create and run the crew
crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, writing_task],
    process=Process.sequential,
    verbose=True
)

result = crew.kickoff(inputs={"topic": "multi-agent AI systems"})

3. Diseño de Agentes

El diseño de agentes es la parte más importante de construir crews efectivos. Cada agente se define por tres campos en lenguaje natural que moldean su comportamiento: role (qué es el agente), goal (qué está tratando de lograr) y backstory (contexto que da personalidad y experiencia al agente). Estos campos se inyectan en el prompt del sistema, así que elaborarlos bien es crítico para el rendimiento del agente.

Más allá de los campos de identidad centrales, los agentes aceptan configuración para asignación de LLM (parámetro llm), acceso a herramientas (lista tools), comportamiento de delegación (allow_delegation), límites máximos de iteración (max_iter), tiempo máximo de ejecución (max_execution_time) y configuración de memoria. Puedes asignar diferentes LLMs a diferentes agentes -- usa un modelo potente para tareas de razonamiento complejo y un modelo rápido y económico para extracción de datos simple.

DESIGN

Definición de Rol

El rol es un título de trabajo que establece el dominio de experiencia del agente. Sé específico: "Analista Senior de Datos especializado en mercados financieros" es mejor que "Analista". El rol aparece en el prompt del sistema e influye en cómo el LLM aborda los problemas. Buenos roles crean límites claros entre agentes.

DESIGN

Establecimiento de Metas

La meta le dice al agente qué está tratando de lograr. Las metas deben estar orientadas a resultados, no a procesos: "Producir análisis financiero preciso con recomendaciones accionables" en lugar de "Analizar datos". Las metas soportan interpolación {variable}, adaptándose dinámicamente a cada ejecución del crew.

DESIGN

Elaboración de Trasfondo

El trasfondo proporciona contexto y personalidad. Ancla al agente en una identidad profesional realista, lo que mejora la calidad de salida. Incluye experiencia relevante, estilo de trabajo y conocimiento del dominio. Trasfondos de 2-4 oraciones funcionan bien -- suficiente para establecer experiencia sin saturar la ventana de contexto.

CONFIG

Asignación de LLM

Cada agente puede usar un LLM diferente vía el parámetro llm. Pasa una cadena de modelo como "openai/gpt-5.5", "anthropic/claude-sonnet-4-6" u "ollama/llama3.2". Esto te permite optimizar costo y calidad: modelos caros para agentes de razonamiento pesado, modelos rápidos para agentes de extracción o formateo de datos.

CONFIG

Control de Delegación

Cuando allow_delegation=True (por defecto), un agente puede pedir a otros agentes del crew que ayuden con sub-tareas. Esto habilita colaboración emergente donde un escritor pide más datos a un investigador. Establece allow_delegation=False para mantener agentes estrictamente independientes, reduciendo uso de tokens y tiempo de ejecución.

CONFIG

Límites de Ejecución

Usa max_iter (por defecto 20) para limitar el número de iteraciones de razonamiento por tarea, previniendo bucles infinitos. Usa max_execution_time (en segundos) para establecer un límite de tiempo duro. Usa max_rpm para limitar llamadas API por minuto. Estos guardrails previenen costos descontrolados y aseguran ejecución predecible.

from crewai import Agent, LLM

# Agent with specific LLM and configuration
analyst = Agent(
    role="Senior Financial Analyst",
    goal="Produce accurate financial analysis with actionable "
         "investment recommendations for {company}",
    backstory="You are a CFA charterholder with 20 years of experience "
              "in equity research. You specialize in technology sector "
              "analysis and are known for your rigorous, data-driven "
              "approach to valuation.",
    llm=LLM(model="anthropic/claude-sonnet-4-6", temperature=0.1),
    tools=[financial_data_tool, sec_filing_tool],
    allow_delegation=False,
    max_iter=15,
    max_execution_time=300,  # 5 minutes
    verbose=True
)

# YAML-based agent definition (config/agents.yaml)
# researcher:
#   role: "Senior Research Analyst"
#   goal: "Find comprehensive information on {topic}"
#   backstory: "Expert researcher with deep domain knowledge."
#   llm: openai/gpt-5.5
#   max_iter: 10

4. Definición de Tareas

Las tareas son las unidades de trabajo en CrewAI. Cada tarea tiene una description (qué hacer), un expected_output (cómo debe verse el resultado) y un agent (quién lo hace). La descripción y expected_output soportan interpolación {variable}, así que puedes parametrizar tareas en tiempo de ejecución vía crew.kickoff(inputs={...}).

El parámetro context crea dependencias de datos entre tareas. Cuando una tarea lista otras tareas en su contexto, recibe sus salidas como entrada adicional. Así es como la información fluye a través de un crew: la salida del investigador alimenta al escritor, la salida del escritor alimenta al editor. El contexto crea un DAG (grafo acíclico dirigido) de dependencias de tareas que CrewAI resuelve automáticamente.

TASK

Mejores Prácticas de Descripción

Escribe descripciones claras y específicas que le digan al agente exactamente qué hacer. Incluye restricciones, límites de alcance y criterios de calidad. Malo: "Investigar IA". Bueno: "Investigar los top 5 frameworks de orquestación multi-agente lanzados en 2025-2026, comparando su arquitectura, adopción y preparación para producción."

TASK

Salida Esperada

El campo expected_output es crítico -- le dice al agente exactamente qué formato y contenido producir. Sé preciso: "Un objeto JSON con claves: frameworks (array de objetos con nombre, arquitectura, estrellas, pros, contras)" es mejor que "Un resumen". Usa output_json u output_pydantic para validación estructurada.

TASK

Encadenamiento de Contexto

El contexto crea flujo de datos entre tareas. Una tarea con context=[task_a, task_b] recibe las salidas de ambas tareas como entrada adicional. Esto crea un pipeline donde cada etapa construye sobre resultados previos. El contexto funciona tanto en procesos secuenciales como jerárquicos.

TASK

Ejecución Asíncrona

Establece async_execution=True para ejecutar una tarea concurrentemente con la siguiente en la secuencia. Útil cuando las tareas son independientes y pueden correr en paralelo -- por ejemplo, investigar dos temas diferentes simultáneamente. El crew espera a que todas las tareas async completen antes de pasar a tareas dependientes.

TASK

Salida Estructurada

Usa output_json=MyModel u output_pydantic=MyModel para forzar validación de salida estructurada con modelos Pydantic. La salida del agente se parsea y valida contra el esquema. Si la validación falla, el agente reintenta con feedback sobre qué salió mal. Esto asegura salidas confiables y legibles por máquina.

TASK

Callbacks de Tareas

Adjunta una función callback a cualquier tarea para ejecutar lógica personalizada cuando la tarea completa. Los callbacks reciben la salida de la tarea y pueden disparar efectos secundarios: guardar en base de datos, enviar notificaciones, actualizar dashboards o alimentar resultados a sistemas externos.

from crewai import Task
from pydantic import BaseModel
from typing import List

# Structured output model
class ResearchReport(BaseModel):
    topic: str
    key_findings: List[str]
    recommendations: List[str]
    confidence_score: float

# Task with structured output and context
research_task = Task(
    description="Research {topic} and produce a structured analysis. "
                "Focus on: current state, key trends, major players, "
                "and technical challenges. Use available search tools.",
    expected_output="A structured research report with key findings, "
                    "actionable recommendations, and confidence score.",
    agent=researcher,
    output_pydantic=ResearchReport
)

# Async tasks that run in parallel
market_task = Task(
    description="Analyze market trends for {topic}.",
    expected_output="Market analysis with growth projections.",
    agent=market_analyst,
    async_execution=True
)

tech_task = Task(
    description="Analyze technical landscape for {topic}.",
    expected_output="Technical analysis with architecture comparisons.",
    agent=tech_analyst,
    async_execution=True
)

# Task with callback
def save_report(output):
    with open("report.md", "w") as f:
        f.write(output.raw)
    print(f"Report saved: {len(output.raw)} characters")

final_task = Task(
    description="Synthesize all research into a final report.",
    expected_output="A comprehensive report combining all analyses.",
    agent=writer,
    context=[market_task, tech_task],
    callback=save_report
)

5. Tipos de Proceso

El tipo de proceso determina cómo CrewAI orquesta la ejecución de tareas. CrewAI ofrece exactamente dos tipos de proceso -- secuencial y jerárquico. Elegir el correcto depende de las necesidades de coordinación de tu flujo de trabajo: pipelines predecibles usan secuencial, mientras que la delegación compleja y dinámica usa jerárquico.

PROCESS

Proceso Secuencial

Las tareas se ejecutan una tras otra en el orden listado. La salida de cada tarea está disponible como contexto para tareas subsiguientes. Este es el proceso por defecto y el más simple de razonar. Mejor para flujos de trabajo lineales: investigar, luego escribir, luego editar. Orden de ejecución predecible, costos predecibles, fácil de depurar.

PROCESS

Proceso Jerárquico

Un agente manager (creado automáticamente o personalizado) recibe todas las tareas y las delega al agente más apropiado basándose en sus roles y metas. El manager puede reasignar tareas, solicitar revisiones y coordinar el flujo de trabajo dinámicamente. Requiere un manager_llm o manager_agent. Mejor para flujos de trabajo complejos donde la asignación de tareas depende de resultados intermedios.

from crewai import Crew, Process

# Sequential: tasks run in listed order
sequential_crew = Crew(
    agents=[researcher, writer, editor],
    tasks=[research_task, writing_task, editing_task],
    process=Process.sequential,
    verbose=True
)

# Hierarchical: manager delegates to agents
hierarchical_crew = Crew(
    agents=[researcher, writer, editor],
    tasks=[research_task, writing_task, editing_task],
    process=Process.hierarchical,
    manager_llm="openai/gpt-5.5",  # LLM for the auto-created manager
    verbose=True
)

# Hierarchical with custom manager
manager = Agent(
    role="Project Manager",
    goal="Coordinate the team to produce the highest quality output",
    backstory="Experienced PM who excels at delegating tasks to the "
              "right specialists and ensuring quality standards.",
    allow_delegation=True
)

custom_manager_crew = Crew(
    agents=[researcher, writer, editor],
    tasks=[research_task, writing_task, editing_task],
    process=Process.hierarchical,
    manager_agent=manager,
    verbose=True
)

6. Integración de Herramientas

TOOLS

Herramientas Integradas

CrewAI viene con crewai-tools, un paquete de herramientas listas para usar: SerperDevTool (búsqueda web), ScrapeWebsiteTool (web scraping), FileReadTool, DirectoryReadTool, PDFSearchTool, CSVSearchTool, CodeInterpreterTool, YoutubeVideoSearchTool y más. Instala con pip install crewai-tools.

TOOLS

Herramientas Personalizadas

Construye herramientas personalizadas subclaseando BaseTool o usando el decorador @tool. El enfoque del decorador es más simple -- anota una función con @tool, agrega type hints y un docstring, y CrewAI auto-genera el esquema. Las herramientas personalizadas pueden acceder a APIs, bases de datos, sistemas de archivos o cualquier biblioteca Python.

TOOLS

Herramientas LangChain

Cualquier herramienta de LangChain funciona directamente con agentes CrewAI. El framework envuelve herramientas LangChain de forma transparente, dándote acceso a todo el ecosistema de herramientas LangChain -- 700+ integraciones cubriendo bases de datos, APIs, servicios cloud y capacidades especializadas de IA.

TOOLS

Herramientas de Servidor MCP

CrewAI se integra con servidores Model Context Protocol (MCP), dando a los agentes acceso al ecosistema creciente de herramientas MCP. Conecta cualquier servidor MCP (sistemas de archivos, GitHub, bases de datos, Slack, servidores personalizados) y sus herramientas quedan disponibles para tus agentes automáticamente.

TOOLS

Herramientas RAG

Las herramientas RAG integradas permiten a los agentes buscar a través de documentos, PDFs, CSVs y sitios web semánticamente. El PDFSearchTool, CSVSearchTool y DirectorySearchTool usan embeddings para búsqueda semántica sobre archivos locales. Para bases de conocimiento personalizadas, usa el RagTool con tu propio almacén vectorial.

TOOLS

Ejecución de Código

El CodeInterpreterTool da a los agentes la capacidad de escribir y ejecutar código Python en un entorno aislado. Los agentes pueden realizar cálculos, generar visualizaciones, procesar datos y ejecutar experimentos -- conectando el razonamiento con la computación.

from crewai.tools import tool, BaseTool
from crewai_tools import SerperDevTool, ScrapeWebsiteTool

# Built-in tools
search = SerperDevTool()
scraper = ScrapeWebsiteTool()

# Custom tool with decorator
@tool("Database Query")
def query_database(sql: str) -> str:
    """Execute a SQL query against the analytics database and return results.
    Use standard SQL syntax. Tables: users, orders, products, events."""
    import sqlite3
    conn = sqlite3.connect("analytics.db")
    result = conn.execute(sql).fetchall()
    conn.close()
    return str(result)

# Custom tool with class
class GitHubTool(BaseTool):
    name: str = "GitHub PR Reviewer"
    description: str = "Fetch and analyze pull request details from GitHub"

    def _run(self, repo: str, pr_number: int) -> str:
        import requests
        resp = requests.get(
            f"https://api.github.com/repos/{repo}/pulls/{pr_number}",
            headers={"Authorization": f"token {self.api_key}"}
        )
        pr = resp.json()
        return f"PR #{pr_number}: {pr['title']} ({pr['state']}, "  \
               f"+{pr['additions']}/-{pr['deletions']})"

# Assign tools to agents
researcher = Agent(
    role="Research Analyst",
    goal="Find accurate, up-to-date information",
    backstory="Expert researcher with strong analytical skills.",
    tools=[search, scraper, query_database]
)

7. Sistema de Memoria

CrewAI incluye un sistema de memoria multicapa que da a los agentes la capacidad de aprender y retener información a través de tareas y ejecuciones del crew. La memoria está deshabilitada por defecto y se habilita con memory=True en el Crew. Cuando está habilitada, los agentes pueden recordar interacciones previas, construir conocimiento de entidades y mejorar su rendimiento con el tiempo.

MEMORY

Memoria a Corto Plazo

Almacena información dentro de la ejecución actual del crew. La memoria a corto plazo se comparte entre agentes del crew, permitiéndoles referenciar las salidas recientes del otro y mantener coherencia a lo largo del flujo de trabajo. Implementada usando RAG con embeddings para recuperación eficiente. Poblada automáticamente desde salidas de tareas.

MEMORY

Memoria a Largo Plazo

Persiste a través de ejecuciones del crew usando una base de datos SQLite local. La memoria a largo plazo almacena resultados de tareas, estrategias exitosas y patrones aprendidos. Con el tiempo, los agentes desarrollan conocimiento institucional -- recuerdan qué funcionó antes y aplican esas lecciones a nuevas tareas. Esto crea un efecto volante donde el rendimiento del crew mejora con el uso.

MEMORY

Memoria de Entidades

Rastrea conocimiento sobre entidades específicas (personas, organizaciones, proyectos, conceptos) a través de interacciones. Cuando un agente encuentra información sobre una entidad, se almacena y puede recordarse en interacciones futuras. Esto permite a los agentes construir un grafo de conocimiento del dominio en el que trabajan.

MEMORY

Backends de Almacenamiento Personalizados

Sobreescribe el almacenamiento por defecto con backends personalizados implementando la interfaz de proveedor de memoria. Usa almacenes vectoriales externos (Pinecone, Weaviate, Qdrant, ChromaDB), bases de datos cloud o sistemas de gestión de conocimiento empresarial como respaldo para cualquier capa de memoria.

from crewai import Crew

# Enable memory with default storage
crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, writing_task],
    memory=True,           # enables all memory layers
    verbose=True
)

# Custom memory configuration
crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, writing_task],
    memory=True,
    embedder={
        "provider": "openai",
        "config": {
            "model": "text-embedding-3-small"
        }
    },
    long_term_memory=LongTermMemory(
        storage=LTMSQLiteStorage(db_path="./crew_memory.db")
    ),
    short_term_memory=ShortTermMemory(
        storage=RAGStorage(
            embedder_config={
                "provider": "openai",
                "config": {"model": "text-embedding-3-small"}
            }
        )
    ),
    entity_memory=EntityMemory(
        storage=RAGStorage(
            embedder_config={
                "provider": "openai",
                "config": {"model": "text-embedding-3-small"}
            }
        )
    )
)

8. API de Flows

La API de Flows es la abstracción de nivel superior de CrewAI para construir flujos de trabajo con estado y dirigidos por eventos que coordinan múltiples crews y operaciones externas. Mientras los Crews manejan colaboración multi-agente en un conjunto de tareas, los Flows manejan la orquestación de múltiples crews, lógica condicional, gestión de estado e integración con sistemas externos en pipelines complejos.

Los Flows usan una sintaxis basada en decoradores: @start() marca el punto de entrada, @listen() conecta métodos que reaccionan a eventos (salidas de otros métodos) y @router() implementa ramificación condicional basada en estado o resultados. El Flow mantiene estado tipado a través de todos los pasos, facilitando construir flujos de trabajo complejos, multi-etapa con flujo de datos claro.

FLOWS

Decorador @start()

Marca un método como punto de entrada del flow. Cuando se llama a flow.kickoff(), todos los métodos @start() se ejecutan. Puedes tener múltiples métodos start para ejecutar pasos de inicialización en paralelo. Los métodos start configuran estado que los listeners downstream consumen.

FLOWS

Decorador @listen()

Conecta un método a un evento upstream. Cuando el método upstream completa, el listener se ejecuta con el valor de retorno del upstream como entrada. Múltiples listeners pueden reaccionar al mismo evento, habilitando patrones fan-out. Los listeners también pueden escuchar a otros listeners, creando pipelines multi-etapa.

FLOWS

Decorador @router()

Implementa ramificación condicional. Un método router inspecciona el estado actual o la salida upstream y devuelve un nombre de ruta. Los listeners downstream anotados con la ruta coincidente se disparan. Esto habilita lógica if/else, bucles de reintento y adaptación dinámica del flujo de trabajo basada en resultados intermedios.

FLOWS

Gestión de Estado

Los Flows mantienen estado tipado vía un modelo Pydantic. El estado es accesible a todos los métodos vía self.state y persiste a través de toda la ejecución del flow. Las actualizaciones de estado son atómicas y rastreadas, facilitando depurar y auditar el comportamiento del flow. El estado se puede serializar para persistencia y reanudación.

from crewai.flow.flow import Flow, listen, start, router
from pydantic import BaseModel

class ContentPipelineState(BaseModel):
    topic: str = ""
    research: str = ""
    draft: str = ""
    quality_score: float = 0.0
    final_content: str = ""

class ContentPipeline(Flow[ContentPipelineState]):

    @start()
    def gather_topic(self):
        self.state.topic = "Multi-Agent AI Orchestration"
        return self.state.topic

    @listen(gather_topic)
    def research_phase(self, topic):
        # Run a research crew
        research_crew = Crew(
            agents=[researcher],
            tasks=[research_task],
            verbose=True
        )
        result = research_crew.kickoff(inputs={"topic": topic})
        self.state.research = result.raw
        return result.raw

    @listen(research_phase)
    def writing_phase(self, research):
        # Run a writing crew
        writing_crew = Crew(
            agents=[writer, editor],
            tasks=[writing_task, editing_task],
            process=Process.sequential
        )
        result = writing_crew.kickoff(
            inputs={"research": research}
        )
        self.state.draft = result.raw
        return result.raw

    @router(writing_phase)
    def quality_check(self, draft):
        # Evaluate quality and decide next step
        score = evaluate_quality(draft)
        self.state.quality_score = score
        if score >= 0.8:
            return "publish"
        return "revise"

    @listen("publish")
    def publish(self):
        self.state.final_content = self.state.draft
        return f"Published: {len(self.state.final_content)} chars"

    @listen("revise")
    def revise(self):
        # Re-run writing with feedback
        return self.writing_phase(self.state.research)

# Run the flow
flow = ContentPipeline()
result = flow.kickoff()

9. Backends de LLM

LLM

OpenAI

El backend por defecto. Soporta GPT-5.5, GPT-5.4 y las variantes GPT-5.4 mini y nano. Establece OPENAI_API_KEY y usa cadenas de modelo como "openai/gpt-5.5". Soporta llamado de funciones, salidas estructuradas y streaming. Mejor soporte general del ecosistema e integración más probada en batalla.

LLM

Anthropic Claude

Soporte completo para Claude Fable 5, Opus, Sonnet y Haiku vía "anthropic/claude-sonnet-4-6". Establece ANTHROPIC_API_KEY. Claude sobresale en análisis de contexto largo, generación de código y razonamiento matizado. Ideal para agentes que necesitan procesar documentos largos o producir contenido escrito de alta calidad.

LLM

Ollama (Modelos Locales)

Ejecuta agentes localmente con modelos de código abierto vía Ollama. Usa "ollama/llama3.2", "ollama/mistral" u "ollama/deepseek-r1". Establece OPENAI_API_BASE=http://localhost:11434. Mejor para desarrollo, cargas de trabajo sensibles a privacidad y operación sin conexión. Sin costos de API pero requiere recursos GPU locales.

LLM

Azure OpenAI

Despliegue empresarial vía Azure OpenAI Service. Usa "azure/tu-nombre-de-despliegue" con AZURE_API_KEY, AZURE_API_BASE y AZURE_API_VERSION. Proporciona seguridad empresarial, cumplimiento y requisitos de residencia de datos. Los mismos modelos que OpenAI con la capa de gobernanza de Azure.

LLM

Groq

Inferencia ultra-rápida para agentes que necesitan baja latencia. Usa "groq/llama-3.3-70b-versatile" con GROQ_API_KEY. El hardware LPU personalizado de Groq entrega tiempos de respuesta sub-segundo, ideal para agentes de triaje, tareas de clasificación y pipelines en tiempo real donde la velocidad importa más que la capacidad máxima del modelo.

LLM

Estrategia de LLM Mixta

El patrón más efectivo: asigna diferentes LLMs a diferentes agentes según sus necesidades. Usa GPT-5.5, Claude Fable 5 o Claude Opus 5 para agentes de razonamiento complejo, Llama en Groq para agentes de triaje rápido y GPT-5.4 mini para tareas de formateo o extracción. Esto optimiza tanto costo como calidad a través del crew.

from crewai import Agent, LLM

# OpenAI agent
planner = Agent(
    role="Strategic Planner",
    goal="Create comprehensive project plans",
    backstory="Expert strategist.",
    llm=LLM(model="openai/gpt-5.5", temperature=0.2)
)

# Claude agent for long-context analysis
analyst = Agent(
    role="Document Analyst",
    goal="Analyze lengthy technical documents",
    backstory="Expert at processing dense technical content.",
    llm=LLM(model="anthropic/claude-sonnet-4-6", temperature=0.1)
)

# Groq agent for fast classification
triager = Agent(
    role="Request Triager",
    goal="Quickly classify and route incoming requests",
    backstory="Fast, accurate classification specialist.",
    llm=LLM(model="groq/llama-3.3-70b-versatile", temperature=0.0)
)

# Local Ollama agent for privacy-sensitive tasks
local_agent = Agent(
    role="PII Processor",
    goal="Process documents containing sensitive personal data",
    backstory="Privacy-first document processor.",
    llm=LLM(
        model="ollama/llama3.2",
        base_url="http://localhost:11434"
    )
)

10. Patrones Avanzados

PATTERN

Humano en el Bucle

Establece human_input=True en una tarea para pausar la ejecución y solicitar feedback humano antes de finalizar la salida. El humano puede aprobar, rechazar o proporcionar correcciones. Esencial para flujos de trabajo de alto impacto donde las salidas del agente necesitan validación humana antes de proceder a tareas downstream.

PATTERN

Callbacks de Paso

Registra step_callback en el Crew para recibir notificaciones después de cada paso de razonamiento del agente. Los callbacks reciben la salida del paso y pueden registrar, filtrar o transformar resultados intermedios. Usa esto para monitoreo en tiempo real, seguimiento de progreso, contabilidad de costos y lógica de aborto personalizada.

PATTERN

Guardrails de Salida

Combina output_pydantic con lógica de validación personalizada para forzar estándares de calidad en las salidas de los agentes. Si la salida falla la validación, CrewAI reintenta automáticamente con feedback. Capa de validación Pydantic, validadores personalizados y callbacks de post-procesamiento para control de calidad en profundidad.

PATTERN

Tareas Condicionales

Usa la clase dedicada ConditionalTask con una función condition para hacer condicional la ejecución de una tarea. La función recibe el TaskOutput de la tarea anterior y devuelve un booleano -- si devuelve false, la tarea se omite. Esto habilita flujos de trabajo dinámicos donde ciertos pasos solo se ejecutan cuando se cumplen criterios específicos.

PATTERN

Orquestación de Pipeline

Usa Pipeline para encadenar múltiples crews en flujos de trabajo multi-etapa. Cada etapa es un crew que procesa entradas y produce salidas para la siguiente etapa. Los pipelines soportan etapas paralelas (múltiples crews corriendo concurrentemente) y lógica de enrutamiento entre etapas. Esto escala CrewAI de un solo crew a orquestación de grado empresarial.

PATTERN

Entrenamiento y Testing

Usa crew.train(n_iterations=5) para ejecutar el crew múltiples veces con feedback humano, construyendo datos de entrenamiento que mejoran el rendimiento del agente. Usa crew.test(n_iterations=3) para hacer benchmark de las salidas del crew contra criterios de calidad. El ciclo de entrenamiento crea un ciclo de feedback que ajusta el comportamiento del agente con el tiempo.

from crewai import Task, Crew

# Human-in-the-loop task
review_task = Task(
    description="Review the generated report for accuracy.",
    expected_output="A validated, human-approved report.",
    agent=editor,
    human_input=True  # pauses for human feedback
)

# Conditional task -- skipped when the condition returns False
from crewai.tasks.conditional_task import ConditionalTask
from crewai.tasks.task_output import TaskOutput

def enough_data(output: TaskOutput) -> bool:
    # inspect the previous task's output; skip deep analysis if it's thin
    return len(output.raw) > 100

advanced_analysis = ConditionalTask(
    description="Perform deep statistical analysis on the data.",
    expected_output="Statistical analysis with confidence intervals.",
    agent=statistician,
    condition=enough_data
)

# Step callback for monitoring
def monitor_step(step_output):
    print(f"Agent: {step_output.agent}")
    print(f"Action: {step_output.action}")
    print(f"Output: {step_output.result[:200]}...")

crew = Crew(
    agents=[researcher, analyst, writer],
    tasks=[research_task, analysis_task, writing_task],
    step_callback=monitor_step,
    verbose=True
)

# Training loop with human feedback
crew.train(
    n_iterations=5,
    filename="training_data.pkl",
    inputs={"topic": "AI agents"}
)

# Test and benchmark
crew.test(
    n_iterations=3,
    openai_model_name="gpt-5.5",
    inputs={"topic": "AI agents"}
)

11. Comparación de Frameworks

El panorama de frameworks multi-agente en 2026 incluye varios jugadores principales. Cada framework hace diferentes compromisos entre nivel de abstracción, flexibilidad y preparación para producción. La elección correcta depende de la complejidad de tu flujo de trabajo, experiencia del equipo y requisitos de despliegue.

Dimensión CrewAI AutoGen LangGraph Claude Agent SDK OpenAI Agents SDK
Enfoque Role-based crews Conversational agents Graph-based state machines Tool-first agents Handoff-based pipelines
Nivel de Abstracción High (role/goal/backstory) Medium (chat patterns) Low (nodes/edges/state) Medium (tools/prompts) Medium (agents/handoffs)
Lenguaje Python Python, .NET Python, TypeScript Python, TypeScript Python
Dependencia de Modelo None (any LLM) None (any LLM) None (any LLM) Claude-optimized OpenAI-optimized
Memoria Built-in (3 layers) Conversation history Checkpointing Session-based Sessions + compaction
Gestión de Estado Flows API Chat history TypedDict/Pydantic RunContext RunContextWrapper
Observabilidad CrewAI+, callbacks AutoGen Studio LangSmith Tracing API OpenAI Traces
Mejor Para Structured team workflows Multi-turn conversations Complex stateful agents Computer-use, coding Rapid multi-agent dev

CrewAI sobresale cuando necesitas colaboración de equipo estructurada con roles claros -- tiene el nivel de abstracción más alto, haciendo que sea el más rápido para prototipar flujos de trabajo multi-agente. AutoGen (Microsoft) es más fuerte para patrones conversacionales multi-turno donde los agentes debaten y refinan salidas. LangGraph ofrece el mayor control con máquinas de estado basadas en grafos explícitos, ideal para flujos de trabajo complejos que necesitan checkpointing y depuración con viaje en el tiempo. Claude Agent SDK tiene el acceso más profundo al sistema con herramientas integradas de archivos y shell. OpenAI Agents SDK proporciona el camino más simple a multi-agente con abstracciones mínimas y ejecución en sandbox.

12. Despliegue en Producción

Llevar CrewAI de prototipo a producción requiere abordar confiabilidad, monitoreo, manejo de errores, control de costos y escalamiento. CrewAI+ (la plataforma gestionada) maneja muchas de estas preocupaciones, pero despliegues auto-hospedados necesitan infraestructura explícita alrededor del framework.

DEPLOY

Plataforma CrewAI+

La plataforma de despliegue gestionada para CrewAI. Despliega crews como endpoints API con monitoreo integrado, logging, visualización de traces y analítica de rendimiento de crews. CrewAI+ maneja escalamiento, recuperación de errores y proporciona un dashboard para seguimiento de ejecución en tiempo real. El tier empresarial incluye SSO, logs de auditoría y enrutamiento personalizado de LLM.

DEPLOY

Monitoreo y Logging

Usa step_callback y task_callback para capturar telemetría de ejecución. Registra pasos de razonamiento de agentes, invocaciones de herramientas, uso de tokens y datos de tiempo. Exporta a plataformas de observabilidad (Datadog, Grafana, dashboards personalizados) para alertas de producción sobre fallos de ejecución, picos de costo y degradación de calidad.

DEPLOY

Manejo de Errores

Establece max_iter y max_execution_time en agentes para prevenir bucles infinitos. Usa output_pydantic para validación de esquema con reintentos automáticos. Envuelve crew.kickoff() en bloques try/except con backoff exponencial para errores transitorios de API. Registra ejecuciones fallidas con contexto completo para depuración.

DEPLOY

Optimización de Costos

Usa estrategias de LLM mixtas: modelos caros para agentes de razonamiento pesado, modelos económicos para extracción y formateo. Establece max_rpm para limitar llamadas API. Deshabilita allow_delegation en agentes que no lo necesitan (reduce uso de tokens por sobrecarga de delegación). Monitora uso de tokens por agente por tarea para identificar objetivos de optimización.

DEPLOY

Patrones de Escalamiento

Para alto throughput, ejecuta crews en procesos workers con colas de tareas (Celery, Redis Queue o Temporal). Cada ejecución de crew es stateless (a menos que use memoria), así que el escalamiento horizontal es directo. Usa la API de Flows para orquestar múltiples crews a través de workers distribuidos para pipelines empresariales complejos.

DEPLOY

Estrategias de Testing

Usa crew.test() para benchmarking automatizado de calidad. Escribe tests unitarios para herramientas individuales y callbacks personalizados. Haz tests de integración de ejecuciones completas de crew con LLMs mock para validar lógica de pipeline sin costos de API. Usa el ciclo de entrenamiento para recopilar salidas validadas por humanos como fixtures de tests de regresión.

# Production deployment with error handling and monitoring
import logging
from crewai import Crew
from tenacity import retry, stop_after_attempt, wait_exponential

logger = logging.getLogger("crewai_production")

@retry(
    stop=stop_after_attempt(3),
    wait=wait_exponential(multiplier=1, min=4, max=60)
)
def run_crew_with_retries(crew, inputs):
    try:
        result = crew.kickoff(inputs=inputs)
        logger.info(
            f"Crew completed: {result.token_usage}"
        )
        return result
    except Exception as e:
        logger.error(f"Crew execution failed: {e}")
        raise

# Deploy as API endpoint (FastAPI example)
from fastapi import FastAPI, BackgroundTasks
app = FastAPI()

@app.post("/api/analyze")
async def analyze(topic: str, background_tasks: BackgroundTasks):
    crew = Crew(
        agents=[researcher, analyst, writer],
        tasks=[research_task, analysis_task, report_task],
        process=Process.sequential,
        memory=True,
        max_rpm=30  # rate limit across all agents
    )
    background_tasks.add_task(
        run_crew_with_retries, crew, {"topic": topic}
    )
    return {"status": "processing", "topic": topic}

# CLI deployment with CrewAI+
# crewai deploy    -- deploys to CrewAI+ platform
# crewai monitor   -- real-time crew monitoring
# crewai logs      -- view execution logs

Primeros Pasos

CrewAI requiere Python 3.10 a 3.13 (3.14 aún no está soportado). Instala con pip y crea tu primer crew en minutos.

# Install CrewAI and tools
pip install crewai crewai-tools

# Create a new project with the CLI
crewai create crew my_project
cd my_project

# Configure agents in config/agents.yaml
# Configure tasks in config/tasks.yaml
# Run the crew
crewai run
# Minimal crew -- your first multi-agent workflow
from crewai import Agent, Task, Crew

researcher = Agent(
    role="Researcher",
    goal="Find accurate information on {topic}",
    backstory="Expert research analyst."
)

writer = Agent(
    role="Writer",
    goal="Write clear, engaging content based on research",
    backstory="Skilled technical writer."
)

research = Task(
    description="Research {topic} thoroughly.",
    expected_output="Comprehensive research brief.",
    agent=researcher
)

article = Task(
    description="Write an article based on the research.",
    expected_output="A polished 1000-word article.",
    agent=writer,
    context=[research]
)

crew = Crew(agents=[researcher, writer], tasks=[research, article])
result = crew.kickoff(inputs={"topic": "CrewAI multi-agent orchestration"})
print(result)

Para uso en producción, configura tus claves de API de LLM como variables de entorno, habilita memoria para aprendizaje entre ejecuciones y usa la API de Flows para orquestación multi-crew compleja. La documentación oficial en docs.crewai.com cubre todos los conceptos, integraciones y patrones avanzados en profundidad.

Tecnologías Relacionadas