Author: Sandeep Kumar
Upload any PDF → system chunks it → embeds with OpenAI → stores in FAISS vector store → you ask questions → retrieves relevant chunks → GPT-4o-mini generates grounded answers with source citations.
| Component | Choice | Why |
|---|---|---|
| Embeddings | text-embedding-3-small | Best cost/quality ratio |
| Vector Store | FAISS | Fast local similarity search |
| LLM | GPT-4o-mini | Fast, cheap, accurate |
| Chunking | RecursiveCharacterTextSplitter | Preserves sentence boundaries |
| Framework | LangChain | Industry standard RAG tooling |
project4-rag/
├── app.py ← Streamlit UI (upload, chat, sources)
├── rag_engine.py ← Core RAG pipeline (chunk, embed, retrieve, generate)
├── .env ← API keys (never commit this)
├── .gitignore
├── requirements.txt
└── README.md
pip install -r requirements.txtOpen .env and replace the placeholder:
OPENAI_API_KEY=sk-your-actual-key-here
streamlit run app.py- Upload any PDF in the sidebar
- Click Build Vector Store
- Ask questions in the chat box
PDF
└─► PyPDFLoader (extract text per page)
└─► RecursiveCharacterTextSplitter (chunk into ~500 char pieces)
└─► OpenAI text-embedding-3-small (embed each chunk → vector)
└─► FAISS (store all vectors locally)
└─► User asks question
└─► Embed question → similarity search → top-4 chunks
└─► GPT-4o-mini (answer grounded in chunks)
└─► Display answer + source citations