A retrieval-augmented generation system that helps job seekers tailor resumes, draft grounded cover letters, and generate role-specific interview questions using structured candidate knowledge aligned to a job description.
Unlike generic LLM prompts, this system separates retrieval from generation to prevent hallucinated experience and ensure claims are backed by actual candidate evidence.
Generic LLMs:
- Blend job description requirements with invented experience
- Hallucinate tools, metrics, or skills
- Produce generic cover letters
This system:
- Stores structured candidate experience in a persistent FAISS vector store
- Builds an ephemeral index of each uploaded job description
- Performs two-stage retrieval (JD → Candidate)
- Applies strict grounding guardrails before LLM generation
User Uploads Job Description
↓
Ephemeral JD Vector Index (FAISS)
↓
Retrieve Key JD Requirements
↓
Retrieve Matching Candidate Evidence (Persistent FAISS)
↓
Construct Grounded Prompt with Evidence Sections
↓
Groq LLaMA 3.1 8B (API)
↓
Interview Questions / Cover Letter- Resume, work experience, projects, STAR stories
- Embedded using sentence-transformers
- Stored in FAISS
- Rebuilt only when candidate docs change
- Built per uploaded JD
- Ensures role-specific requirement extraction
- Prevents cross-role contamination
- Retrieve important JD requirement chunks
- Retrieve aligned candidate evidence
This prevents hallucinated claims and enforces grounding.
- Explicit system rules
- Structured evidence formatting
- No invention of unsupported experience
- Gap awareness if JD requirement lacks supporting evidence
- Groq LLaMA 3.1 8B
- Fast inference
- Reduced local resource usage
- Controlled output token limits for cost efficiency
- Python
- Streamlit
- LangChain
- FAISS (local vector store)
- SentenceTransformers (embeddings)
- Groq API (LLaMA 3.1 8B)
- python-dotenv
git clone https://github.com/99anjalipai/InterviewAssistant.git
cd InterviewAssistantpython -m venv rag_env
rag_env\Scripts\activatepip install -r requirements.txtCreate a .env file in the project root:
GROQ_API_KEY=your_api_key_herePlace your candidate documents (resume, work experience, projects, STAR stories) inside:
candidate_docs/Then run:
python -m ingest.build_candidate_indexThis process will:
- Chunk your documents
- Generate embeddings using
sentence-transformers - Create a persistent FAISS index inside:
stores/candidate_faiss/streamlit run app.pyOpen the provided local URL in your browser to start using the application.
app.py– Streamlit frontendrag_engine.py– Retrieval and grounding pipelinescripts/llm_groq.py– Groq LLM wrapperprompts.py– Prompt templates for generationingest/– Candidate index buildercandidate_docs/– Private candidate knowledge base (gitignored)stores/– FAISS vector store (gitignored)
- Resume diff highlighting against JD
- Skill coverage scoring
- Explicit gap analysis report
- Multi-JD comparison
- Conversational interview simulation mode
- Deployment version (Docker or Streamlit Cloud)
- Candidate documents and vector stores are excluded from version control.
- API usage is token-limited to control cost.
- Retrieval parameters are tuned for grounding accuracy and efficiency.