Tradiitonal SWE vs AI SWE

| | Traditional | AI | :—-: | :—: | :—: | | Inputs | Defined set and type | Fuzzy inputs with open-ended texts, e.g., table, markdown, text, math | | Transformations | Predefined math operations, variable assignments, loops | Fuzzy transformations, e.g., QA, summarizing, Reasoning, creative writing | | Outputs | Defined set and type | Fuzzy outputs, e.g., paragraph, json, number, markdown | | Replication | Deterministic | Indeterministic |

Multi-AI Agents

Have multiple agents such that we breakdown a complex task into simpler/parallel subtasks and allow separate agents to handle them, e.g., 1 agent is solely responsible for reasearching a topic, while another agent writes summaries of these topics.

Can also have different agents using different LLMs, e.g, agent 1 using llama 3 and agent 2 using gpt.

Example Multi-Agent System: Content Writer

Build a multi-agent crew that researches and writes an article.

  • Define your Agents and provide them a:
    • role
    • goal
    • backstory.
  • It has been seen that LLMs perform better when they are role playing.

Agents

from crewai import Agent, Task, Crew

# Agent - Planner
planner = Agent(
    role="Content Planner",
    goal="Plan engaging and factually accurate content on {topic}",
    backstory="You're working on planning a blog article "
              "about the topic: {topic}."
              "You collect information that helps the "
              "audience learn something "
              "and make informed decisions. "
              "Your work is the basis for "
              "the Content Writer to write an article on this topic.",
    allow_delegation=False,
	verbose=True
)

# Agent - Writer
writer = Agent(
    role="Content Writer",
    goal="Write insightful and factually accurate "
         "opinion piece about the topic: {topic}",
    backstory="You're working on a writing "
              "a new opinion piece about the topic: {topic}. "
              "You base your writing on the work of "
              "the Content Planner, who provides an outline "
              "and relevant context about the topic. "
              "You follow the main objectives and "
              "direction of the outline, "
              "as provide by the Content Planner. "
              "You also provide objective and impartial insights "
              "and back them up with information "
              "provide by the Content Planner. "
              "You acknowledge in your opinion piece "
              "when your statements are opinions "
              "as opposed to objective statements.",
    allow_delegation=False,
    verbose=True
)

# Agent - Writer
editor = Agent(
    role="Editor",
    goal="Edit a given blog post to align with "
         "the writing style of the organization. ",
    backstory="You are an editor who receives a blog post "
              "from the Content Writer. "
              "Your goal is to review the blog post "
              "to ensure that it follows journalistic best practices,"
              "provides balanced viewpoints "
              "when providing opinions or assertions, "
              "and also avoids major controversial topics "
              "or opinions when possible.",
    allow_delegation=False,
    verbose=True
)

Tasks

# Task -  Plan
plan = Task(
    description=(
        "1. Prioritize the latest trends, key players, "
            "and noteworthy news on {topic}.\n"
        "2. Identify the target audience, considering "
            "their interests and pain points.\n"
        "3. Develop a detailed content outline including "
            "an introduction, key points, and a call to action.\n"
        "4. Include SEO keywords and relevant data or sources."
    ),
    expected_output="A comprehensive content plan document "
        "with an outline, audience analysis, "
        "SEO keywords, and resources.",
    agent=planner,
)

# Task -  Write
write = Task(
    description=(
        "1. Use the content plan to craft a compelling "
            "blog post on {topic}.\n"
        "2. Incorporate SEO keywords naturally.\n"
		"3. Sections/Subtitles are properly named "
            "in an engaging manner.\n"
        "4. Ensure the post is structured with an "
            "engaging introduction, insightful body, "
            "and a summarizing conclusion.\n"
        "5. Proofread for grammatical errors and "
            "alignment with the brand's voice.\n"
    ),
    expected_output="A well-written blog post "
        "in markdown format, ready for publication, "
        "each section should have 2 or 3 paragraphs.",
    agent=writer,
)

# Task - Edit
edit = Task(
    description=("Proofread the given blog post for "
                 "grammatical errors and "
                 "alignment with the brand's voice."),
    expected_output="A well-written blog post in markdown format, "
                    "ready for publication, "
                    "each section should have 2 or 3 paragraphs.",
    agent=editor
)

Crew

Create a crew.

crew = Crew(
    agents=[planner, writer, editor],
    tasks=[plan, write, edit],
    verbose=2
)

result = crew.kickoff(inputs={"topic": "Artificial Intelligence"})

Result:

[DEBUG]: == Working Agent: Content Planner
 [INFO]: == Starting Task: 1. Prioritize the latest trends, key players, and noteworthy news on Selena Gomez.
2. Identify the target audience, considering their interests and pain points.
3. Develop a detailed content outline including an introduction, key points, and a call to action.
4. Include SEO keywords and relevant data or sources.


> Entering new CrewAgentExecutor chain...
I now can give a great answer

Final Answer: 

Content Plan: Selena Gomez

Introduction:
- Brief overview of Selena Gomez's career and achievements
- Mention of recent news or projects she is involved in

Key Points:
1. Latest Trends:
- Selena Gomez's impact on social media and fashion trends
- Current projects she is working on, such as music releases or acting roles
- Collaborations with other artists or brands

2. Key Players:
- Selena Gomez herself as the main key player in her career
- Mention of her team, including managers, agents, and stylists
- Collaborators in the entertainment industry she frequently works with

3. Noteworthy News:
- Recent interviews or public appearances by Selena Gomez
- Any controversies or significant events related to her personal or professional life
- Updates on her philanthropic work and advocacy efforts

Target Audience:
- Fans of Selena Gomez across different age groups
- People interested in celebrity news and pop culture
- Individuals looking for inspiration from successful women in entertainment
- Fashion enthusiasts following trends set by celebrities

SEO Keywords:
- Selena Gomez
- Celebrity news
- Pop culture
- Fashion trends
- Music releases
- Entertainment industry
- Philanthropy
- Female empowerment

Call to Action:
- Encourage readers to follow Selena Gomez on social media for updates
- Promote upcoming projects or appearances by Selena Gomez
- Invite readers to share their favorite Selena Gomez moments or songs on social media

Resources:
- Official Selena Gomez website and social media profiles
- Recent interviews or articles featuring Selena Gomez
- Industry publications covering entertainment news
- Fashion websites highlighting Selena Gomez's style choices

Overall, this content plan aims to provide a comprehensive overview of Selena Gomez's latest trends, key players in her career, noteworthy news, and target audience analysis. By incorporating relevant SEO keywords and providing valuable resources, the blog article will engage readers and offer them informative insights into the world of Selena Gomez.

