I've spent the last few days buried in resumes, bugs, and API docs — building HireFlow Agent for the Global AI Hackathon Series with Qwen Cloud.
Here's the problem I kept running into while thinking about hiring tools: most systems either trust a keyword-matching algorithm blindly, or they make a recruiter read every single resume by hand. Neither is great. A good score can miss a career-switcher with real potential, and a bad score can slip through someone who just knows how to game an ATS. So I wanted to build something that does both jobs at once — a fast ML filter, and a reasoning layer that actually questions the filter when something doesn't add up.
That became HireFlow Agent. It takes a resume and a job description, runs them through a Random Forest model for a quick fit score, and then hands both the score and the resume to Qwen. Qwen doesn't just rubber-stamp the number — it reads the resume itself, checks whether it agrees with the ML score, and only then decides: shortlist, reject, or send to a human. That last option matters most to me. If the model and the score disagree, or if the resume has something a number can't capture — like solid open-source work, or a non-traditional background — it doesn't guess. It flags it for a person to look at.
Getting Qwen wired in was actually the easy part, since Alibaba Cloud Model Studio exposes an OpenAI-compatible endpoint, so the integration was mostly just pointing an existing OpenAI client at a different base URL and swapping the model name to qwen-plus. The harder part was making the output reliable enough to trust — I had to write the system prompt so it walks through its reasoning step by step before answering, and I learned pretty quickly that it sometimes wraps its JSON in markdown code fences, so I added a small cleanup step before parsing.
The bug I'm most annoyed (and secretly proud) of fixing: at one point every resume I uploaded came back with the candidate's name as "%pdf-1.5" — which, if you've never seen it, is literally the first line of any PDF file's raw binary data. My parser was reading the file as plain text instead of actually extracting the content from it. It took a bit of digging to realize the buffer was never being passed through a real PDF parser at all. Once I wired in proper text extraction and added a check that fails loudly instead of quietly returning garbage, real names started showing up — including my own, when I tested it on my own resume.
If there's one thing this project reinforced for me, it's that the interesting engineering in an "AI agent" usually isn't the prompt — it's everything around it. The guardrails, the fallback paths, the moment where you decide the model shouldn't get the final say. That's what actually makes something feel like an agent instead of just an API call with extra steps.
What's next: I'd like to get the backend fully running on Alibaba Cloud infrastructure end to end, hook up real calendar scheduling instead of just suggesting time slots, and eventually let recruiter overrides on the "human review" cases feed back into retraining the ML model.
Try it live: https://hireflow-agent.onrender.com
Code: https://github.com/PitendraKumarsahoo/candidateforge
Built for the Global AI Hackathon Series with Qwen Cloud.
Top comments (0)