Resume Screening AI Agent is a production-ready Streamlit application that intelligently scores and shortlists resumes against job descriptions using local SentenceTransformers embeddings, Ollama-powered LLM reasoning, and a lightweight NumPy vector store. The system combines semantic similarity matching with skill and experience heuristics to provide comprehensive candidate evaluation with detailed strengths, weaknesses, and reasoning for each applicant. This project demonstrates advanced NLP techniques, AI agent architecture, and practical HR automation solutions.
|
|
|
|
|
This project currently contains:
- ✔ Production-ready Streamlit application
- ✔ Local Ollama + SBERT integration (no API costs)
- ✔ Multi-resume batch processing
- ✔ Intelligent ranking algorithm
- ✔ Detailed candidate insights
- ✔ CSV export functionality
- ✔ Modular and extensible codebase
git clone https://github.com/SRINIVASBN/Resume-Screening-AI-Agent.git
cd Resume-Screening-AI-Agent- Download Ollama from https://ollama.com
- Install and start Ollama:
ollama serve- Pull the Gemma3 model:
ollama pull gemma3:1b# Create virtual environment
python -m venv venv
# Activate (Windows)
.\venv\Scripts\Activate.ps1
# Activate (Mac/Linux)
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt# Windows PowerShell
$env:OLLAMA_URL = "http://127.0.0.1:11434/api/generate"
$env:OLLAMA_MODEL = "gemma3:1b"
# Mac/Linux
export OLLAMA_URL="http://127.0.0.1:11434/api/generate"
export OLLAMA_MODEL="gemma3:1b"streamlit run app/main.pyflowchart LR
subgraph UI[Streamlit UI]
JD[JD Upload]
RES[Resume Uploads]
TABLE[Shortlist Table]
end
JD -->|save| FM[File Manager]
RES -->|save| FM
FM --> PARSER[Document Parser]
PARSER --> TEXTS[Clean Text Corpus]
TEXTS -->|JD| EMB[SBERT Embedding Service]
TEXTS -->|Resumes| VECTOR[NumPy Vector Store]
EMB --> VECTOR
EMB --> MATCHER[Candidate Scorer]
VECTOR --> MATCHER
MATCHER --> LLM[LLM Client]
LLM --> MATCHER
MATCHER --> TABLE
Resume-Screening-AI-Agent/
├── app/
│ ├── main.py # Streamlit entrypoint
│ ├── embeddings/ # Embedding + vector-store management
│ ├── parsing/ # File parsing utilities
│ ├── prompts/ # Prompt templates
│ ├── ranking/ # Scoring + ranking logic
│ ├── utils/ # Logging, file IO, LLM client, helpers
│ └── storage/ # Local persistence
│ ├── uploads/ # Uploaded files
│ ├── chroma/ # Vector embeddings
│ └── app.log # Application logs
├── requirements.txt # Python dependencies
└── README.md # Documentation
- Users upload Job Description (JD) and multiple resumes
- pdfplumber extracts text with whitespace normalization
- Documents are cleaned and preprocessed
- Local SentenceTransformers (SBERT) generates embeddings
- Embeddings stored in NumPy-based vector store
- Fast cosine similarity computation
- Multi-layer scoring algorithm:
- Semantic similarity matching
- Skill detection heuristics
- Experience evaluation
- Weighted scoring system
- Ollama generates detailed insights:
- Candidate strengths
- Areas of improvement
- Reasoning for scores
- Context-aware evaluation
- Ranked shortlist displayed in table
- Expandable cards with detailed insights
- Downloadable CSV for offline review
|
|
|
git push origin main- Go to share.streamlit.io
- Connect your GitHub repository
- Set main file path:
app/main.py
Add to Streamlit Cloud secrets:
OLLAMA_URL = "https://your-ollama-host/api/generate"
OLLAMA_MODEL = "gemma3:1b"Click "Deploy" and your app will be live!
- Upload JD: Upload job description (PDF/TXT)
- Upload Resumes: Add multiple candidate resumes
- Run Screening: Click "Run Screening" button
- Review Results: Examine shortlist table
- Expand Cards: View detailed candidate insights
- Download CSV: Export results for offline review
- Location:
app/storage/app.log - Rotation: 1 MB per file
- Format: Timestamped with log levels
- Uploads:
app/storage/uploads/ - Vectors:
app/storage/chroma/ - Artifacts: Session-based persistence
- Ollama Dependency: Requires local Ollama instance running
- File Formats: Currently supports PDF and TXT only
- Layout Complexity: Complex PDF layouts may degrade extraction
- Skill Detection: Based on predefined dictionary
- Vector Store: Local persistence (not suitable for multi-user deployments)
- File Format Support: Add DOCX, HTML with fallback parsers
- Resume Parsing: Extract names, contact info via NLP tagging
- Skill Taxonomy: User-customizable keyword library
- Feedback Loop: Store reviewer decisions for model tuning
- Enterprise Features: Dockerfile, CI/CD workflows
- Cloud Storage: Migrate to managed vector databases
- Multi-language Support: International resume screening
- Advanced Analytics: Dashboard with hiring metrics
Contributions are welcome! Please feel free to submit a Pull Request.
SRINIVAS BN
CSE-AIML (2026)
RNSIT, Bengaluru