{"id":86011,"date":"2025-02-13T15:50:51","date_gmt":"2025-02-13T15:50:51","guid":{"rendered":"https:\/\/peraltafinancing.com\/analytics\/building-a-resume-review-agent-system-with-crewai\/"},"modified":"2025-02-13T15:50:51","modified_gmt":"2025-02-13T15:50:51","slug":"building-a-resume-review-agent-system-with-crewai","status":"publish","type":"post","link":"https:\/\/fivemor.com\/?p=86011","title":{"rendered":"Building a Resume Review Agent System with CrewAI"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div id=\"article-start\">\n<p>Crafting <a href=\"https:\/\/www.analyticsvidhya.com\/blog\/2023\/04\/data-scientist-resume-guide\/\" target=\"_blank\" rel=\"noreferrer noopener\">the perfect resume<\/a> is a tedious task \u2013 whether you\u2019re a fresh graduate stepping into the job market, or a seasoned professional aiming for that next big career move. But what if you could have a personal resume reviewer at your fingertips \u2013 without spending any money on LinkedIn Premium or hiring a pricey professional? Enter the world of AI-powered solutions for resume optimisation! With the power of Large Language Models (LLMs) and innovative libraries like <a href=\"https:\/\/www.analyticsvidhya.com\/blog\/2024\/10\/email-sorting-using-crewai\/\" target=\"_blank\" rel=\"noreferrer noopener\">CrewAI<\/a>, you can now build your very own resume review agent. In this blog, I\u2019ll show you how to build an agentic system with CrewAI for reviewing and optimizing resumes.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-structure-of-the-resume-reviewer-agentic-system\">Structure of the Resume Reviewer Agentic System<\/h2>\n<p>Before getting into the coding part, it is important to understand how to structure an AI system for resume optimisation. The best way to do this would be by noting down the tasks that we need the agent to perform. So, I\u2019m assuming you have already made a resume (else you can download one resume from <a href=\"https:\/\/huggingface.co\/spaces\/AV-AV\/resume-agent\/tree\/main\" target=\"_blank\" rel=\"nofollow noopener\">here<\/a>). Now, we would want our resume review agentic system to perform 3 tasks:<\/p>\n<ol class=\"wp-block-list\">\n<li>Read through and provide feedback on the resume.<\/li>\n<li>Improve or re-write the resume based on the feedback.<\/li>\n<li>Suggest appropriate jobs based on the improved resume and specified location.<\/li>\n<\/ol>\n<p>Now that we have our requirements clearly written, we can decide on the number of agents and their tasks. Ideally, it is recommended we go with one task per agent to avoid overburdening any agent. This translates to us building 3 agents for our CrewAI-based resume review agent system:<\/p>\n<ol class=\"wp-block-list\">\n<li>The first agent will provide feedback on the resume.<br \/><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-1.webp\" alt=\"\"\/><\/li>\n<li>The second agent will improve the resume based on the feedback.<br \/><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-2.webp\" alt=\"\"\/><\/li>\n<li>And, the third agent would suggest appropriate jobs based on the improved resume and specified location.<br \/><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-3.webp\" alt=\"\"\/><\/li>\n<\/ol>\n<p><em>Also Read: <a href=\"https:\/\/www.analyticsvidhya.com\/blog\/2025\/02\/rag-based-research-assistant-using-o3-mini-and-crewai\/\" target=\"_blank\" rel=\"noreferrer noopener\">Building a RAG-Based Research Assistant Using o3-mini and CrewAI<\/a><\/em><\/p>\n<p>Now that you understand how we can use AI for resume optimisation, let\u2019s jump to the Python code and build our resume reviewer agent.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-python-code-to-build-resume-reviewer-agentic-system-with-crewai\">Python Code to Build Resume Reviewer Agentic System with CrewAI<\/h2>\n<p>Here are the step-by-step instructions to build a resume review agent with CrewAI. To better follow these steps, I suggest you watch this hands-on video parallelly.<\/p>\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\">\n<p>\n<iframe loading=\"lazy\" title=\"10x Your Resume with this Resume Review Agentic System with CrewAI!!\" width=\"840\" height=\"473\" src=\"https:\/\/www.youtube.com\/embed\/YNYCaXtXl60?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/p>\n<\/figure>\n<p>So let\u2019s begin!<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-step-1-install-and-import-relevant-libraries\">Step 1: Install and Import Relevant Libraries<\/h3>\n<p>We will begin with installing the PyMuPDF, python-docx and most importantly CrewAI.<\/p>\n<ul class=\"wp-block-list\">\n<li>The PyMuPDF library is used for reading PDF documents.<\/li>\n<li>The python-docx library is used for creating, reading, and modifying Microsoft Word (.docx) documents.<\/li>\n<li>Also, ensure CrewAI is installed in your system. It is one of the most popular agentic frameworks to build multi-agent systems.<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>#!pip install PyMuPDF\n#!pip install python-docx\n#!pip install crewai crewai-tools<\/code><\/pre>\n<h3 class=\"wp-block-heading\" id=\"h-step-2-loading-the-resume\">Step 2: Loading the Resume<\/h3>\n<p>The next step is to import the fitz and docx modules. Here \u2018fitz\u2019 is the name you use to import PyMuPDF, and \u2018docx\u2019 is to import the python-docx library.<\/p>\n<pre class=\"wp-block-code\"><code>import fitz\u00a0 # PyMuPDF for PDF processing\nimport docx\u00a0 # python-docx for DOCX processing<\/code><\/pre>\n<p>We will now define the following three functions to enable our agentic system to extract text from resumes saved in various formats.<\/p>\n<ul class=\"wp-block-list\">\n<li>The first function \u2013 \u201c<em>extract_text_from_pdf<\/em>\u201d will extract contents from the resume in PDF format.<\/li>\n<li>The second function \u2013 \u201c<em>extract_text_from_docx<\/em>\u201d will extract contents from the resume in docx format.<\/li>\n<li>The third function \u2013 \u201c<em>extract_text_from_resume<\/em>\u201d wraps the first two functions and uses the respective function based on whether the document is a PDF or docx.<\/li>\n<\/ul>\n<p>Let\u2019s run this.<\/p>\n<pre class=\"wp-block-code\"><code>def extract_text_from_pdf(file_path):\n\u00a0\u00a0\u00a0\u00a0\"\"\"Extracts text from a PDF file using PyMuPDF.\"\"\"\n\u00a0\u00a0\u00a0\u00a0doc = fitz.open(file_path)\n\u00a0\u00a0\u00a0\u00a0text = \"\"\n\u00a0\u00a0\u00a0\u00a0for page in doc:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0text += page.get_text()\n\u00a0\u00a0\u00a0\u00a0return text\n\ndef extract_text_from_docx(file_path):\n\u00a0\u00a0\u00a0\u00a0\"\"\"Extracts text from a DOCX file using python-docx.\"\"\"\n\u00a0\u00a0\u00a0\u00a0doc = docx.Document(file_path)\n\u00a0\u00a0\u00a0\u00a0fullText = []\n\u00a0\u00a0\u00a0\u00a0for para in doc.paragraphs:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fullText.append(para.text)\n\u00a0\u00a0\u00a0\u00a0return \"\\n\".join(fullText)\n\ndef extract_text_from_resume(file_path):\n\u00a0\u00a0\u00a0\u00a0\"\"\"Determines file type and extracts text.\"\"\"\n\u00a0\u00a0\u00a0\u00a0if file_path.endswith(\".pdf\"):\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return extract_text_from_pdf(file_path)\n\u00a0\u00a0\u00a0\u00a0elif file_path.endswith(\".docx\"):\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return extract_text_from_docx(file_path)\n\u00a0\u00a0\u00a0\u00a0else:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"Unsupported file format.\"<\/code><\/pre>\n<p>Next, let\u2019s test this function with 2 resumes. The first one will be a resume in PDF format of a person named Bruce Wayne (not the superhero).<\/p>\n<pre class=\"wp-block-code\"><code>res1 = extract_text_from_resume('\/Users\/admin\/Desktop\/YT Long\/Bruce Wayne.pdf')\nprint(res1)<\/code><\/pre>\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"872\" height=\"694\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-4.webp\" alt=\"\" class=\"wp-image-221388\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-4.webp 872w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-4-300x239.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-4-768x611.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-4-150x119.webp 150w\" sizes=\"(max-width: 872px) 100vw, 872px\"\/><\/figure>\n<p>Now, we view the second resume.<\/p>\n<pre class=\"wp-block-code\"><code>res2 = extract_text_from_resume('\/Users\/admin\/Desktop\/YT Long\/Anita Sanjok.docx')\nprint(res2)<\/code><\/pre>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"872\" height=\"533\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-5.webp\" alt=\"\" class=\"wp-image-221389\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-5.webp 872w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-5-300x183.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-5-768x469.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-5-150x92.webp 150w\" sizes=\"auto, (max-width: 872px) 100vw, 872px\"\/><\/figure>\n<h3 class=\"wp-block-heading\" id=\"h-step-3-preparing-the-agents-and-tasks\">Step 3: Preparing the Agents and Tasks<\/h3>\n<p>This step is where CrewAI enters the scene. We will now import crewai and start building the agentic system. For this, we will need 3 components from CrewAI, namely- Agent, Task and Crew.<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Agent <\/strong>represents an AI assistant with a specific role and goal.<\/li>\n<li><strong>Task <\/strong>defines an objective that the agent needs to accomplish.<\/li>\n<li>And finally, <strong>Crew <\/strong>is used to bundle multiple agents and their respective tasks together to work and achieve the set objective.<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>import os\nfrom crewai import Agent, Task, Crew<\/code><\/pre>\n<p>Next, we need to add the OpenAI API key, which I have saved in a separate file. So, we need to read the API key from the file and set it as an environment variable. In this case we are using GPT-4o-mini as the LLM.<\/p>\n<pre class=\"wp-block-code\"><code>with open('\/Users\/apoorv\/Desktop\/AV\/Code\/GAI\/keys\/openai.txt', 'r') as file:\n    openai_key = file.read()\nos.environ['OPENAI_API_KEY'] = openai_key\nos.environ[\"OPENAI_MODEL_NAME\"] = 'gpt-4o-mini'<\/code><\/pre>\n<p>Next, we define the agents and their respective tasks.<\/p>\n<h4 class=\"wp-block-heading\" id=\"h-1-resume-feedback-agent\">1. Resume Feedback Agent<\/h4>\n<p>Our first agent will be the \u201cresume_feedback\u201d agent. The agent class has some parameters which help us define the objective of the agent. Lets look at them:<\/p>\n<ul class=\"wp-block-list\">\n<li>The <strong>role <\/strong>parameter defines the agent\u2019s function and expertise within the crew. Here the agent\u2019s role is that of a \u201cProfessional Resume Advisor\u201d.<\/li>\n<li>The <strong>goal <\/strong>is the sole objective that guides agents\u2019 decision-making.<\/li>\n<li><strong>Verbose = True<\/strong> enables detailed execution logs for debugging.<\/li>\n<li>The <strong>backstory <\/strong>gives a detailed description of the characteristics of the agent. It is similar to defining the context and personality of the agent.<\/li>\n<\/ul>\n<p>Let\u2019s run this.<\/p>\n<pre class=\"wp-block-code\"><code># Agent 1: Resume Strategist\nresume_feedback = Agent(\n    role=\"Professional Resume Advisor\",\n    goal=\"Give feedback on the resume to make it stand out in the job market.\",\n    verbose=True,\n    backstory=\"With a strategic mind and an eye for detail, you excel at providing feedback on resumes to highlight the most relevant skills and experiences.\"\n    )<\/code><\/pre>\n<p>Now let\u2019s define the task for the resume_feedback agent. The task is nothing but the specific assignment that needs to be completed by the agent to which this task is assigned.<\/p>\n<ul class=\"wp-block-list\">\n<li>We will add a detailed <strong>description <\/strong>which should be a clear, and concise statement of what the task entails. You must note that the {resume} written in curly braces is a placeholder that will be dynamically replaced with an actual resume input when the task runs. You can pause reading here, go through the description and make changes as per your requirements.<\/li>\n<li>The <strong>expected output<\/strong> parameter helps us determine the format of the output. You can get the output in various formats such as\u00a0 json, markdown or bullet points<\/li>\n<li>The <strong>agent <\/strong>parameter highlights the name of the agent to which this task is assigned.<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code># Task for Resume Strategist Agent: Align Resume with Job Requirements\nresume_feedback_task = Task(\n    description=(\n        \"\"\"Give feedback on the resume to make it stand out for recruiters. \n        Review every section, inlcuding the summary, work experience, skills, and education. Suggest to add relevant sections if they are missing.  \n        Also give an overall score to the resume out of 10.  This is the resume: {resume}\"\"\"\n    ),\n    expected_output=\"The overall score of the resume followed by the feedback in bullet points.\",\n    agent=resume_feedback\n)<\/code><\/pre>\n<h4 class=\"wp-block-heading\" id=\"h-2-resume-advisor-agent\">2. Resume Advisor Agent<\/h4>\n<p>We will do the same for the next agent, that is, the resume_advisor agent which writes a resume incorporating the feedback from the resume_feedback agent and defines its task in the resume_advisor_task. Feel free to go through it.<\/p>\n<pre class=\"wp-block-code\"><code># Agent 2: Resume Strategist\nresume_advisor = Agent(\n    role=\"Professional Resume Writer\",\n    goal=\"Based on the feedback recieved from Resume Advisor, make changes to the resume to make it stand out in the job market.\",\n    verbose=True,\n    backstory=\"With a strategic mind and an eye for detail, you excel at refining resumes based on the feedback to highlight the most relevant skills and experiences.\"\n)\n# Task for Resume Strategist Agent: Align Resume with Job Requirements\nresume_advisor_task = Task(\n    description=(\n        \"\"\"Rewrite the resume based on the feedback to make it stand out for recruiters. You can adjust and enhance the resume but don't make up facts. \n        Review and update every section, including the summary, work experience, skills, and education to better reflect the candidates abilities. This is the resume: {resume}\"\"\"\n    ),\n    expected_output= \"Resume in markdown format that effectively highlights the candidate's qualifications and experiences\",\n    # output_file=\"improved_resume.md\",\n    context=[resume_feedback_task],\n    agent=resume_advisor\n)<\/code><\/pre>\n<h4 class=\"wp-block-heading\" id=\"h-3-job-researcher-agent\">3. Job Researcher Agent<\/h4>\n<p>Now, the third agent should be able to suggest jobs based on the qualifications and the preferred job location of the candidate. For this, we will grant a tool to our next agent that enables it to search the internet for job postings at a location.<\/p>\n<p>We will use CrewAI\u2019s SerperDevTool which integrates with Serper.dev for real-time web search functionality.<\/p>\n<pre class=\"wp-block-code\"><code>from crewai_tools import SerperDevTool<\/code><\/pre>\n<p>Now we import the API key from Serper. You can generate your free Serper API key from <a href=\"https:\/\/serper.dev\/api-key\" target=\"_blank\" rel=\"nofollow noopener\">https:\/\/serper.dev\/api-key<\/a>.<\/p>\n<pre class=\"wp-block-code\"><code>with open('\/Users\/apoorv\/Desktop\/AV\/Code\/GAI\/keys\/serper.txt', 'r') as file:\n    serper_key = file.read()\n\nos.environ[\"SERPER_API_KEY\"] = serper_key\n\nsearch_tool = SerperDevTool()<\/code><\/pre>\n<p>Now we define our final agent which is the job_researcher agent. This agent will search for jobs at the location based on the resume improved by the resume_advisor agent. The structure of the agent is similar to the above agents with the only difference being the addition of a new parameter, which is tools. Tools help you assign the necessary tools to an agent which helps in the completion of the task. Also, in the task we have added {location} in curly braces for dynamically changing it.<\/p>\n<pre class=\"wp-block-code\"><code># Agent 3: Researcher\njob_researcher = Agent(\n    role = \"Senior Recruitment Consultant\",\n    goal = \"Find the 5 most relevant, recently posted jobs based on the improved resume recieved from resume advisor and the location preference\",\n    tools = [search_tool],\n    verbose = True,\n    backstory = \"\"\"As a senior recruitment consultant your prowess in finding the most relevant jobs based on the resume and location preference is unmatched. \n    You can scan the resume efficiently, identify the most suitable job roles and search for the best suited recently posted open job positions at the preffered location.\"\"\"\n    )\nresearch_task = Task(\n    description = \"\"\"Find the 5 most relevant recent job postings based on the resume recieved from resume advisor and location preference. This is the preferred location: {location} . \n    Use the tools to gather relevant content and shortlist the 5 most relevant, recent, job openings. Also provide the links to the job postings.\"\"\",\n    expected_output=(\n        \"A bullet point list of the 5 job openings, with the appropriate links and detailed description about each job, in markdown format\" \n    ),\n#    output_file=\"relevant_jobs.md\",\n    agent=job_researcher\n)<\/code><\/pre>\n<h3 class=\"wp-block-heading\" id=\"h-step-4-creating-the-crew-and-reviewing-the-output\">Step 4: Creating the Crew and Reviewing the Output<\/h3>\n<p>Now we reach the final step where we bundle the agents and the tasks in order within the Crew functionality of crewAI. It has 3 parameters:<\/p>\n<ul class=\"wp-block-list\">\n<li>The <strong>agents <\/strong>parameter lists the agents in the order in which they will be called and executed.<\/li>\n<li>The <strong>tasks <\/strong>argument lists the tasks defined for each agent in the order of execution.<\/li>\n<li>And finally, <strong>Verbose=True<\/strong> lets you see the detailed output so you can see what the agents are doing.<\/li>\n<\/ul>\n<p>Let\u2019s run this.<\/p>\n<pre class=\"wp-block-code\"><code>crew = Crew(\n    agents=[resume_feedback, resume_advisor, job_researcher],\n    tasks=[resume_feedback_task, resume_advisor_task, research_task],\n    verbose=True\n)<\/code><\/pre>\n<p>And we finally launched our agentic system with the kickoff functionality.<\/p>\n<ul class=\"wp-block-list\">\n<li>crew.kickoff(inputs={\u2026}): Starts the CrewAI execution, and takes in 2 inputs, resume and location.<\/li>\n<li>\u201cresume\u201d: res2: Helps you specify the resume for which the agentix system needs to work. In our case, we are working on Anita\u2019s resume.<\/li>\n<li>\u201clocation\u201d: \u2018New Delhi\u2019: Specifies where Anita is looking for a job. And this will be New Delhi in our case.<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>result1 = crew.kickoff(inputs={\"resume\": res2, \"location\": 'New Delhi'})<\/code><\/pre>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"872\" height=\"538\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-6.webp\" alt=\"\" class=\"wp-image-221390\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-6.webp 872w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-6-300x185.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-6-768x474.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-6-150x93.webp 150w\" sizes=\"auto, (max-width: 872px) 100vw, 872px\"\/><\/figure>\n<p>Seems like our crew functions perfectly. Let\u2019s print each agent\u2019s output individually.<\/p>\n<pre class=\"wp-block-code\"><code>from IPython.display import Markdown, display<\/code><\/pre>\n<p>First, we will print resume_feedback agent\u2019s output.<\/p>\n<pre class=\"wp-block-code\"><code>markdown_content = resume_feedback_task.output.raw.strip(\"```markdown\").strip(\"```\").strip()\n# Display the Markdown content\ndisplay(Markdown(markdown_content))<\/code><\/pre>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"872\" height=\"625\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-7-1.webp\" alt=\"\" class=\"wp-image-221391\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-7-1.webp 872w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-7-1-300x215.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-7-1-768x550.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-7-1-150x108.webp 150w\" sizes=\"auto, (max-width: 872px) 100vw, 872px\"\/><\/figure>\n<p>Then we print the resume_advisor agent\u2019s output.<\/p>\n<pre class=\"wp-block-code\"><code>markdown_content = resume_advisor_task.output.raw.strip(\"```markdown\").strip(\"```\").strip()\n# Display the Markdown content\ndisplay(Markdown(markdown_content))<\/code><\/pre>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"872\" height=\"537\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-8.webp\" alt=\"Build an AI Resume Review Agentic System with CrewAI\" class=\"wp-image-221392\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-8.webp 872w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-8-300x185.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-8-768x473.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-8-150x92.webp 150w\" sizes=\"auto, (max-width: 872px) 100vw, 872px\"\/><\/figure>\n<p>And finally, we print the research_task agent\u2019s output.<\/p>\n<pre class=\"wp-block-code\"><code>markdown_content = research_task.output.raw.strip(\"```markdown\").strip(\"```\").strip()\n# Display the Markdown content\ndisplay(Markdown(markdown_content))<\/code><\/pre>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"872\" height=\"389\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-9.webp\" alt=\"Build an AI Resume Review Agentic System with CrewAI\" class=\"wp-image-221393\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-9.webp 872w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-9-300x134.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-9-768x343.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-9-150x67.webp 150w\" sizes=\"auto, (max-width: 872px) 100vw, 872px\"\/><\/figure>\n<p>And there you have it. Your fully functional resume review agentic system with CrewAI.<\/p>\n<p><em>Also Read: <a href=\"https:\/\/www.analyticsvidhya.com\/blog\/2024\/12\/automating-email-responses-using-crewai\/\" target=\"_blank\" rel=\"noreferrer noopener\">Automating Email Responses Using CrewAI<\/a><\/em><\/p>\n<h2 class=\"wp-block-heading\" id=\"h-turning-your-crewai-resume-reviewer-agentic-system-into-a-web-app\">Turning your CrewAI Resume Reviewer Agentic System into a Web App<\/h2>\n<p>One interesting thing we can do with our AI-driven resume optimization system is building a web-application for it.<\/p>\n<p>Here\u2019s the interface of the app I built:<\/p>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"872\" height=\"438\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-10.webp\" alt=\"Build an AI Resume Review Agentic System with CrewAI\" class=\"wp-image-221394\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-10.webp 872w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-10-300x151.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-10-768x386.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-10-150x75.webp 150w\" sizes=\"auto, (max-width: 872px) 100vw, 872px\"\/><\/figure>\n<p>We have wrapped our code for resume review agent with CrewAI in Gradio and hosted the final product on <a href=\"https:\/\/huggingface.co\/spaces\/AV-AV\/resume-agent\" target=\"_blank\" rel=\"nofollow noopener\">Hugging Face Spaces<\/a> which has a liberal free tier.<\/p>\n<p>Here\u2019s how it works:<\/p>\n<ol class=\"wp-block-list\">\n<li>First, drop your resume in a PDF or Word doc. The name of our candidate here is Bruce Wayne.<br \/><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-11.webp\" alt=\"\"\/><\/li>\n<li>Next, select the preferred job location for Bruce who is our candidate. Let\u2019s say San Francisco<br \/><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-12.webp\" alt=\"\"\/><\/li>\n<li>And hit Submit.<br \/><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-13.webp\" alt=\"\"\/><\/li>\n<\/ol>\n<p>Since this is using LLMs at the backend, GPT-4o-mini in our case, it will take some time to evaluate your resume, give a score, and feedback.<\/p>\n<p>And as you can see, Bruce got a score of 7\/10. And he has received in-depth section-wise feedback from the CrewAI agentic system. Along with that he also got the revised resume and even suggestions for jobs in San Francisco. How amazing is this!<\/p>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"872\" height=\"360\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-14.webp\" alt=\"Build an AI Resume Review Agentic System with CrewAI\" class=\"wp-image-221398\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-14.webp 872w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-14-300x124.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-14-768x317.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-14-150x62.webp 150w\" sizes=\"auto, (max-width: 872px) 100vw, 872px\"\/><\/figure>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"872\" height=\"413\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-15.webp\" alt=\"Build an AI Resume Review Agentic System with CrewAI\" class=\"wp-image-221399\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-15.webp 872w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-15-300x142.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-15-768x364.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-15-150x71.webp 150w\" sizes=\"auto, (max-width: 872px) 100vw, 872px\"\/><\/figure>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"872\" height=\"232\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-16.webp\" alt=\"Build an AI Resume Review Agentic System with CrewAI\" class=\"wp-image-221400\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-16.webp 872w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-16-300x80.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-16-768x204.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-16-150x40.webp 150w\" sizes=\"auto, (max-width: 872px) 100vw, 872px\"\/><\/figure>\n<p>If you want to replicate this CrewAI agentic system in the form of this web-application, you can simply clone this repository or duplicate this space and change the API key. Here\u2019s how that\u2019s done:<\/p>\n<ol class=\"wp-block-list\">\n<li>First, click on <em>Settings<\/em> and then click on <em>Clone repository <\/em>in the dropdown.<br \/><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-17.webp\" alt=\"\"\/><\/li>\n<li>Then scroll down to the variable and secrets setting.<br \/><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-18.webp\" alt=\"\"\/><\/li>\n<li>You will already find the variables we created for the OpenAI key and Serper_Key. Simply click on <em>Replace <\/em>and add the API Key in the Value. Then click <em>Save.<\/em><br \/><img decoding=\"async\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-19.webp\" alt=\"\"\/><\/li>\n<\/ol>\n<p>Also, you can get the code to build this app from the CrewAI agentic system along with the Gradio code in the app.py file in <a href=\"https:\/\/huggingface.co\/spaces\/AV-AV\/resume-agent\/blob\/main\/app.py\" target=\"_blank\" rel=\"nofollow noopener\">files<\/a> section of Hugging Face spaces.<\/p>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"767\" height=\"77\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-23.webp\" alt=\"\" class=\"wp-image-221409\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-23.webp 767w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-23-300x30.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-23-150x15.webp 150w\" sizes=\"auto, (max-width: 767px) 100vw, 767px\"\/><\/figure>\n<p>The click on app.py<\/p>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"872\" height=\"144\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-21.webp\" alt=\"Build an AI Resume Review Agentic System with CrewAI\" class=\"wp-image-221407\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-21.webp 872w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-21-300x50.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-21-768x127.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-21-150x25.webp 150w\" sizes=\"auto, (max-width: 872px) 100vw, 872px\"\/><\/figure>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"872\" height=\"896\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-22.webp\" alt=\"Build an AI Resume Review Agentic System with CrewAI\" class=\"wp-image-221408\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-22.webp 872w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-22-292x300.webp 292w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-22-768x789.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/02\/Image-22-150x154.webp 150w\" sizes=\"auto, (max-width: 872px) 100vw, 872px\"\/><\/figure>\n<h2 class=\"wp-block-heading\" id=\"h-possible-improvements-on-the-resume-reviewer-agent\">Possible Improvements on the Resume Reviewer Agent<\/h2>\n<p>Like any other agentic system, there is a lot of scope for expanding the resume review agent we\u2019ve just built with CrewAI. Here are a few tips to tinker around with:<\/p>\n<ul class=\"wp-block-list\">\n<li>You can build a fourth agent that customizes the resume, based on the job you select.<\/li>\n<li>You can build another agent in the end to generate a cover letter customized for the job you want to apply.<\/li>\n<li>You can also build another agent that will help you prepare for the job you select.<\/li>\n<\/ul>\n<p><em>Also Read: <a href=\"https:\/\/www.analyticsvidhya.com\/blog\/2024\/10\/ai-pair-programmer\/\" target=\"_blank\" rel=\"noreferrer noopener\">How to Build an AI Pair Programmer with CrewAI?<\/a><\/em><\/p>\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion<\/h2>\n<p>Building a resume reviewer agentic system is a game-changer for job seekers looking for resume optimisation with AI-driven insights. This system efficiently analyzes, refines, and suggests jobs based on personalized resume feedback\u2014all at a fraction of the cost of premium resume optimizing services. With CrewAI\u2019s agentic capabilities, we\u2019ve streamlined resume optimisation into an automated yet highly effective process. But this is just the beginning! CrewAI is working on automating all kinds of tasks and bringing much-needed efficiency to all industries. It is indeed exciting times ahead!<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-frequently-asked-questions\">Frequently Asked Questions<\/h2>\n<div class=\"schema-faq wp-block-yoast-faq-block\">\n<div class=\"schema-faq-section\" id=\"faq-question-1739450870676\"><strong class=\"schema-faq-question\">Q1. What is CrewAI?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">A. CrewAI is an open-source Python framework designed to support the development and management of multi-agent AI systems. Using CrewAI, you can build LLM-backed AI agents that can autonomously make decisions within an environment based on the variables present.<\/p>\n<\/p><\/div>\n<div class=\"schema-faq-section\" id=\"faq-question-1739450880280\"><strong class=\"schema-faq-question\">Q2. Can AI fix my resume?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">A. Yes! An AI agent like the resume reviewer system we built using CrewAI, can help optimize your resume. It can even recommend the right jobs for you based on your qualifications, skills, and location.<\/p>\n<\/p><\/div>\n<div class=\"schema-faq-section\" id=\"faq-question-1739450887163\"><strong class=\"schema-faq-question\">Q3. What tasks can CrewAI do?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">A. CrewAI can perform various tasks, including reviewing resumes, writing resumes, searching for jobs, applying for jobs, preparing cover letters and more.<\/p>\n<\/p><\/div>\n<div class=\"schema-faq-section\" id=\"faq-question-1739450896388\"><strong class=\"schema-faq-question\">Q4.\u00a0 In what format should my resume be?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">A. In order to use this resume reviewer agent, the uploaded resume must be in either PDF (.pdf) or Word (.docx) formats.<\/p>\n<\/p><\/div>\n<div class=\"schema-faq-section\" id=\"faq-question-1739450911860\"><strong class=\"schema-faq-question\">Q5. What AI model is used to review resumes?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">A. Our resume reviewer agent uses OpenAI\u2019s GPT-4o-mini for text processing and Serper.dev for real-time job search.<\/p>\n<\/p><\/div>\n<div class=\"schema-faq-section\" id=\"faq-question-1739450921411\"><strong class=\"schema-faq-question\">Q6. How accurate are the job recommendations provided by the system?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">A. The job recommendations depend on the quality of the resume and the AI\u2019s ability to match skills with job postings. Using Serper.dev, the system retrieves the most relevant and recent job listings.<\/p>\n<\/p><\/div>\n<div class=\"schema-faq-section\" id=\"faq-question-1739450930525\"><strong class=\"schema-faq-question\">Q7. Do I need coding knowledge to build a resume review agent?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">A. Basic Python programming skills are required to set up and modify the CrewAI-based system. However, you can clone a pre-built repository and update the API keys to run it without deep coding expertise.<\/p>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"border-top py-3 author-info my-4\">\n<div class=\"author-card d-flex align-items-center\">\n<div class=\"flex-shrink-0 overflow-hidden\">\n                                    <a href=\"https:\/\/www.analyticsvidhya.com\/blog\/author\/apoorv\/\" class=\"text-decoration-none active-avatar\"><br \/>\n                                                                       <img decoding=\"async\" src=\"https:\/\/av-eks-lekhak.s3.amazonaws.com\/media\/lekhak-profile-images\/converted_image_pC25LLw.webp\" width=\"48\" height=\"48\" alt=\"Apoorv Vishnoi\" loading=\"lazy\" class=\"rounded-circle\"\/><\/p>\n<p>                                <\/a>\n                                <\/div>\n<\/p><\/div>\n<p>Apoorv is a seasoned AI and Data Science leader with over 14 years of experience, including more than a decade focused on Data Science, Machine Learning, and Deep Learning. As the Head of Training at Analytics Vidhya, he has spearheaded the development of industry-leading AI programs, including courses on Generative AI, LLM Agents, MLOps, and Advanced Machine Learning, shaping the skills of thousands of professionals.<\/p>\n<\/p><\/div>\n<\/p><\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>Crafting the perfect resume is a tedious task \u2013 whether you\u2019re a fresh graduate stepping into the job market, or a seasoned professional aiming for that next big career move. But what if you could have a personal resume reviewer at your fingertips \u2013 without spending any money on LinkedIn Premium or hiring a pricey [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":86012,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12033],"tags":[3038,2539,25471,16336,3749,2345],"dealstore":[],"offerexpiration":[],"class_list":["post-86011","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics","tag-agent","tag-building","tag-crewai","tag-resume","tag-review","tag-system"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Building a Resume Review Agent System with CrewAI - Som2ny Network<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fivemor.com\/?p=86011\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building a Resume Review Agent System with CrewAI - Som2ny Network\" \/>\n<meta property=\"og:description\" content=\"Crafting the perfect resume is a tedious task \u2013 whether you\u2019re a fresh graduate stepping into the job market, or a seasoned professional aiming for that next big career move. But what if you could have a personal resume reviewer at your fingertips \u2013 without spending any money on LinkedIn Premium or hiring a pricey [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fivemor.com\/?p=86011\" \/>\n<meta property=\"og:site_name\" content=\"Som2ny Network\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-13T15:50:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Building-a-Resume-Reviewer-Agent-using-CrewAI.webp.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"872\" \/>\n\t<meta property=\"og:image:height\" content=\"473\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fivemor.com\/?p=86011#article\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/?p=86011\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\"},\"headline\":\"Building a Resume Review Agent System with CrewAI\",\"datePublished\":\"2025-02-13T15:50:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=86011\"},\"wordCount\":2248,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/?p=86011#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Building-a-Resume-Reviewer-Agent-using-CrewAI.webp.webp\",\"keywords\":[\"Agent\",\"Building\",\"CrewAI\",\"resume\",\"review\",\"SYSTEM\"],\"articleSection\":[\"Analytics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fivemor.com\/?p=86011#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fivemor.com\/?p=86011\",\"url\":\"https:\/\/fivemor.com\/?p=86011\",\"name\":\"Building a Resume Review Agent System with CrewAI - Som2ny Network\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=86011#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/?p=86011#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Building-a-Resume-Reviewer-Agent-using-CrewAI.webp.webp\",\"datePublished\":\"2025-02-13T15:50:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fivemor.com\/?p=86011#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fivemor.com\/?p=86011\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/?p=86011#primaryimage\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Building-a-Resume-Reviewer-Agent-using-CrewAI.webp.webp\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Building-a-Resume-Reviewer-Agent-using-CrewAI.webp.webp\",\"width\":872,\"height\":473},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fivemor.com\/?p=86011#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fivemor.com\/?bp_activities=1\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building a Resume Review Agent System with CrewAI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fivemor.com\/#website\",\"url\":\"https:\/\/fivemor.com\/\",\"name\":\"Som2ny Network\",\"description\":\"Daily Deals\",\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fivemor.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/fivemor.com\/#organization\",\"name\":\"Som2ny Network\",\"url\":\"https:\/\/fivemor.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"width\":300,\"height\":86,\"caption\":\"Som2ny Network\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"caption\":\"admin\"},\"sameAs\":[\"https:\/\/fivemor.com\"],\"url\":\"https:\/\/fivemor.com\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Building a Resume Review Agent System with CrewAI - Som2ny Network","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fivemor.com\/?p=86011","og_locale":"en_US","og_type":"article","og_title":"Building a Resume Review Agent System with CrewAI - Som2ny Network","og_description":"Crafting the perfect resume is a tedious task \u2013 whether you\u2019re a fresh graduate stepping into the job market, or a seasoned professional aiming for that next big career move. But what if you could have a personal resume reviewer at your fingertips \u2013 without spending any money on LinkedIn Premium or hiring a pricey [&hellip;]","og_url":"https:\/\/fivemor.com\/?p=86011","og_site_name":"Som2ny Network","article_published_time":"2025-02-13T15:50:51+00:00","og_image":[{"width":872,"height":473,"url":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Building-a-Resume-Reviewer-Agent-using-CrewAI.webp.webp","type":"image\/webp"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fivemor.com\/?p=86011#article","isPartOf":{"@id":"https:\/\/fivemor.com\/?p=86011"},"author":{"name":"admin","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371"},"headline":"Building a Resume Review Agent System with CrewAI","datePublished":"2025-02-13T15:50:51+00:00","mainEntityOfPage":{"@id":"https:\/\/fivemor.com\/?p=86011"},"wordCount":2248,"commentCount":0,"publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"image":{"@id":"https:\/\/fivemor.com\/?p=86011#primaryimage"},"thumbnailUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Building-a-Resume-Reviewer-Agent-using-CrewAI.webp.webp","keywords":["Agent","Building","CrewAI","resume","review","SYSTEM"],"articleSection":["Analytics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fivemor.com\/?p=86011#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fivemor.com\/?p=86011","url":"https:\/\/fivemor.com\/?p=86011","name":"Building a Resume Review Agent System with CrewAI - Som2ny Network","isPartOf":{"@id":"https:\/\/fivemor.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fivemor.com\/?p=86011#primaryimage"},"image":{"@id":"https:\/\/fivemor.com\/?p=86011#primaryimage"},"thumbnailUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Building-a-Resume-Reviewer-Agent-using-CrewAI.webp.webp","datePublished":"2025-02-13T15:50:51+00:00","breadcrumb":{"@id":"https:\/\/fivemor.com\/?p=86011#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fivemor.com\/?p=86011"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/?p=86011#primaryimage","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Building-a-Resume-Reviewer-Agent-using-CrewAI.webp.webp","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Building-a-Resume-Reviewer-Agent-using-CrewAI.webp.webp","width":872,"height":473},{"@type":"BreadcrumbList","@id":"https:\/\/fivemor.com\/?p=86011#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fivemor.com\/?bp_activities=1"},{"@type":"ListItem","position":2,"name":"Building a Resume Review Agent System with CrewAI"}]},{"@type":"WebSite","@id":"https:\/\/fivemor.com\/#website","url":"https:\/\/fivemor.com\/","name":"Som2ny Network","description":"Daily Deals","publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fivemor.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/fivemor.com\/#organization","name":"Som2ny Network","url":"https:\/\/fivemor.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","width":300,"height":86,"caption":"Som2ny Network"},"image":{"@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","caption":"admin"},"sameAs":["https:\/\/fivemor.com"],"url":"https:\/\/fivemor.com\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/86011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=86011"}],"version-history":[{"count":0,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/86011\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/media\/86012"}],"wp:attachment":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=86011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=86011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=86011"},{"taxonomy":"dealstore","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fdealstore&post=86011"},{"taxonomy":"offerexpiration","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fofferexpiration&post=86011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}