Projects / profile-search-rag
Profile extraction and search
An internal tool that extracts structured profiles from CVs with OCR and an LLM, then finds matches by meaning with an explanation for each.
- Period
- 3 months
- Role
- Developer
- Context
- Internal tool, consulting firm
- Cloud
- GCP
[ Architecture ]
How it works
Run a scenario to follow a request through the system. Select a component to read its role and its flows.
a recruiter
A synthetic CV
A CV file added to the pool.
cv.pdf
- Press Add a CV to watch the request go through the system.
- 01RecruiterUploads a CV
- 02Search appFile accepted
- 03OCR & extractionText extracted · structured profile built
- 04Profile & vector storeProfile stored · vector added to the index
- ✓The profile is stored as structured data and is searchable by meaning within moments.
- 01RecruiterTypes the query
- 02Search appQuery received
- 03Profile & vector storeQuery encoded · nearest profiles found
- 04Match explainerEach profile re-read against the query
- 05Search appShortlist displayed with a reason for each match
- ✓The recruiter gets a shortlist ranked by meaning, with a short reason for each match.
Problem
Finding the right profile in a large pool of CVs is slow. CVs come in many layouts and keyword search misses related wording, so shortlists take a long time to build.
Data
CV files, extracted text, structured profiles and their embeddings. CVs are personal data, so demos use synthetic CVs only.
Approach
- OCR and LLM extraction. OCR reads the CV and an LLM turns the text into a structured profile.
- Semantic search. Profiles are embedded and indexed in a vector search engine, so a query matches on meaning.
- Explained matches. An LLM re-reads the nearest profiles against the query and says why each matches, in a simple Streamlit app.
Evaluation
The tool was judged by the time it takes to build a shortlist, compared with the manual process.
Result
About 5,000 profiles were indexed, and building a shortlist took about 40 % less time.
My role
I built the extraction, the indexing, the search and the interface.