Creating CrewAI Agents Tasks

Creating CrewAI Agents TasksImage created by DallE AI.

Creating CrewAI Agents Tasks: A Comprehensive Guide

In artificial intelligence and automation, the CrewAI framework is a beacon for efficiently orchestrating tasks among intelligent agents. This post delves into the foundational components of creating and managing tasks within CrewAI, offering a detailed walkthrough based on insights from the CrewAI Documentation.

1. Definition of Tasks

In CrewAI, a task is more than just a directive—it’s a structured assignment intended for completion by an agent. Each task comes equipped with specific attributes such as descriptions, expected outputs, and the designated tools required for the task’s execution. This level of detail accommodates the varying complexities involved in task actions, ensuring clarity and precision in agent directives.

2. Execution Flow

One of CrewAI’s powerful features is its flexible task execution flow. Tasks can be executed either sequentially, following a predetermined order, or hierarchically, assigned based on agent roles. This flexibility is crucial for effective task orchestration within a crew setup.

crew = Crew(
        agents=[agent1, agent2],
        tasks=[task1, task2],
        process=Process.sequential # or Process.hierarchical
    )

3. Task Configuration

Task creation in CrewAI can be approached through two primary methods: YAML configuration or direct code definition. YAML offers a clear and maintainable setup, allowing for the dynamic insertion of variables during task execution, enhancing adaptability and clarity.

tasks.yaml
    research_task:
      description: > 
        Conduct thorough research about { topic }.
      expected_output: > 
        A list with 10 bullet points of the most relevant information about { topic }.
      agent: researcher
    

4. Task Attributes

A task within CrewAI is defined by multiple attributes including description, expected_output, agent, tools, and context. These attributes allow for detailed task specification, including advanced options like async_execution for optimizing workflow efficiency through asynchronous task processes.

research_task = Task(
        description="Research AI developments",
        expected_output="List of AI developments",
        agent=researcher,
        async_execution=True
    )

5. Task Outputs and Structures

Task outputs are neatly encapsulated within the TaskOutput class, supporting various formats such as raw outputs, JSON, and Pydantic models. This structured approach simplifies output handling, making post-task processing more efficient.

task_output = task.output
print(f"Task Description: {task_output.description}")

6. Guardrails for Validation

CrewAI integrates guardrails to ensure output quality and format consistency. These optional validation functions check task outputs before they’re used in subsequent tasks, preserving data integrity throughout the execution chain.

def validate_output(result: str) -> Tuple[bool, Union[str, Dict]]:
        # sample validation logic
        return True, result if valid else False, "Output format error"

7. Asynchronous Task Execution

Certain tasks can be programmed for asynchronous execution, a feature that prevents bottlenecks by allowing the crew to proceed with other tasks without waiting for completion. This is particularly useful for lengthy or non-critical tasks.

list_ideas = Task(
        description="List ideas for AI articles",
        expected_output="5 article ideas.",
        agent=researcher,
        async_execution=True
    )

8. Callback Mechanism

To automate actions post-task completion, CrewAI allows the assignment of callback functions. These functions can execute automatically, carrying out follow-up operations such as notifications or additional processing based on task results.

def callback_function(output: TaskOutput):
        print(f"Task completed! Result: {output.raw}")

9. Integrating Tools

Tasks in CrewAI can leverage various built-in or external tools to enhance execution capabilities. This includes tools for semantic searches and data processing, allowing agents to perform tasks more effectively according to specified requisites.

search_tool = SerperDevTool()
    task = Task(
        description='Find AI news',
        expected_output='Summary of AI news',
        agent=research_agent,
        tools=[search_tool]
    )

10. Error Handling and Reporting

Lastly, CrewAI embeds robust error-handling mechanisms within its task framework. This ensures that any discrepancies are managed through validations and structured responses, maintaining consistency and reliability in task outputs.

if task_output.json_dict:
        # Handle expected structured output

In conclusion, the CrewAI framework offers a comprehensive and nuanced approach to task management among AI agents. By leveraging its flexible execution flows, insightful validation techniques, and robust handling mechanisms, users can maintain high standards of quality assurance and efficiency in their automated processes.

Avatar photo

William Funchal

I'm CrewAI certified by @CrewAI and @DeepLearning, specializing in developing AI-driven microservices and Multi AI Agents architecture. (Java | Python | Crew AI).
I’ve been developing multi-agents-systems powered by Gen AI, as distributed event-driven microservices. With over 21 years of experience, I have a proven track record in web, mobile, IoT, and high-availability application development.

My core competencies include Crew AI framework, Multi AI Agents development, Python, Java (Spring Boot, Quarkus, Mutiny, Vert.x Event-Driven Architecture, and Kubernetes cluster deployment. I am also proficient in .NET Core, NoSQL Databases, Docker, and device protocols like BLE, Modbus, and TCP.

In my previous job at Philips, I helped design and develop backend microservices for Philips ECG Solutions (Heart Monitoring). This teamwork provided real-time diagnostic systems for patients' heart care.
Today, I work part-time as the System Architect at Mobitraxx. I lead the development of new software solutions.

More From Author

Implementing Reactive Programming Using Mutiny on the Quarkus Framework

Deploying Palo Alto VM-Series Firewall in HA Mode on Google Cloud Platform

Leave a Reply

Your email address will not be published. Required fields are marked *