> Finished chain.
 [DEBUG]: == [Content Planner] Task output: Content Plan: Selena Gomez
 [DEBUG]: == Working Agent: Content Writer
 [INFO]: == Starting Task: 1. Use the content plan to craft a compelling blog post on Selena Gomez.
2. Incorporate SEO keywords naturally.
3. Sections/Subtitles are properly named in an engaging manner.
4. Ensure the post is structured with an engaging introduction, insightful body, and a summarizing conclusion.
5. Proofread for grammatical errors and alignment with the brand's voice.



> Entering new CrewAgentExecutor chain...
I now can give a great answer

Final Answer:

# Selena Gomez: A Rising Star in Entertainment

Selena Gomez is a multi-talented artist who has made a significant impact in the entertainment industry. From her early days as a Disney Channel star to her successful music career, Gomez has proven to be a versatile and influential figure. With numerous accolades and a massive following on social media, she continues to captivate audiences worldwide.

In recent news, Selena Gomez has been making headlines for her latest music releases and acting projects. Her collaborations with other artists and brands have further solidified her status as a key player in the industry. With a strong team supporting her, including managers, agents, and stylists, Gomez has been able to navigate the competitive world of entertainment with grace and poise.

## The Influence of Selena Gomez

One of the key aspects of Selena Gomez's career is her influence on social media and fashion trends. With millions of followers on platforms like Instagram, she has the power to set trends and inspire her fans. Additionally, her philanthropic work and advocacy efforts have not gone unnoticed, showcasing her commitment to making a positive impact on the world.

In terms of noteworthy news, recent interviews and public appearances by Selena Gomez have shed light on her personal and professional life. While controversies may arise from time to time, Gomez has always handled them with grace and maturity. Her dedication to female empowerment and her support for important causes have garnered praise from fans and critics alike.

Overall, Selena Gomez continues to be a beacon of inspiration for fans across different age groups. Whether you're a die-hard fan or simply interested in celebrity news and pop culture, Gomez's influence is undeniable. Stay tuned for more updates on her upcoming projects and remember to follow her on social media for the latest news and updates.

> Finished chain.
 [DEBUG]: == [Content Writer] Task output: # Selena Gomez: A Rising Star in Entertainment

Selena Gomez is a multi-talented artist who has made a significant impact in the entertainment industry. From her early days as a Disney Channel star to her successful music career, Gomez has proven to be a versatile and influential figure. With numerous accolades and a massive following on social media, she continues to captivate audiences worldwide.

In recent news, Selena Gomez has been making headlines for her latest music releases and acting projects. Her collaborations with other artists and brands have further solidified her status as a key player in the industry. With a strong team supporting her, including managers, agents, and stylists, Gomez has been able to navigate the competitive world of entertainment with grace and poise.

## The Influence of Selena Gomez

One of the key aspects of Selena Gomez's career is her influence on social media and fashion trends. With millions of followers on platforms like Instagram, she has the power to set trends and inspire her fans. Additionally, her philanthropic work and advocacy efforts have not gone unnoticed, showcasing her commitment to making a positive impact on the world.

In terms of noteworthy news, recent interviews and public appearances by Selena Gomez have shed light on her personal and professional life. While controversies may arise from time to time, Gomez has always handled them with grace and maturity. Her dedication to female empowerment and her support for important causes have garnered praise from fans and critics alike.

Overall, Selena Gomez continues to be a beacon of inspiration for fans across different age groups. Whether you're a die-hard fan or simply interested in celebrity news and pop culture, Gomez's influence is undeniable. Stay tuned for more updates on her upcoming projects and remember to follow her on social media for the latest news and updates.
 [DEBUG]: == Working Agent: Editor
 [INFO]: == Starting Task: Proofread the given blog post for grammatical errors and alignment with the brand's voice.


> Entering new CrewAgentExecutor chain...
I now can give a great answer

Final Answer: 

# Selena Gomez: A Rising Star in Entertainment

Selena Gomez is undeniably a powerhouse in the entertainment industry, showcasing her versatility and talent across various platforms. From her roots as a beloved Disney Channel star to her successful music career, Gomez has solidified her status as a multi-talented artist with a massive global following. With a string of accolades under her belt and a strong presence on social media, she continues to captivate audiences worldwide with her charisma and talent.

In recent times, Selena Gomez has been making waves with her latest music releases and acting projects, further proving her prowess in the industry. Her collaborations with other artists and brands have only served to enhance her reputation as a key player in the entertainment world. Supported by a dedicated team of professionals including managers, agents, and stylists, Gomez has managed to navigate the competitive landscape of showbiz with grace and poise, earning the respect of fans and critics alike.

## The Influence of Selena Gomez

A defining aspect of Selena Gomez's career lies in her influence on social media and fashion trends. With a massive following on platforms like Instagram, she not only sets trends but also serves as an inspiration to her legion of fans. Beyond her entertainment career, Gomez's philanthropic work and advocacy efforts have garnered attention, highlighting her commitment to making a positive impact on society and the world at large.

In recent news, interviews and public appearances by Selena Gomez have shed light on both her personal and professional life, providing fans with a glimpse into her world. While controversies may occasionally surround her, Gomez has consistently handled them with grace and maturity, earning admiration for her resilience and strength. Her unwavering dedication to female empowerment and support for important causes have further cemented her status as a role model for many.

Overall, Selena Gomez remains a beacon of inspiration for fans of all ages, transcending boundaries and making a mark in the entertainment landscape. Whether you're a devoted fan or simply interested in celebrity news and pop culture, Gomez's influence is undeniable and continues to grow. Keep an eye out for updates on her upcoming projects and make sure to follow her on social media for the latest news and insights.

> Finished chain.

Properties of good agents

Role Playing

Focus

Tools

Cooperation

Guardrails

Memory

Abikity of agents to remember what it has done. Use it to make new decisions. Ability learn form the past, apply their knowledge in future execution. more reliable, and increasingly better results after every run.

  1. short-term memory

memory during execution of task. Different agents perform differetn tasks and store different things that they learn in this memory. This memory is shared across all agents.Helps to share context across agents.

  1. long-term memory

memory stored after the execution of current tasks. allows agents to learn from previous executions (remeber and learn). leads to self-improving agents.

  1. entitiy-memory

short-lived and only stored during the execution. stores the sibjects that are being discussed.

Example Multi-Agent System: Customer Support Automation

from crewai import Agent, Task, Crew

