--- title: crewAI Crews description: Understanding and utilizing crews in the crewAI framework. --- ## What is a Crew? !!! note "Definition of a Crew" A crew in crewAI represents a collaborative group of agents working together to achieve a set of tasks. Each crew defines the strategy for task execution, agent collaboration, and the overall workflow. ## Crew Attributes | Attribute | Description | | :------------------- | :----------------------------------------------------------- | | **Tasks** | A list of tasks assigned to the crew. | | **Agents** | A list of agents that are part of the crew. | | **Process** | The process flow (e.g., sequential, hierarchical) the crew follows. | | **Verbose** | The verbosity level for logging during execution. | | **Manager LLM** | The language model used by the manager agent in a hierarchical process. **Required when using a hierarchical process.** | | **Function Calling LLM** | The language model used by all agents in the crew for calling functions. If none is passed, the main LLM for each agent will be used. | | **Config** | Optional configuration settings for the crew, in `Json` or `Dict[str, Any]` format. | | **Max RPM** | Maximum requests per minute the crew adheres to during execution. | | **Language** | Language used for the crew, defaults to English. | | **Full Output** | Whether the crew should return the full output with all tasks outputs or just the final output. | | **Step Callback** | A function that is called after each step of every agent. This can be used to log the agent's actions or to perform other operations; it won't override the agent-specific `step_callback`. | | **Share Crew** | Whether you want to share the complete crew information and execution with the crewAI team to make the library better, and allow us to train models. | !!! note "Crew Max RPM" The `max_rpm` attribute sets the maximum number of requests per minute the crew can perform to avoid rate limits and will override individual agents' `max_rpm` settings if you set it. ## Creating a Crew !!! note "Crew Composition" When assembling a crew, you combine agents with complementary roles and tools, assign tasks, and select a process that dictates their execution order and interaction. ### Example: Assembling a Crew ```python from crewai import Crew, Agent, Task, Process from langchain_community.tools import DuckDuckGoSearchRun # Define agents with specific roles and tools researcher = Agent( role='Senior Research Analyst', goal='Discover innovative AI technologies', tools=[DuckDuckGoSearchRun()] ) writer = Agent( role='Content Writer', goal='Write engaging articles on AI discoveries' ) # Create tasks for the agents research_task = Task(description='Identify breakthrough AI technologies', agent=researcher) write_article_task = Task(description='Draft an article on the latest AI technologies', agent=writer) # Assemble the crew with a sequential process my_crew = Crew( agents=[researcher, writer], tasks=[research_task, write_article_task], process=Process.sequential, full_output=True, verbose=True ) ``` ## Crew Execution Process - **Sequential Process**: Tasks are executed one after another, allowing for a linear flow of work. - **Hierarchical Process**: A manager agent coordinates the crew, delegating tasks and validating outcomes before proceeding. **Note**: A `manager_llm` is required for this process. ### Kicking Off a Crew Once your crew is assembled, initiate the workflow with the `kickoff()` method. This starts the execution process according to the defined process flow. ```python # Start the crew's task execution result = my_crew.kickoff() print(result) ```