- AI
- A
How I Automated Job Search Using LLM
In light of recent news about layoffs in the IT industry, the issue of job searching is becoming increasingly acute even for people who are currently employed. It has also become relevant for me, as although my job is currently fine, there have been some signals suggesting the possible need to change it in the near future.
Background
And here I recall my past experience of job searching with hours of wandering through relevant sites, reading the next vacancy, trying to understand how certain employer requirements relate to the vacancy, whether they are added there because they are really needed or it is such a filter from unnecessary applicants. In general, monotonous, repetitive work of the type: "Opened a vacancy -> read it -> if interested, clicked the response button -> attached a cover letter, etc."
Of course, you can speed up the process by removing the point of reading the resume from this algorithm, but:
a) there is a good chance, clicking on everything in a row like a monkey, to respond to a vacancy that is not suitable for you; for some, this is normal, but I would not want to bother HRs once again about a vacancy that is not really interesting to me;
b) some particularly cunning employers add all sorts of keywords/questions to the description of their vacancies that need to be mentioned/answered in the resume; in my opinion, this is not the best practice, but I do not blame them for it.
Oh, if only there was someone who would read the vacancy for me, determine if it would be interesting to me, write a cover letter taking into account my resume, the text of the vacancy and all sorts of keywords, answer the accompanying questions and send all this to the employer...
Wait a minute, I think I know who will help me with this: LLM!
Ethical side of the issue
Of course, you can talk about how ethical all this is, but personally, I do not have such a question and here's why:
companies themselves use automation, including neural networks, in the selection and hiring of candidates, why shouldn't applicants do the same?
hiring is broken, recruiters are broken, it gets to the point that people are refused their own job in their own position
it's simply lazy to spend your precious time reading and clicking through dozens of vacancies and answering dozens of similar questions, knowing that at least half of the time your response will not even be noticed
Implementation
So, we figured out the ethical part, what's next? And then it turned out that quite recently a software called AiHawk was released, which does something similar, namely helps to send vacancies to employers on LinkedIn using a neural network. However, it does not have the functionality to select a potentially interesting vacancy for you, it responds to everything, but this can be fixed at the prompt level.
At the moment, I am interested in working in the Russian Federation, so it was decided to refine the software for some local job search site. The choice obviously fell on hh.ru. The original application is based on a combination of python + selenium + LLM API. Of course, you can try to integrate the API from hh.ru, but, as far as I know, there are difficulties with access to it + complaints about the overall crookedness. In general, it was decided to go the way of "if it works, don't touch it" and just refine the current project to work with hh.ru. I had never worked with selenium before, but it turned out to be simple, so I mastered it quite quickly, within a few days.
Of course, there are certain features that distinguish hh.ru from LinkedIn, for example, in the original project, the resume was created each time taking into account the new vacancy or pulled up in finished form from the file. On hh.ru, all resumes are initially ready in your personal account, you just need to choose the appropriate one and start looking for vacancies, and the search for vacancies on hh is organized more simply, so the process of reworking did not take much time.
As an LLM, the original project offers a choice of many different options, including OpenAI, Claude, Gemini, LLama, local models from Hugging Face, etc. I chose GPT-4o mini from OpenAI - the model is fast, works adequately, while one request costs about $0.0005, i.e. very moderate. However, there is always the possibility to choose any other model - I kept all the settings of the original project in terms of choosing an LLM. The only nuance: if the model is not stored locally on the computer, most likely you will need to bother with VPN, but for any Internet user in Russia, this has long been a must-have skill.
In general, the algorithm works like this:
We go to the website, if we haven't visited it before - we ask the user to log in, otherwise we just log in using the previously saved data from the previous session.
We load all necessary prompts and settings from configuration files.
We select the resume we need (specified in the configuration file).
If there are any additional search settings in the config - we set them on the website.
We go through the list of found vacancies, enter the next one, take its description, form a prompt, add information about me and my interests.
We ask the LLM if it thinks this vacancy is suitable for me. If the answer is yes, we move on to step 7, otherwise we return to step 5.
We click the apply button.
We use the LLM to generate the text of the cover letter, taking into account the vacancy and my resume, mentioning in the prompt the possible trick with hidden questions and keywords in the vacancy description. We attach it to our application.
If the employer has any additional questions (like what salary do you want, are you ready to come to the office, give your telegram, etc.), we give the text of this question to the LLM, first ask it to determine its category (personal information, contacts, work preferences, etc.), and then ask it to answer this question, attaching all available information from the corresponding category (the information about the user broken down by category is in a separate file).
If it is not possible to answer the question (there is no relevant information or instead of a question the cunning employer attached a link to some questionnaire in Google Docs) - we skip the vacancy and enter information about it in a separate file, let the user deal with it later.
Result
The video below is an example of the work. In it, the program starts, finds a job through the search (the search is specially configured so that only one job is found), applies for it, writes a cover letter, and also answers related questions. The model works adequately, well identifies jobs that would really interest me (had to tinker with the prompt here), writes competent cover letters (had to tinker with the prompt even more, initially wrote some crazy stuff), and correctly answers questions.
The project is on GitHub, you can find it at this link. It is still in beta version and bugs are possible (many bugs) + not all the desired functionality has been added yet. For example, it still cannot answer some types of questions or fails when it sees links to questionnaires on third-party sites (although I would also fail in its place), but it already handles 95% of jobs, and those it cannot handle are added to a special file that can then be viewed and clicked through manually. So if anyone is interested - welcome. Of course, suggestions for improvements and bug fixes are welcome.
Write comment