support_agent = Agent(
    role="Senior Support Representative",
	goal="Be the most friendly and helpful "
        "support representative in your team",
	backstory=(
		"You work at crewAI (https://crewai.com) and "
        " are now working on providing "
		"support to {customer}, a super important customer "
        " for your company."
		"You need to make sure that you provide the best support!"
		"Make sure to provide full complete answers, "
        " and make no assumptions."
	),
	allow_delegation=False,
	verbose=True
)

support_quality_assurance_agent = Agent(
	role="Support Quality Assurance Specialist",
	goal="Get recognition for providing the "
    "best support quality assurance in your team",
	backstory=(
		"You work at crewAI (https://crewai.com) and "
        "are now working with your team "
		"on a request from {customer} ensuring that "
        "the support representative is "
		"providing the best support possible.\n"
		"You need to make sure that the support representative "
        "is providing full"
		"complete answers, and make no assumptions."
	),
	verbose=True
)

support agent cannpot delegate its task, but the QA agent can delegate to the support agent.

from crewai_tools import SerperDevTool, \
                         ScrapeWebsiteTool, \
                         WebsiteSearchTool


docs_scrape_tool = ScrapeWebsiteTool(
    website_url="https://docs.crewai.com/how-to/Creating-a-Crew-and-kick-it-off/"
)

inquiry_resolution = Task(
    description=(
        "{customer} just reached out with a super important ask:\n"
	    "{inquiry}\n\n"
        "{person} from {customer} is the one that reached out. "
		"Make sure to use everything you know "
        "to provide the best support possible."
		"You must strive to provide a complete "
        "and accurate response to the customer's inquiry."
    ),
    expected_output=(
	    "A detailed, informative response to the "
        "customer's inquiry that addresses "
        "all aspects of their question.\n"
        "The response should include references "
        "to everything you used to find the answer, "
        "including external data or solutions. "
        "Ensure the answer is complete, "
		"leaving no questions unanswered, and maintain a helpful and friendly "
		"tone throughout."
    ),
	tools=[docs_scrape_tool],
    agent=support_agent,
)

quality_assurance_review = Task(
    description=(
        "Review the response drafted by the Senior Support Representative for {customer}'s inquiry. "
        "Ensure that the answer is comprehensive, accurate, and adheres to the "
		"high-quality standards expected for customer support.\n"
        "Verify that all parts of the customer's inquiry "
        "have been addressed "
		"thoroughly, with a helpful and friendly tone.\n"
        "Check for references and sources used to "
        " find the information, "
		"ensuring the response is well-supported and "
        "leaves no questions unanswered."
    ),
    expected_output=(
        "A final, detailed, and informative response "
        "ready to be sent to the customer.\n"
        "This response should fully address the "
        "customer's inquiry, incorporating all "
		"relevant feedback and improvements.\n"
		"Don't be too formal, we are a chill and cool company "
	    "but maintain a professional and friendly tone throughout."
    ),
    agent=support_quality_assurance_agent,
)

QA review doesn’t require any additional tools. Different Ways to Give Agents Tools:

  • Agent Level: The Agent can use the Tool(s) on any Task it performs.
  • Task Level: The Agent will only use the Tool(s) when performing that specific Task.

Note: Task Tools override the Agent Tools.

crew = Crew(
  agents=[support_agent, support_quality_assurance_agent],
  tasks=[inquiry_resolution, quality_assurance_review],
  verbose=2,
  memory=True
)

inputs = {
    "customer": "DeepLearningAI",
    "person": "Andrew Ng",
    "inquiry": "I need help with setting up a Crew "
               "and kicking it off, specifically "
               "how can I add memory to my crew?"
}

