A comprehensive project demonstrating Retrieval-Augmented Generation (RAG) techniques combined with advanced prompt engineering and optimization strategies.
This project explores RAG (Retrieval-Augmented Generation) systems that combine document retrieval with large language models to provide accurate, knowledge-grounded responses. It includes extensive prompt optimization experiments and evaluation metrics.
- Implement RAG architecture from scratch
- Optimize retrieval mechanisms
- Fine-tune prompt engineering
- Evaluate answer quality and relevance
- Compare different retrieval strategies
- Benchmark against baseline approaches
RAG_Implementation_and_Prompt_Optimization/
βββ RAG_Implementation_and_Prompt_Optimization.ipynb # Main notebook
βββ RAG_Assignment_Report.pdf # Detailed report
βββ *.pdf # Sample documents for testing
βββ README.md # Project documentation
- LLM Framework: LangChain, LlamaIndex
- Vector Database: Faiss, Pinecone, Chroma
- Embeddings: OpenAI, Hugging Face, Sentence Transformers
- Retrieval: BM25, Dense vectors, Hybrid search
- Evaluation: BLEU, ROUGE, BERTScore, Semantic similarity
- Framework: PyTorch, TensorFlow
-
Retrieval Methods:
- Dense vector retrieval (embedding-based)
- Sparse retrieval (BM25)
- Hybrid retrieval (combination)
- Metadata filtering
-
Prompt Engineering:
- Few-shot learning
- Chain-of-thought prompting
- Prompt templates
- Context management
-
Optimization Techniques:
- Retriever fine-tuning
- Prompt template optimization
- Temperature and sampling parameters
- Chunk size optimization
-
Evaluation Metrics:
- Answer relevance
- Context accuracy
- Response coherence
- Factual correctness
- Python 3.8+
- Jupyter Notebook
- OpenAI API key (or alternative LLM provider)
- Vector database (Faiss provided locally)
-
Clone the repository:
git clone <repository-url> cd RAG_Implementation_and_Prompt_Optimization
-
Install dependencies:
pip install -r requirements.txt
-
Set up environment variables:
export OPENAI_API_KEY="your-api-key" export HUGGINGFACE_API_KEY="your-api-key"
-
Open the notebook:
jupyter notebook RAG_Implementation_and_Prompt_Optimization.ipynb
User Query
β
Query Embedding / Preprocessing
β
Vector Database Retrieval
β
Chunk Reranking (Optional)
β
Context Assembly
β
Prompt Construction
β
LLM Generation
β
Post-processing
β
Final Answer
- PDF/text extraction
- Chunking strategies (fixed size, semantic)
- Metadata preservation
- Embedding generation
- Faiss for dense embeddings
- Similarity search
- VectorStore interface
- Scaling considerations
- Multiple retrieval strategies
- Reranking mechanisms
- Metadata filtering
- Hybrid search
- Role definition
- Context injection
- Few-shot examples
- Output formatting
- Model selection (GPT-4, Claude, Mistral, etc.)
- Temperature control
- Token limits
- Response parsing
# Retrieval Config
EMBEDDING_MODEL = "text-embedding-3-small"
CHUNK_SIZE = 500
CHUNK_OVERLAP = 100
RETRIEVAL_K = 5 # Top-k documents
# Prompt Config
SYSTEM_PROMPT = "You are a helpful assistant..."
MAX_TOKENS = 2048
TEMPERATURE = 0.7
# Optimization
RERANKER_MODEL = "cross-encoder"
QUERY_EXPANSION = True
HYDE = False # Hypothetical Document Embeddingsfrom langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
# Initialize components
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.load_local("faiss_index", embeddings)
# Create retriever
retriever = vectorstore.as_retriever(search_kwargs={"k": 5})
# Build RAG chain
qa_chain = RetrievalQA.from_chain_type(
llm=OpenAI(temperature=0.7),
chain_type="stuff",
retriever=retriever
)
# Query
response = qa_chain.run("What does the document say about...?")
print(response)| Strategy | Description | Impact |
|---|---|---|
| Few-shot | Include examples in prompt | Improves consistency |
| CoT | Chain-of-thought reasoning | Better complex reasoning |
| Role Priming | Define assistant role | Focused responses |
| Constraints | Add explicit limitations | Quality control |
| Format Specification | Define output format | Structured output |
-
Retrieval Metrics:
- Precision@K
- Recall@K
- MRR (Mean Reciprocal Rank)
- NDCG (Normalized Discounted Cumulative Gain)
-
Generation Metrics:
- BLEU Score
- ROUGE Score
- BERTScore
- Semantic similarity (cosine)
-
Human Evaluation:
- Relevance (1-5)
- Faithfulness (grounded in context)
- Completeness
- Fluency
The project includes test documents (PDFs) covering:
- Banking and Finance
- HR and Consulting
- IT and Technology
- Entertainment
The assignment report includes:
- Baseline vs optimized performance
- Impact of different strategies
- Evaluation comparisons
- Recommendations for production
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Submit a pull request
- Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks
- Prompt Engineering Guide
- LangChain Documentation
- Faiss Documentation
This project is open source and available under the MIT License.
- Test retrieval quality separately from generation
- Iterate on chunks size based on domain
- Compare multiple embedding models
- Regular evaluation on test queries
- Monitor LLM cost vs performance
- Cache embeddings for large datasets
For questions or suggestions, please open an issue or contact the project maintainers.