Inspiration

Hate how tedious and time-consuming applying to jobs can be?

So do we, and so do the thousands of recently laid-off tech employees. That's why we built Jobo - a suite of AI tools powered by RAG and agents to help you apply to jobs 10X faster!

What it does

Jobo solves two key problems:

  1. Job Sourcing: Industry giants like Indeed still rely on a keyword-focused search experience, which can be very limiting. It often overlooks the nuanced skills and experiences of candidates, failing to match them with the most relevant job opportunities.

Jobo addresses this by offering a tool called JoboSearch, a multimodal RAG search engine. An embedding-based retrieval search engine is all the rage now, given its flexibility and ability to understand and process the semantic meaning of queries. But JoboSearch takes this concept further by allowing you to input a PDF of your resume! This enables further personalization and gets you job recommendations that fit your skills, interests, and more!

  1. Filling Job Applications: Manually inputting the same information like name, email, LinkedIn URL, etc., over and over again for each application is a dreadful experience. Jobo offers a tool called JoboComplete, a Chrome extension, that automates input filling using LlamaIndex's RAG capabilities, which has information about your resume.

But what about non-standard questions, such as 'write a cover letter for company X'? We've got those covered too! We've equipped the ReAct Agent with a set of functions to choose from. These include a function to query resume information and another to write a cover letter, given a job description and a resume query engine. The agent interacts directly with the application page. For each question it encounters, it evaluates which function is best suited to answer that question. Then, it calls the appropriate function, providing it with the question from the application, to generate a relevant response.

How we built it

  1. JoboSearch: As mentioned earlier, JoboSearch is a multimodal job search engine. To build it, we scraped LinkedIn for 1000 job postings using the following keywords: “machine learning, data analyst, front-end engineer, product manager” in the Bay Area in California, using JobSpy API. We processed these by removing jobs with no job URL or descriptions, and filled missing data with the word “None”. We used LlamaIndex for all subsequent steps. We converted each posting into a TextNode with location, company name, title, etc., as metadata to be used later, and concatenated all information about a posting as text for embedding. We used Astra DB as a persistent storage for all embeddings. The goal is for users to retrieve job postings based on keywords and relevance to their experiences/skills as shown in their resumes. We created another query engine for information in the resume. Since the resume uploaded is a PDF, we used LlamaParse to extract its contents. We then asked this resume query engine to summarize the user’s experiences. This summary, in addition to keywords, is included in the prompt. Outputs are ranked by Cosine similarity to the prompt.

  2. JoboComplete: It is a Chrome extension built with a JavaScript/HTML frontend and a Python backend powered by FastAPI. JoboComplete uses JavaScript to feed relevant metadata about inputs to the Python backend, which serves a POST request with values to fill in using LlamaIndex's RAG and agentic capabilities. We've equipped a ReAct Agent with a set of functions to choose from. These include a function to query resume information and another to write a cover letter, given a job description and the resume query engine created for JoboSearch. The agent interacts directly with the application page. For each question it encounters, it evaluates which function is best suited to answer that question. Then, it calls the appropriate function, providing it with the question from the application, to generate a relevant response.

Challenges we ran into

  • Latency issues. We resolved this by switching to GPT 3.5 turbo.
  • Agentic inconsistencies. We resolved this by tweaking prompts and tools.

Accomplishments that we're proud of

We take great pride in developing a comprehensive tool for job applicants within just a weekend. This tool streamlines the entire job application process, from discovering the ideal job to submitting the application, ensuring a seamless experience from start to finish!

What we learned

  • Using AstraDB with LlamaIndex: We learned the intricacies of integrating AstraDB with LlamaIndex for efficient data handling.
  • Storing metadata in addition to embeddings: The importance of storing metadata along with embeddings for richer data representation.
  • Different retrievers: We experimented with various retrievers for the keywords: vector retriever for semantic matching, BM25 for a closer match to given keywords, and AutoRetriever for matching based on metadata.
  • Using Agents for interacting with variable web-forms and routing actions: Implementing agents proved crucial in managing diverse web forms and directing actions accordingly.
  • Prompt engineering to improve answers: We learned the art of prompt engineering, which significantly enhances the quality of responses from our system.

What's next for Jobo

  • Enabling OAuth to store information about users for JoboComplete: We plan to implement OAuth to securely store and manage user information.
  • Publishing the Chrome extension to the Chrome Store: Our next step is to make JoboComplete widely available by publishing it on the Chrome Store.
  • Improving on latency for JoboSearch and expanding the database of jobs: We are focused on reducing latency in JoboSearch and enlarging our job database for a more comprehensive search experience.
  • Updating jobs in the JoboSearch vector database on a schedule: We aim to regularly update our job database to ensure the most current and relevant job opportunities are available.

Built With

Share this project:

Updates