result = crew.kickoff(inputs=inputs)
Crew Run Log ``` [DEBUG]: == Working Agent: Senior Support Representative [INFO]: == Starting Task: DeepLearningAI just reached out with a super important ask: I need help with setting up a Crew and kicking it off, specifically how can I add memory to my crew? Andrew Ng from DeepLearningAI is the one that reached out. Make sure to use everything you know to provide the best support possible.You must strive to provide a complete and accurate response to the customer's inquiry. > Entering new CrewAgentExecutor chain... I need to provide a detailed and informative response to DeepLearningAI's inquiry about adding memory to their crew. I should use the Read website content tool to gather information on setting up a Crew and kicking it off. Action: Read website content Action Input: {"url": "https://docs.crewai.com/how-to/Creating-a-Crew-and-kick-it-off/"} Introduction - CrewAICrewAI home pageSearch CrewAI docsStart Free TrialcrewAIInc/crewAIcrewAIInc/crewAISearch...NavigationGet StartedIntroductionDocumentationEnterpriseExamplesReleasesWebsiteForumGet HelpGet StartedIntroductionInstallationQuickstartGuidesStrategyAgentsCrewsFlowsAdvancedCore ConceptsAgentsTasksCrewsFlowsKnowledgeLLMsProcessesCollaborationTrainingMemoryReasoningPlanningTestingCLIToolsEvent ListenersToolsAI Mind ToolApify ActorsBedrock Invoke Agent ToolBedrock Knowledge Base RetrieverBrave SearchBrowserbase Web LoaderCode Docs RAG SearchCode InterpreterComposio ToolCSV RAG SearchDALL-E ToolDirectory RAG SearchDirectory ReadDOCX RAG SearchEXA Search Web LoaderFile ReadFile WriteFirecrawl Crawl WebsiteFirecrawl Scrape WebsiteFirecrawl SearchGithub SearchHyperbrowser Load ToolLinkup Search ToolLlamaIndex ToolLangChain ToolGoogle Serper SearchS3 Reader ToolS3 Writer ToolScrapegraph Scrape ToolScrape Element From Website ToolJSON RAG SearchMDX RAG SearchMySQL RAG SearchMultiOn ToolNL2SQL ToolPatronus Evaluation ToolsPDF RAG SearchPG RAG SearchQdrant Vector Search ToolRAG ToolScrape WebsiteScrapfly Scrape Website ToolSelenium ScraperSnowflake Search ToolSpider ScraperStagehand ToolTXT RAG SearchVision ToolWeaviate Vector SearchWebsite RAG SearchXML RAG SearchYouTube Channel RAG SearchYouTube Video RAG SearchMCP IntegrationMCP Servers as Tools in CrewAIAgent Monitoring & ObservabilityAgentOps IntegrationArize PhoenixLangfuse IntegrationLangtrace IntegrationMLflow IntegrationOpenLIT IntegrationOpik IntegrationPortkey IntegrationWeave IntegrationLearnConditional TasksCoding AgentsCreate Custom ToolsCustom LLM ImplementationCustom Manager AgentCustomize AgentsForce Tool Output as ResultHierarchical ProcessHuman Input on ExecutionKickoff Crew AsynchronouslyKickoff Crew for EachConnect to any LLMUsing Multimodal AgentsReplay Tasks from Latest Crew KickoffSequential ProcessesTelemetryTelemetryGet StartedIntroductionCopy pageBuild AI agent teams that work together to tackle complex tasks​What is CrewAI? CrewAI is a lean, lightning-fast Python framework built entirely from scratch—completely independent of LangChain or other agent frameworks. CrewAI empowers developers with both high-level simplicity and precise low-level control, ideal for creating autonomous AI agents tailored to any scenario: CrewAI Crews: Optimize for autonomy and collaborative intelligence, enabling you to create AI teams where each agent has specific roles, tools, and goals. CrewAI Flows: Enable granular, event-driven control, single LLM calls for precise task orchestration and supports Crews natively. With over 100,000 developers certified through our community courses, CrewAI is rapidly becoming the standard for enterprise-ready AI automation. ​How Crews Work Just like a company has departments (Sales, Engineering, Marketing) working together under leadership to achieve business goals, CrewAI helps you create an organization of AI agents with specialized roles collaborating to accomplish complex tasks. CrewAI Framework Overview ComponentDescriptionKey FeaturesCrewThe top-level organization• Manages AI agent teams• Oversees workflows• Ensures collaboration• Delivers outcomesAI AgentsSpecialized team members• Have specific roles (researcher, writer)• Use designated tools• Can delegate tasks• Make autonomous decisionsProcessWorkflow management system• Defines collaboration patterns• Controls task assignments• Manages interactions• Ensures efficient executionTasksIndividual assignments• Have clear objectives• Use specific tools• Feed into larger process• Produce actionable results ​How It All Works Together The Crew organizes the overall operation AI Agents work on their specialized tasks The Process ensures smooth collaboration Tasks get completed to achieve the goal ​Key Features Role-Based AgentsCreate specialized agents with defined roles, expertise, and goals - from researchers to analysts to writersFlexible ToolsEquip agents with custom tools and APIs to interact with external services and data sourcesIntelligent CollaborationAgents work together, sharing insights and coordinating tasks to achieve complex objectivesTask ManagementDefine sequential or parallel workflows, with agents automatically handling task dependencies ​How Flows Work While Crews excel at autonomous collaboration, Flows provide structured automations, offering granular control over workflow execution. Flows ensure tasks are executed reliably, securely, and efficiently, handling conditional logic, loops, and dynamic state management with precision. Flows integrate seamlessly with Crews, enabling you to balance high autonomy with exacting control. CrewAI Framework Overview ComponentDescriptionKey FeaturesFlowStructured workflow orchestration• Manages execution paths• Handles state transitions• Controls task sequencing• Ensures reliable executionEventsTriggers for workflow actions• Initiate specific processes• Enable dynamic responses• Support conditional branching• Allow for real-time adaptationStatesWorkflow execution contexts• Maintain execution data• Enable persistence• Support resumability• Ensure execution integrityCrew SupportEnhances workflow automation• Injects pockets of agency when needed• Complements structured workflows• Balances automation with intelligence• Enables adaptive decision-making ​Key Capabilities Event-Driven OrchestrationDefine precise execution paths responding dynamically to eventsFine-Grained ControlManage workflow states and conditional execution securely and efficientlyNative Crew IntegrationEffortlessly combine with Crews for enhanced autonomy and intelligenceDeterministic ExecutionEnsure predictable outcomes with explicit control flow and error handling ​When to Use Crews vs. Flows Understanding when to use Crews versus Flows is key to maximizing the potential of CrewAI in your applications. Use CaseRecommended ApproachWhy?Open-ended researchCrewsWhen tasks require creative thinking, exploration, and adaptationContent generationCrewsFor collaborative creation of articles, reports, or marketing materialsDecision workflowsFlowsWhen you need predictable, auditable decision paths with precise controlAPI orchestrationFlowsFor reliable integration with multiple external services in a specific sequenceHybrid applicationsCombined approachUse Flows to orchestrate overall process with Crews handling complex subtasks ​Decision Framework Choose Crews when: You need autonomous problem-solving, creative collaboration, or exploratory tasks Choose Flows when: You require deterministic outcomes, auditability, or precise control over execution Combine both when: Your application needs both structured processes and pockets of autonomous intelligence ​Why Choose CrewAI? 🧠 Autonomous Operation: Agents make intelligent decisions based on their roles and available tools 📝 Natural Interaction: Agents communicate and collaborate like human team members 🛠️ Extensible Design: Easy to add new tools, roles, and capabilities 🚀 Production Ready: Built for reliability and scalability in real-world applications 🔒 Security-Focused: Designed with enterprise security requirements in mind 💰 Cost-Efficient: Optimized to minimize token usage and API calls ​Ready to Start Building? Build Your First CrewStep-by-step tutorial to create a collaborative AI team that works together to solve complex problems.Build Your First FlowLearn how to create structured, event-driven workflows with precise control over execution. Install CrewAIGet started with CrewAI in your development environment.Quick StartFollow our quickstart guide to create your first CrewAI agent and get hands-on experience.Join the CommunityConnect with other developers, get help, and share your CrewAI experiences.Was this page helpful?YesNoInstallationwebsitexgithublinkedinyoutuberedditPowered by MintlifyOn this pageWhat is CrewAI?How Crews WorkHow It All Works TogetherKey FeaturesHow Flows WorkKey CapabilitiesWhen to Use Crews vs. FlowsDecision FrameworkWhy Choose CrewAI?Ready to Start Building? Final Answer: Dear Andrew Ng from DeepLearningAI, Thank you for reaching out with your inquiry about adding memory to your crew. To address your question, I have gathered information from the CrewAI documentation on setting up a Crew and kicking it off. In the CrewAI framework, a Crew is an organization of AI agents with specialized roles, expertise, and goals. The CrewAI Crews are designed to optimize for autonomy and collaborative intelligence, enabling you to create AI teams where each agent has specific roles, tools, and goals. The Crew manages the overall operation, AI Agents work on their specialized tasks, the Process ensures smooth collaboration, and Tasks get completed to achieve the goal. In terms of adding memory to your crew, you can equip your AI agents with custom tools and APIs to interact with external services and data sources. This will enable your agents to store and access memory as needed for their tasks. Additionally, you can define sequential or parallel workflows within the Crew, allowing agents to handle task dependencies and manage memory effectively. Furthermore, the CrewAI framework also offers a structured workflow orchestration component called Flows. Flows provide granular control over workflow execution, ensuring tasks are executed reliably, securely, and efficiently. Flows integrate seamlessly with Crews, enabling you to balance high autonomy with exacting control over memory management. In summary, to add memory to your crew in the CrewAI framework, you can equip your AI agents with custom tools and APIs for memory storage, define workflows to manage memory effectively, and utilize Flows for structured workflow orchestration. By leveraging these features, you can enhance the memory capabilities of your crew and improve their overall performance. If you require further assistance or have any additional questions, please feel free to reach out. We are dedicated to providing the best support possible to help you succeed with CrewAI. Best regards, [Your Name] Senior Support Representative crewAI > Finished chain. [DEBUG]: == [Senior Support Representative] Task output: Dear Andrew Ng from DeepLearningAI, Thank you for reaching out with your inquiry about adding memory to your crew. To address your question, I have gathered information from the CrewAI documentation on setting up a Crew and kicking it off. In the CrewAI framework, a Crew is an organization of AI agents with specialized roles, expertise, and goals. The CrewAI Crews are designed to optimize for autonomy and collaborative intelligence, enabling you to create AI teams where each agent has specific roles, tools, and goals. The Crew manages the overall operation, AI Agents work on their specialized tasks, the Process ensures smooth collaboration, and Tasks get completed to achieve the goal. In terms of adding memory to your crew, you can equip your AI agents with custom tools and APIs to interact with external services and data sources. This will enable your agents to store and access memory as needed for their tasks. Additionally, you can define sequential or parallel workflows within the Crew, allowing agents to handle task dependencies and manage memory effectively. Furthermore, the CrewAI framework also offers a structured workflow orchestration component called Flows. Flows provide granular control over workflow execution, ensuring tasks are executed reliably, securely, and efficiently. Flows integrate seamlessly with Crews, enabling you to balance high autonomy with exacting control over memory management. In summary, to add memory to your crew in the CrewAI framework, you can equip your AI agents with custom tools and APIs for memory storage, define workflows to manage memory effectively, and utilize Flows for structured workflow orchestration. By leveraging these features, you can enhance the memory capabilities of your crew and improve their overall performance. If you require further assistance or have any additional questions, please feel free to reach out. We are dedicated to providing the best support possible to help you succeed with CrewAI. Best regards, [Your Name] Senior Support Representative crewAI [DEBUG]: == Working Agent: Support Quality Assurance Specialist [INFO]: == Starting Task: Review the response drafted by the Senior Support Representative for DeepLearningAI's inquiry. Ensure that the answer is comprehensive, accurate, and adheres to the high-quality standards expected for customer support. Verify that all parts of the customer's inquiry have been addressed thoroughly, with a helpful and friendly tone. Check for references and sources used to find the information, ensuring the response is well-supported and leaves no questions unanswered. > Entering new CrewAgentExecutor chain... I need to ensure that the response drafted by the Senior Support Representative is comprehensive, accurate, and meets the high-quality standards expected for customer support. I should verify that all parts of the customer's inquiry have been addressed thoroughly with a helpful and friendly tone. I also need to check for references and sources used to find the information provided in the response. Action: Ask question to co-worker Action Input: {"coworker": "Senior Support Representative", "question": "Can you please provide more specific examples to illustrate the points made in the response to DeepLearningAI's inquiry?", "context": "We need to ensure that the response is clear and easy to understand for the customer."} > Entering new CrewAgentExecutor chain... I now can give a great answer Final Answer: To provide more specific examples to illustrate the points made in the response to DeepLearningAI's inquiry, let's delve into the interaction between Crews and Flows within CrewAI to optimize for autonomy and collaborative intelligence. 1. Crews: In CrewAI, Crews are essential components consisting of AI agents with defined roles, expertise, and goals. For example, a Crew may include researchers, analysts, or writers, each contributing their unique skills to achieve a common objective. 2. Flows: Flows represent the coordination and communication mechanisms that enable Crews to work together harmoniously. They facilitate the exchange of information, tasks, and updates among the AI agents within a Crew, ensuring smooth collaboration and efficient progress towards shared goals. Examples: - Scenario 1: Imagine a Crew dedicated to research and development in the field of machine learning. Within this Crew, researchers utilize their expertise to explore cutting-edge technologies, analysts evaluate the potential applications, and writers communicate the findings to external stakeholders. The Flows within this Crew would include regular updates on research progress, task assignments for each team member, and feedback loops to refine the research outputs. - Scenario 2: Consider a Crew focused on content creation for a marketing campaign. Writers generate compelling copy, designers create visually appealing graphics, and strategists plan the distribution strategy. Flows in this Crew would involve content review cycles, design approvals, and campaign performance tracking to ensure a cohesive and effective marketing campaign. By understanding how Crews and Flows work together within CrewAI, organizations can optimize for autonomy and collaborative intelligence, harnessing the collective expertise of AI agents to achieve impactful results. > Finished chain. To provide more specific examples to illustrate the points made in the response to DeepLearningAI's inquiry, let's delve into the interaction between Crews and Flows within CrewAI to optimize for autonomy and collaborative intelligence. 1. Crews: In CrewAI, Crews are essential components consisting of AI agents with defined roles, expertise, and goals. For example, a Crew may include researchers, analysts, or writers, each contributing their unique skills to achieve a common objective. 2. Flows: Flows represent the coordination and communication mechanisms that enable Crews to work together harmoniously. They facilitate the exchange of information, tasks, and updates among the AI agents within a Crew, ensuring smooth collaboration and efficient progress towards shared goals. Examples: - Scenario 1: Imagine a Crew dedicated to research and development in the field of machine learning. Within this Crew, researchers utilize their expertise to explore cutting-edge technologies, analysts evaluate the potential applications, and writers communicate the findings to external stakeholders. The Flows within this Crew would include regular updates on research progress, task assignments for each team member, and feedback loops to refine the research outputs. - Scenario 2: Consider a Crew focused on content creation for a marketing campaign. Writers generate compelling copy, designers create visually appealing graphics, and strategists plan the distribution strategy. Flows in this Crew would involve content review cycles, design approvals, and campaign performance tracking to ensure a cohesive and effective marketing campaign. By understanding how Crews and Flows work together within CrewAI, organizations can optimize for autonomy and collaborative intelligence, harnessing the collective expertise of AI agents to achieve impactful results. Final Answer: Dear Andrew Ng from DeepLearningAI, Thank you for reaching out with your inquiry about adding memory to your crew. To address your question comprehensively, I have gathered information from the CrewAI documentation on setting up a Crew and kicking it off. In the CrewAI framework, a Crew is an organization of AI agents with specialized roles, expertise, and goals. The CrewAI Crews are designed to optimize for autonomy and collaborative intelligence, enabling you to create AI teams where each agent has specific roles, tools, and goals. The Crew manages the overall operation, AI Agents work on their specialized tasks, the Process ensures smooth collaboration, and Tasks get completed to achieve the goal. In terms of adding memory to your crew, you can equip your AI agents with custom tools and APIs to interact with external services and data sources. This will enable your agents to store and access memory as needed for their tasks. Additionally, you can define sequential or parallel workflows within the Crew, allowing agents to handle task dependencies and manage memory effectively. Furthermore, the CrewAI framework also offers a structured workflow orchestration component called Flows. Flows provide granular control over workflow execution, ensuring tasks are executed reliably, securely, and efficiently. Flows integrate seamlessly with Crews, enabling you to balance high autonomy with exacting control over memory management. To provide more clarity, let me offer specific examples to illustrate the points made in the response: 1. Crews: Imagine a Crew dedicated to research and development in machine learning. Researchers explore technologies, analysts evaluate applications, and writers communicate findings. Flows include updates on progress, task assignments, and feedback loops. 2. Flows: In a content creation Crew, writers generate copy, designers create graphics, and strategists plan distribution. Flows involve content review, design approvals, and performance tracking for effective campaigns. In summary, to add memory to your crew in the CrewAI framework, equip agents with tools and APIs, define workflows, and utilize Flows for structured orchestration. By leveraging these features, you can enhance memory capabilities and improve overall performance. If you require further assistance or have additional questions, please feel free to reach out. We are dedicated to providing the best support possible to help you succeed with CrewAI. Best regards, [Your Name] Senior Support Representative crewAI > Finished chain. [DEBUG]: == [Support Quality Assurance Specialist] Task output: Dear Andrew Ng from DeepLearningAI, Thank you for reaching out with your inquiry about adding memory to your crew. To address your question comprehensively, I have gathered information from the CrewAI documentation on setting up a Crew and kicking it off. In the CrewAI framework, a Crew is an organization of AI agents with specialized roles, expertise, and goals. The CrewAI Crews are designed to optimize for autonomy and collaborative intelligence, enabling you to create AI teams where each agent has specific roles, tools, and goals. The Crew manages the overall operation, AI Agents work on their specialized tasks, the Process ensures smooth collaboration, and Tasks get completed to achieve the goal. In terms of adding memory to your crew, you can equip your AI agents with custom tools and APIs to interact with external services and data sources. This will enable your agents to store and access memory as needed for their tasks. Additionally, you can define sequential or parallel workflows within the Crew, allowing agents to handle task dependencies and manage memory effectively. Furthermore, the CrewAI framework also offers a structured workflow orchestration component called Flows. Flows provide granular control over workflow execution, ensuring tasks are executed reliably, securely, and efficiently. Flows integrate seamlessly with Crews, enabling you to balance high autonomy with exacting control over memory management. To provide more clarity, let me offer specific examples to illustrate the points made in the response: 1. Crews: Imagine a Crew dedicated to research and development in machine learning. Researchers explore technologies, analysts evaluate applications, and writers communicate findings. Flows include updates on progress, task assignments, and feedback loops. 2. Flows: In a content creation Crew, writers generate copy, designers create graphics, and strategists plan distribution. Flows involve content review, design approvals, and performance tracking for effective campaigns. In summary, to add memory to your crew in the CrewAI framework, equip agents with tools and APIs, define workflows, and utilize Flows for structured orchestration. By leveraging these features, you can enhance memory capabilities and improve overall performance. If you require further assistance or have additional questions, please feel free to reach out. We are dedicated to providing the best support possible to help you succeed with CrewAI. Best regards, [Your Name] Senior Support Representative crewAI ```

