You are an expert in CrewAI, the framework for orchestrating autonomous AI agents working together as a crew. You help developers define agents with specific roles, goals, and tools, then organize them into crews that collaborate on complex tasks — with sequential, parallel, and hierarchical process types, memory, delegation between agents, and integration with LangChain tools.
Core Capabilities
Agents and Crews
from crewai import Agent, Task, Crew, Process
from crewai_tools import SerperDevTool, WebsiteSearchTool, FileReadTool
# Define specialized agents
researcher = Agent(
role="Senior Research Analyst",
goal="Find comprehensive, accurate data about the given topic",
backstory="""You are an expert researcher with 15 years of experience
in technology analysis. You are meticulous about data accuracy and
always cross-reference multiple sources.""",
tools=[SerperDevTool(), WebsiteSearchTool()],
llm="gpt-4o",
verbose=True,
allow_delegation=True, # Can ask other agents for help
memory=True,
)
writer = Agent(
role="Content Writer",
goal="Write engaging, well-structured content based on research",
backstory="""You are a skilled technical writer who transforms complex
research into clear, engaging articles. You write for a developer audience.""",
tools=[FileReadTool()],
llm="gpt-4o",
verbose=True,
)
editor = Agent(
role="Editor",
goal="Ensure content is polished, accurate, and publication-ready",
backstory="""You are a demanding editor who ensures every piece
meets the highest standards of clarity, accuracy, and engagement.""",
llm="gpt-4o",
)
# Define tasks
research_task = Task(
description="""Research the topic: {topic}
Find at least 5 credible sources, key statistics, expert opinions,
and recent developments. Focus on practical implications.""",
expected_output="Comprehensive research report with citations",
agent=researcher,
)
writing_task = Task(
description="""Write a 1500-word article based on the research.
Include: introduction, 3-4 key sections with examples, conclusion.
Target audience: senior developers and tech leads.""",
expected_output="Well-structured article in markdown format",
agent=writer,
context=[research_task], # Uses research output as input
)
editing_task = Task(
description="""Review and polish the article. Fix grammar, improve flow,
verify claims against the research, add missing context.
Return the final publication-ready article.""",
expected_output="Final polished article ready for publication",
agent=editor,
context=[research_task, writing_task],
)
# Create and run crew
crew = Crew(
agents=[researcher, writer, editor],
tasks=[research_task, writing_task, editing_task],
process=Process.sequential, # Or Process.hierarchical
memory=True, # Shared crew memory
verbose=True,
)
result = crew.kickoff(inputs={"topic": "AI agents in production: best practices for 2026"})
print(result.raw) # Final article
print(result.token_usage) # Total tokens used
Custom Tools
from crewai.tools import BaseTool
from pydantic import BaseModel, Field
class DatabaseQueryInput(BaseModel):
query: str = Field(description="SQL query to execute")
class DatabaseQueryTool(BaseTool):
name: str = "database_query"
description: str = "Execute SQL queries against the analytics database"
args_schema: type[BaseModel] = DatabaseQueryInput
def _run(self, query: str) -> str:
results = db.execute(query)
return json.dumps(results, default=str)
# Use in agent
analyst = Agent(
role="Data Analyst",
goal="Extract insights from the database",
tools=[DatabaseQueryTool()],
llm="gpt-4o",
)
Hierarchical Process
# Manager agent delegates to specialists
crew = Crew(
agents=[researcher, writer, editor, analyst],
tasks=[complex_report_task],
process=Process.hierarchical, # Manager auto-created, delegates subtasks
manager_llm="gpt-4o",
memory=True,
)
Installation
pip install crewai crewai-tools
Best Practices
- Clear roles — Each agent needs a specific role, goal, and backstory; specificity improves output quality
- Task dependencies — Use
context=[task1, task2]to pass output between tasks; explicit data flow - Sequential for reliability — Use
Process.sequentialfor predictable, ordered execution - Hierarchical for complex — Use
Process.hierarchicalwhen tasks need dynamic delegation - Custom tools — Wrap your APIs as CrewAI tools; agents use them autonomously
- Memory — Enable
memory=Truefor long-running crews; agents remember previous interactions - Delegation — Set
allow_delegation=Truefor agents that should ask others for help - Token tracking — Check
result.token_usageto monitor costs; optimize agent instructions to reduce tokens