Sistemas multi‑agente autónomos con CrewAI, Ollama y Python: guía práctica con IA local paso a paso
Aprende a construir equipos de agentes IA autónomos que investigan, analizan y generan informes sin intervención humana. Todo con herramientas gratuitas y ejecutado localmente en tu propio hardware. Ideal para automatizar flujos de trabajo complejos con Python, CrewAI y modelos open source.
Por Equipo Starbyte
Sistemas multi‑agente autónomos con CrewAI, Ollama y Python: guía práctica con IA local paso a paso
Problema real: Tienes tareas recurrentes que requieren varios pasos de análisis y razonamiento. Le pides a un LLM que investigue un tema, pero la respuesta es genérica y carece de profundidad. Intentas encadenar prompts manualmente para generar un informe completo, pero el resultado es inconsistente y pierdes horas refinando cada iteración. Un modelo único, por muy potente que sea, intenta cumplir todos los roles a la vez y fracasa cuando la complejidad crece.
La solución es un sistema multi‑agente: varios agentes de IA especializados, cada uno con un rol concreto, que colaboran como lo haría un equipo humano. En esta guía aprenderás a construir uno de esos sistemas con CrewAI, Ollama y Python, ejecutándolo completamente en local sin necesidad de API en la nube. Al terminar tendrás un flujo de trabajo autónomo que investiga, analiza y genera informes estructurados, listo para producción.
Requisitos previos
- Python 3.10 o superior.
- Un PC o laptop con al menos 16 GB de RAM (8 GB para modelos pequeños) y preferiblemente GPU con 8 GB de VRAM para inferencia local.
- Ollama instalado y funcionando (necesitarás al menos un modelo como
qwen3.5:latestollama3.1:8b). - Conexión a internet (para descargar dependencias y, opcionalmente, búsquedas web con herramientas).
- Editor de código (VS Code recomendado) y terminal.
1. El problema del agente único y por qué necesitas multi‑agente
Un agente único con 15 herramientas y un prompt kilométrico es como contratar a una sola persona para ser investigador, escritor, editor y verificador de datos al mismo tiempo. La ventana de contexto se contamina, el modelo pierde el foco y la selección de herramientas se vuelve caótica.
Andrew Ng lo explica con sus cuatro patrones de diseño agéntico: reflexión, uso de herramientas, planificación y colaboración multi‑agente. La colaboración entre agentes especializados produce un salto de calidad, no una mejora incremental.
En lugar de eso, CrewAI te permite definir agentes con roles, objetivos, herramientas y memoria. Los organizas en un equipo (crew) que ejecuta tareas secuenciales o jerárquicas y cada agente hace lo que mejor sabe hacer.
2. Instalación de CrewAI y configuración del entorno
2.1 Instalar el framework
CrewAI es un framework Python sin dependencia de LangChain, ligero y enfocado en entornos de producción. Se instala con pip:
# Instalación básica
pip install crewai
# Con el paquete de herramientas (recomendado)
pip install 'crewai[tools]'
# Verifica la versión
python -c "import crewai; print(crewai.__version__)"
CrewAI también ofrece una CLI para crear proyectos desde cero:
# Instalar uv (gestor de paquetes rápido, opcional pero recomendado)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Crear un nuevo proyecto
crewai create crew mi_equipo_ia
cd mi_equipo_ia
# Instalar dependencias del proyecto
crewai install
La estructura generada es:
mi_equipo_ia/
├── pyproject.toml
├── README.md
└── src/
└── mi_equipo_ia/
├── __init__.py
├── main.py
├── crew.py
├── config/
│ ├── agents.yaml
│ └── tasks.yaml
└── tools/
├── __init__.py
└── custom_tool.py
3. Conectar CrewAI con Ollama para ejecución 100 % local
Por defecto CrewAI se conecta a OpenAI, pero puedes redirigir todo el tráfico a tu modelo local con Ollama. Esto te da privacidad total y cero costes de API.
3.1 Verifica que Ollama esté corriendo
ollama list
# Deberías ver al menos un modelo, por ejemplo:
# qwen3.5:latest 6488c96fa5fa 6.6 GB ...
Si no está corriendo, inicia el servicio:
ollama serve
3.2 Configurar el LLM local en CrewAI
En tu script de Python, en lugar de usar ChatOpenAI, usas ChatOllama:
from crewai import Agent, Task, Crew, Process
from crewai import LLM
# Configurar el LLM local
llm_local = LLM(
model="ollama/qwen3.5:latest",
base_url="http://localhost:11434",
temperature=0.7
)
Cada agente que crees usará este LLM en lugar de la API de OpenAI. También puedes configurarlo mediante variables de entorno en un archivo .env:
OPENAI_API_KEY=no-necesaria
OPENAI_API_BASE=http://localhost:11434/v1
OPENAI_MODEL_NAME=qwen3.5:latest
Y luego en el código:
from crewai import Agent
agente = Agent(
role="Investigador",
goal="Buscar información verificada",
backstory="Eres un investigador con 15 años de experiencia.",
llm=llm_local,
verbose=True
)
4. Construir tu primer equipo multi‑agente: investigador, escritor y editor
Vamos a crear tres agentes que trabajen en secuencia para generar un informe técnico sobre un tema de actualidad.
4.1 Definir los agentes
Creamos un archivo crew.py en el directorio src/mi_equipo_ia/:
from crewai import Agent, Task, Crew, Process
from crewai import LLM
from crewai_tools import SerperDevTool
# LLM local
llm = LLM(model="ollama/qwen3.5:latest",
base_url="http://localhost:11434",
temperature=0.7)
# Herramienta de búsqueda web (necesita API key gratuita de Serper)
busqueda = SerperDevTool()
# Agente investigador
investigador = Agent(
role="Investigador Senior de Tecnología",
goal="Investigar los últimos avances en {tema} con fuentes verificables",
backstory=(
"Eres un investigador con 20 años de experiencia en análisis tecnológico. "
"Tu especialidad es encontrar información precisa, contrastar fuentes "
"y detectar tendencias emergentes antes que nadie."
),
tools=[busqueda],
llm=llm,
verbose=True,
allow_delegation=False
)
# Agente escritor
escritor = Agent(
role="Escritor Técnico Especializado",
goal="Transformar la investigación en un informe claro, estructurado y profesional",
backstory=(
"Eres un escritor técnico con una habilidad excepcional para explicar "
"conceptos complejos de forma accesible. Has escrito para las principales "
"revistas de tecnología durante más de una década."
),
llm=llm,
verbose=True,
allow_delegation=False
)
# Agente editor
editor = Agent(
role="Editor de Contenido Senior",
goal="Revisar el informe para garantizar precisión, coherencia y calidad profesional",
backstory=(
"Eres un editor meticuloso con ojo crítico para los detalles. "
"Tu trabajo es asegurar que cada informe que sale de este equipo "
"sea impecable en contenido y forma."
),
llm=llm,
verbose=True,
allow_delegation=False
)
4.2 Definir las tareas
En el mismo archivo:
tarea_investigar = Task(
description=(
"Investiga a fondo el tema: {tema}. "
"Encuentra al menos 5 fuentes relevantes y extrae los hallazgos clave. "
"Céntrate en datos de 2026."
),
expected_output="Un documento de investigación con los 5 hallazgos principales y sus fuentes.",
agent=investigador
)
tarea_escribir = Task(
description=(
"Utiliza la investigación proporcionada para escribir un informe técnico "
"completo sobre {tema}. El informe debe tener: resumen ejecutivo, "
"introducción, desarrollo con secciones numeradas y conclusión."
),
expected_output="Un informe técnico en Markdown con al menos 4 secciones y 2500 palabras.",
agent=escritor
)
tarea_editar = Task(
description=(
"Revisa el informe completo. Corrige errores factuales, mejora la redacción "
"y asegura que el formato sea profesional. Añade una nota del editor al final "
"con tu valoración."
),
expected_output="El informe final editado y listo para publicación.",
agent=editor,
output_file="informe_final.md"
)
4.3 Crear el equipo (crew) y ejecutarlo
equipo = Crew(
agents=[investigador, escritor, editor],
tasks=[tarea_investigar, tarea_escribir, tarea_editar],
process=Process.sequential, # Las tareas se ejecutan una tras otra
verbose=True
)
# Ejecutar el equipo
resultado = equipo.kickoff(inputs={"tema": "criptografía post-cuántica en 2026"})
print(resultado)
Para ejecutarlo:
cd mi_equipo_ia
python src/mi_equipo_ia/crew.py
5. Uso de herramientas externas: búsqueda web, archivos y APIs personalizadas
CrewAI incluye un conjunto de herramientas listas para usar. Algunas de las más útiles:
| Herramienta | Descripción | Clase en Python |
|---|---|---|
| SerperDevTool | Búsqueda web vía Google (necesita API key gratuita) | from crewai_tools import SerperDevTool |
| FileReadTool | Leer archivos del sistema | from crewai_tools import FileReadTool |
| FileWriteTool | Escribir archivos | from crewai_tools import FileWriteTool |
| ScrapeWebsiteTool | Extraer contenido de una URL | from crewai_tools import ScrapeWebsiteTool |
| Custom Tool | Cualquier función Python que definas | Hereda de BaseTool |
5.1 Crear una herramienta personalizada
from crewai_tools import BaseTool
class CalculadoraRiesgo(BaseTool):
name: str = "Calculadora de Riesgo Tecnológico"
description: str = "Evalúa el riesgo de adopción de una tecnología en escala 1-10"
def _run(self, tecnologia: str) -> str:
# Lógica real de evaluación (simplificada aquí)
riesgos = {
"criptografía post-cuántica": "3 (bajo) - Estándares NIST ya publicados",
"agentes IA autónomos": "7 (alto) - Falta de regulación clara"
}
return riesgos.get(tecnologia.lower(), "5 (moderado) - Datos insuficientes")
Luego asignas esta herramienta a un agente:
analista_riesgos = Agent(
role="Analista de Riesgos Tecnológicos",
goal="Evaluar el riesgo de adopción de tecnologías emergentes",
backstory="Eres un analista de riesgos con experiencia en banca y seguros.",
tools=[CalculadoraRiesgo()],
llm=llm,
verbose=True
)
6. Memoria compartida entre agentes
Uno de los puntos fuertes de CrewAI es que los agentes pueden compartir memoria. Esto significa que el escritor sabe lo que investigó el investigador y el editor tiene acceso a todo el historial.
Puedes habilitar explícitamente la memoria en la configuración del crew:
equipo = Crew(
agents=[investigador, escritor, editor],
tasks=[tarea_investigar, tarea_escribir, tarea_editar],
process=Process.sequential,
memory=True, # Activa la memoria compartida
verbose=True
)
7. Errores frecuentes y soluciones
| Error | Causa | Solución |
|---|---|---|
ModuleNotFoundError: No module named 'crewai' |
Instalación incompleta o conflicto de versiones | Ejecuta pip install 'crewai[tools]' en un entorno virtual limpio con Python 3.10+. |
Connection refused to localhost:11434 |
Ollama no está corriendo o el puerto está bloqueado | Verifica con ollama list; si falla, inicia Ollama con ollama serve. |
Rate limit exceeded en la búsqueda web |
SerperDevTool tiene límites en el plan gratuito | Regístrate en serper.dev (50 búsquedas gratis al mes) o usa una herramienta alternativa como DuckDuckGoSearchTool. |
| El agente responde en inglés aunque el prompt está en español | El modelo base está entrenado predominantemente en inglés | Usa modelos con buen soporte multilingüe como qwen3.5:latest o llama3.1:8b. |
| La calidad de los informes es baja | El modelo local no tiene suficiente capacidad de razonamiento | Sube a un modelo más potente como qwen3.5:14b o usa modelos en la nube solo para tareas complejas. |
MemoryError durante la ejecución |
El modelo local consume demasiados recursos | Reduce la longitud del contexto (max_tokens) o libera VRAM cerrando otras aplicaciones. |
| CrewAI no reconoce el LLM de Ollama | Error en la URL base o el nombre del modelo | Usa base_url="http://localhost:11434" y el nombre exacto que aparece en ollama list. |
8. Casos prácticos de uso
8.1 Generación automatizada de informes de ciberseguridad
Un equipo de 3 agentes (investigador de amenazas, analista de impacto, redactor ejecutivo) analiza diariamente las nuevas vulnerabilidades publicadas en CVE y genera un informe para el CISO con recomendaciones priorizadas. Todo se ejecuta en un cron nocturno sin intervención humana.
8.2 Asistente de investigación para desarrolladores
Un desarrollador quiere evaluar si usar una nueva librería de Python. Un agente investiga la documentación oficial y GitHub issues, otro analiza la calidad del código y un tercero genera una recomendación con pros y contras. El proceso completo toma menos de 3 minutos.
8.3 Creación de contenido para blogs técnicos
El flujo que has construido en esta guía es exactamente lo que varios medios tecnológicos están implementando en 2026 para generar borradores iniciales de alta calidad que luego un editor humano revisa y pule. El ahorro de tiempo supera el 60 %.
8.4 Automatización de due diligence tecnológica
Antes de adquirir una startup tecnológica, un equipo de agentes analiza la pila tecnológica, la deuda técnica, las vulnerabilidades de seguridad y la escalabilidad de la infraestructura. Cada agente se especializa en un área y entrega un informe consolidado.
9. Buenas prácticas
- Roles bien definidos y acotados. Un agente que intenta hacer demasiadas cosas distintas pierde efectividad. Especializa cada agente en una función concreta.
- Empieza con modelos locales pequeños. Usa
qwen3.5:8bgratis durante el desarrollo y solo sube a modelos más grandes en producción si la calidad lo justifica. - Usa
verbose=Truesiempre durante el desarrollo. Verás exactamente qué está pensando cada agente y podrás depurar problemas rápidamente. - La memoria compartida es tu aliada. Activa
memory=Trueen el crew para que los agentes no olviden lo que han hecho los anteriores. Es la diferencia entre un equipo que colabora y una cadena de prompts aislados. - Herramientas con propósito. No cargues a un agente con 10 herramientas. Dale solo las que necesita para su rol específico. Un investigador necesita búsqueda web; un editor necesita lectura de archivos.
- Supervisión humana en tareas críticas. Para informes que se publican o decisiones que afectan a clientes, añade un paso de revisión humana al final del flujo.
- Itera y mejora los prompts de los agentes. Los backstories y goals de los agentes son prompts en sí mismos. Refínalos como refinarías cualquier prompt: prueba, evalúa, ajusta.
10. Cierre con idea clave
El salto de un LLM individual a un sistema multi‑agente autónomo cambia radicalmente el tipo de tareas que puedes automatizar. Con CrewAI y modelos open source ejecutados en local, tienes una fábrica de inteligencia especializada que trabaja 24/7 sin costes de API y con total privacidad. La pregunta ya no es si tu IA puede ayudarte, sino en cuántas cosas distintas puede ayudarte simultáneamente.