Mental Framework for Agent Creation

Think like a manager.

  • what is the goal?
  • what is the process?
  • what kind of people i need to hire to get this job done?
    • their roles,
    • goals,
    • backstories
    • collab effort
  • WHich process and tasks do I expect the individuals on my team to do?

Customer Outreach Campaign

sales_rep_agent = Agent(
    role="Sales Representative",
    goal="Identify high-value leads that match "
         "our ideal customer profile",
    backstory=(
        "As a part of the dynamic sales team at CrewAI, "
        "your mission is to scour "
        "the digital landscape for potential leads. "
        "Armed with cutting-edge tools "
        "and a strategic mindset, you analyze data, "
        "trends, and interactions to "
        "unearth opportunities that others might overlook. "
        "Your work is crucial in paving the way "
        "for meaningful engagements and driving the company's growth."
    ),
    allow_delegation=False,
    verbose=True
)

lead_sales_rep_agent = Agent(
    role="Lead Sales Representative",
    goal="Nurture leads with personalized, compelling communications",
    backstory=(
        "Within the vibrant ecosystem of CrewAI's sales department, "
        "you stand out as the bridge between potential clients "
        "and the solutions they need."
        "By creating engaging, personalized messages, "
        "you not only inform leads about our offerings "
        "but also make them feel seen and heard."
        "Your role is pivotal in converting interest "
        "into action, guiding leads through the journey "
        "from curiosity to commitment."
    ),
    allow_delegation=False,
    verbose=True
)
from crewai_tools import DirectoryReadTool, \
                         FileReadTool, \
                         SerperDevTool

