Integración de Tools en CrewAI: deja que los agentes busquen, lean y realmente trabajen

2 min read

Un agente sin tools es como un ingeniero con mucha teoría pero sin teclado.
Puede hablar mucho, pero no entrega nada.

Tools integradas comunes

Las tools más usadas en CrewAI incluyen:

  • SerperDevTool: búsqueda web
  • FileReadTool: lectura de archivos
  • FileWriterTool: escritura de archivos
  • ScrapeWebsiteTool: scraping de contenido web

Conectar tools a un agente

from crewai import Agent
from crewai_tools import SerperDevTool
 
search_tool = SerperDevTool()
 
researcher = Agent(
    role="Researcher",
    goal="Find trustworthy sources about the topic",
    backstory="You validate facts before writing.",
    tools=[search_tool],
    allow_delegation=False,
    verbose=True,
)

💡 Puedes reutilizar el mismo search_tool entre agentes. No hace falta recrearlo cada vez (DRY).

Plantilla mínima para tool personalizada

from crewai.tools import BaseTool
from pydantic import BaseModel, Field
 
class QueryInput(BaseModel):
    keyword: str = Field(description="Search keyword")
 
class KeywordTool(BaseTool):
    name: str = "Keyword Tool"
    description: str = "Return a short explanation for a keyword."
    args_schema: type[BaseModel] = QueryInput
 
    def _run(self, keyword: str) -> str:
        return f"Result for: {keyword}"

Cuatro reglas de diseño de tools

  1. Haz una sola cosa: si busca, no debe además escribir archivos
  2. Sé explícito: description debe indicar claramente propósito y entrada
  3. Valida parámetros: usa schema con Pydantic
  4. Devuelve formato estable: facilita el parseo en tareas siguientes

Errores comunes

Síntoma Causa Solución
La tool nunca se llama El prompt de tarea no la exige explícitamente Añade instrucción clara de "usar tool primero"
Parámetros incorrectos args_schema poco claro Añade Field(description=...)
Salida difícil de usar Texto libre demasiado disperso Devuelve secciones fijas o JSON string

Siguiente paso

Después de tools, el siguiente foco es consistencia de salida.
El próximo artículo muestra cómo fijar formato con Pydantic:
👉 Structured Output with Pydantic