directory_read_tool = DirectoryReadTool(directory='./instructions')
file_read_tool = FileReadTool()
search_tool = SerperDevTool()

from crewai_tools import BaseTool

class SentimentAnalysisTool(BaseTool):
    name: str ="Sentiment Analysis Tool"
    description: str = ("Analyzes the sentiment of text "
         "to ensure positive and engaging communication.")
    
    def _run(self, text: str) -> str:
        # Your custom code tool goes here
        return "positive"

sentiment_analysis_tool = SentimentAnalysisTool()
lead_profiling_task = Task(
    description=(
        "Conduct an in-depth analysis of {lead_name}, "
        "a company in the {industry} sector "
        "that recently showed interest in our solutions. "
        "Utilize all available data sources "
        "to compile a detailed profile, "
        "focusing on key decision-makers, recent business "
        "developments, and potential needs "
        "that align with our offerings. "
        "This task is crucial for tailoring "
        "our engagement strategy effectively.\n"
        "Don't make assumptions and "
        "only use information you absolutely sure about."
    ),
    expected_output=(
        "A comprehensive report on {lead_name}, "
        "including company background, "
        "key personnel, recent milestones, and identified needs. "
        "Highlight potential areas where "
        "our solutions can provide value, "
        "and suggest personalized engagement strategies."
    ),
    tools=[directory_read_tool, file_read_tool, search_tool],
    agent=sales_rep_agent,
)

personalized_outreach_task = Task(
    description=(
        "Using the insights gathered from "
        "the lead profiling report on {lead_name}, "
        "craft a personalized outreach campaign "
        "aimed at {key_decision_maker}, "
        "the {position} of {lead_name}. "
        "The campaign should address their recent {milestone} "
        "and how our solutions can support their goals. "
        "Your communication must resonate "
        "with {lead_name}'s company culture and values, "
        "demonstrating a deep understanding of "
        "their business and needs.\n"
        "Don't make assumptions and only "
        "use information you absolutely sure about."
    ),
    expected_output=(
        "A series of personalized email drafts "
        "tailored to {lead_name}, "
        "specifically targeting {key_decision_maker}."
        "Each draft should include "
        "a compelling narrative that connects our solutions "
        "with their recent achievements and future goals. "
        "Ensure the tone is engaging, professional, "
        "and aligned with {lead_name}'s corporate identity."
    ),
    tools=[sentiment_analysis_tool, search_tool],
    agent=lead_sales_rep_agent,
)
crew = Crew(
    agents=[sales_rep_agent, 
            lead_sales_rep_agent],
    
    tasks=[lead_profiling_task, 
           personalized_outreach_task],
	
    verbose=2,
	memory=True
)

inputs = {
    "lead_name": "DeepLearningAI",
    "industry": "Online Learning Platform",
    "key_decision_maker": "Andrew Ng",
    "position": "CEO",
    "milestone": "product launch"
}

result = crew.kickoff(inputs=inputs)
Final response Subject: Enhancing DeepLearningAI's Impact with Our AI Solutions Dear Andrew Ng, I hope this message finds you well. I wanted to reach out to express my admiration for the incredible work you and the DeepLearningAI team have been doing in democratizing AI education globally. Your commitment to empowering individuals to build AI skills is truly inspiring, and we at CrewAI share the same passion for advancing the field of artificial intelligence. I recently came across the news about the AI Dev 25 conference held on Pi Day and the remarkable advances AI has made in 2024, particularly in improving agentic systems' abilities. It's clear that DeepLearningAI is at the forefront of driving innovation and progress in the AI space. Our team at CrewAI has been developing cutting-edge solutions that can further enhance your training programs and support your learners in applying AI technologies effectively. In particular, we specialize in Explainable AI tools that can help interpret machine learning models for non-technical users, bridging the gap between complex algorithms and practical applications. I believe that our AI solutions align perfectly with DeepLearningAI's mission and goals. By integrating our tools into your programs, we can help create a more accessible and impactful learning experience for individuals seeking to build a foundation in machine learning and AI skills. I would love the opportunity to discuss how our solutions can contribute to DeepLearningAI's continued success and make a positive impact on the AI education landscape. Please let me know a convenient time for a meeting or call to explore this further. Thank you for your time and consideration. I look forward to the possibility of collaborating with you and the DeepLearningAI team. Warm regards, [Your Name] Lead Sales Representative CrewAI This email draft is tailored to resonate with DeepLearningAI's recent achievements, goals, and values, demonstrating a deep understanding of the company's focus on AI education and empowering individuals to build AI skills.

Automate Event Planning

Build a crew that is able to organize an event for us.

from crewai_tools import ScrapeWebsiteTool, SerperDevTool

# Initialize the tools
search_tool = SerperDevTool()
scrape_tool = ScrapeWebsiteTool()

# Agent 1: Venue Coordinator
venue_coordinator = Agent(
    role="Venue Coordinator",
    goal="Identify and book an appropriate venue "
    "based on event requirements",
    tools=[search_tool, scrape_tool],
    verbose=True,
    backstory=(
        "With a keen sense of space and "
        "understanding of event logistics, "
        "you excel at finding and securing "
        "the perfect venue that fits the event's theme, "
        "size, and budget constraints."
    )
)

 # Agent 2: Logistics Manager
logistics_manager = Agent(
    role='Logistics Manager',
    goal=(
        "Manage all logistics for the event "
        "including catering and equipment"
    ),
    tools=[search_tool, scrape_tool],
    verbose=True,
    backstory=(
        "Organized and detail-oriented, "
        "you ensure that every logistical aspect of the event "
        "from catering to equipment setup "
        "is flawlessly executed to create a seamless experience."
    )
)

# Agent 3: Marketing and Communications Agent
marketing_communications_agent = Agent(
    role="Marketing and Communications Agent",
    goal="Effectively market the event and "
         "communicate with participants",
    tools=[search_tool, scrape_tool],
    verbose=True,
    backstory=(
        "Creative and communicative, "
        "you craft compelling messages and "
        "engage with potential attendees "
        "to maximize event exposure and participation."
    )
)

Create strongly types Pydantic classes

from pydantic import BaseModel
# Define a Pydantic model for venue details 
# (demonstrating Output as Pydantic)
class VenueDetails(BaseModel):
    name: str
    address: str
    capacity: int
    booking_status: str

Tasks

venue_task = Task(
    description="Find a venue in {event_city} "
                "that meets criteria for {event_topic}.",
    expected_output="All the details of a specifically chosen"
                    "venue you found to accommodate the event.",
    human_input=True,
    output_json=VenueDetails, # use pydantic class
    output_file="venue_details.json",  # Outputs the venue details as a JSON file
    agent=venue_coordinator
)

logistics_task = Task(
    description="Coordinate catering and "
                 "equipment for an event "
                 "with {expected_participants} participants "
                 "on {tentative_date}.",
    expected_output="Confirmation of all logistics arrangements "
                    "including catering and equipment setup.",
    human_input=True,
    async_execution=True, # perform task parallel to marketting task since both of them are mutually exclusive
    agent=logistics_manager
)

marketing_task = Task(
    description="Promote the {event_topic} "
                "aiming to engage at least"
                "{expected_participants} potential attendees.",
    expected_output="Report on marketing activities "
                    "and attendee engagement formatted as markdown.",
    async_execution=True,
    output_file="marketing_report.md",  # Outputs the report as a text file
    agent=marketing_communications_agent
)

Create the crew

# Define the crew with agents and tasks
event_management_crew = Crew(
    agents=[venue_coordinator, 
            logistics_manager, 
            marketing_communications_agent],
    
    tasks=[venue_task, 
           logistics_task, 
           marketing_task],
    
    verbose=True
)

event_details = {
    'event_topic': "Tech Innovation Conference",
    'event_description': "A gathering of tech innovators "
                         "and industry leaders "
                         "to explore future technologies.",
    'event_city': "San Francisco",
    'tentative_date': "2024-09-15",
    'expected_participants': 500,
    'budget': 20000,
    'venue_type': "Conference Hall"
}

result = event_management_crew.kickoff(inputs=event_details)

Multi-Agent collaboration for financial analysis

  • The Process class helps to delegate the workflow to the Agents (kind of like a Manager at work)
  • In the example below, it will run this hierarchically. manager_llm lets you choose the “manager” LLM.
from crewai import Crew, Process
from langchain_openai import ChatOpenAI

# Define the crew with agents and tasks
financial_trading_crew = Crew(
    agents=[data_analyst_agent, 
            trading_strategy_agent, 
            execution_agent, 
            risk_management_agent],
    
    tasks=[data_analysis_task, 
           strategy_development_task, 
           execution_planning_task, 
           risk_assessment_task],
    
    manager_llm=ChatOpenAI(model="gpt-3.5-turbo", 
                           temperature=0.7),
    process=Process.hierarchical, # manager automatically delegates to relevant people
    verbose=True
)

Build a crew to tailor job applications

from crewai_tools import (
  FileReadTool,
  ScrapeWebsiteTool,
  MDXSearchTool,
  SerperDevTool
)

search_tool = SerperDevTool()
scrape_tool = ScrapeWebsiteTool()
read_resume = FileReadTool(file_path='./fake_resume.md')
semantic_search_resume = MDXSearchTool(mdx='./fake_resume.md')
# Agent 1: Researcher
researcher = Agent(
    role="Tech Job Researcher",
    goal="Make sure to do amazing analysis on "
         "job posting to help job applicants",
    tools = [scrape_tool, search_tool],
    verbose=True,
    backstory=(
        "As a Job Researcher, your prowess in "
        "navigating and extracting critical "
        "information from job postings is unmatched."
        "Your skills help pinpoint the necessary "
        "qualifications and skills sought "
        "by employers, forming the foundation for "
        "effective application tailoring."
    )
)

# Agent 2: Profiler
profiler = Agent(
    role="Personal Profiler for Engineers",
    goal="Do increditble research on job applicants "
         "to help them stand out in the job market",
    tools = [scrape_tool, search_tool,
             read_resume, semantic_search_resume],
    verbose=True,
    backstory=(
        "Equipped with analytical prowess, you dissect "
        "and synthesize information "
        "from diverse sources to craft comprehensive "
        "personal and professional profiles, laying the "
        "groundwork for personalized resume enhancements."
    )
)

# Agent 3: Resume Strategist
resume_strategist = Agent(
    role="Resume Strategist for Engineers",
    goal="Find all the best ways to make a "
         "resume stand out in the job market.",
    tools = [scrape_tool, search_tool,
             read_resume, semantic_search_resume],
    verbose=True,
    backstory=(
        "With a strategic mind and an eye for detail, you "
        "excel at refining resumes to highlight the most "
        "relevant skills and experiences, ensuring they "
        "resonate perfectly with the job's requirements."
    )
)

# Agent 4: Interview Preparer
interview_preparer = Agent(
    role="Engineering Interview Preparer",
    goal="Create interview questions and talking points "
         "based on the resume and job requirements",
    tools = [scrape_tool, search_tool,
             read_resume, semantic_search_resume],
    verbose=True,
    backstory=(
        "Your role is crucial in anticipating the dynamics of "
        "interviews. With your ability to formulate key questions "
        "and talking points, you prepare candidates for success, "
        "ensuring they can confidently address all aspects of the "
        "job they are applying for."
    )
)

Tasks

# Task for Researcher Agent: Extract Job Requirements
research_task = Task(
    description=(
        "Analyze the job posting URL provided ({job_posting_url}) "
        "to extract key skills, experiences, and qualifications "
        "required. Use the tools to gather content and identify "
        "and categorize the requirements."
    ),
    expected_output=(
        "A structured list of job requirements, including necessary "
        "skills, qualifications, and experiences."
    ),
    agent=researcher,
    async_execution=True
)

# Task for Profiler Agent: Compile Comprehensive Profile
profile_task = Task(
    description=(
        "Compile a detailed personal and professional profile "
        "using the GitHub ({github_url}) URLs, and personal write-up "
        "({personal_writeup}). Utilize tools to extract and "
        "synthesize information from these sources."
    ),
    expected_output=(
        "A comprehensive profile document that includes skills, "
        "project experiences, contributions, interests, and "
        "communication style."
    ),
    agent=profiler,
    async_execution=True
)

# Task for Resume Strategist Agent: Align Resume with Job Requirements
# You can pass a list of tasks as context to a task.
# The task then takes into account the output of those tasks in its execution.
# The task will not run until it has the output(s) from those tasks.
resume_strategy_task = Task(
    description=(
        "Using the profile and job requirements obtained from "
        "previous tasks, tailor the resume to highlight the most "
        "relevant areas. Employ tools to adjust and enhance the "
        "resume content. Make sure this is the best resume even but "
        "don't make up any information. Update every section, "
        "inlcuding the initial summary, work experience, skills, "
        "and education. All to better reflrect the candidates "
        "abilities and how it matches the job posting."
    ),
    expected_output=(
        "An updated resume that effectively highlights the candidate's "
        "qualifications and experiences relevant to the job."
    ),
    output_file="tailored_resume.md",
    context=[research_task, profile_task],
    agent=resume_strategist
)

# Task for Interview Preparer Agent: Develop Interview Materials
interview_preparation_task = Task(
    description=(
        "Create a set of potential interview questions and talking "
        "points based on the tailored resume and job requirements. "
        "Utilize tools to generate relevant questions and discussion "
        "points. Make sure to use these question and talking points to "
        "help the candiadte highlight the main points of the resume "
        "and how it matches the job posting."
    ),
    expected_output=(
        "A document containing key questions and talking points "
        "that the candidate should prepare for the initial interview."
    ),
    output_file="interview_materials.md",
    context=[research_task, profile_task, resume_strategy_task],
    agent=interview_preparer
)

Crew

job_application_crew = Crew(
    agents=[researcher,
            profiler,
            resume_strategist,
            interview_preparer],

    tasks=[research_task,
           profile_task,
           resume_strategy_task,
           interview_preparation_task],

    verbose=True
)