RAGOpt eliminates manual hyperparameter tuning in your RAG pipelines with Bayesian optimization 🚀
- Documentation: https://ragopt.aboneda.com
- Colab Notebook: https://colab.research.google.com/drive/1hrfAHCfm3x0Ov-amCEHpptMiyoqC-McE
RAGOpt is a Python framework to optimize Retrieval-Augmented Generation (RAG) pipelines. It eliminates manual hyperparameter tuning using Bayesian optimization, automatically finding the best configuration for your dataset and use case.
- Optimizes 20+ RAG hyperparameters including chunk size, overlap, embedding strategies, and LLM selection.
- Flexible with any LangChain-compatible model or provider.
- Partially Opinionated - Smart defaults with full flexibility for customization
- Generates Pareto-optimal configurations for your specific data.
- Comprehensive Metrics - Quality (precision, recall, faithfulness), performance (latency, cost), and safety (toxicity, bias)
pip install rag-optfrom langchain.chat_models import init_chat_model
from rag_opt.rag import DatasetGenerator
# Initialize LLM
llm = init_chat_model(
model="gpt-3.5-turbo",
model_provider="openai",
api_key="sk-***"
)
# Generate Q&A pairs from your documents
data_gen = DatasetGenerator(llm, dataset_path="./data")
dataset = data_gen.generate(10)
dataset.to_json("./rag_dataset.json")Create rag_config.yaml:
chunk_size:
bounds: [512, 1024]
dtype: int
max_tokens:
bounds: [256, 512]
dtype: int
chunk_overlap:
bounds: [0, 200]
dtype: int
temperature:
bounds: [0.0, 1.0]
dtype: float
search_type:
choices: ["similarity", "mmr", "hybrid"]
vector_store:
choices:
faiss: {}
pinecone:
api_key: "YOUR_API_KEY"
index_name: "your-index"
embedding:
choices:
openai:
api_key: "YOUR_API_KEY"
models:
- "text-embedding-3-large"
- "text-embedding-ada-002"
huggingface:
models:
- "all-MiniLM-L6-v2"
llm:
choices:
openai:
api_key: "YOUR_API_KEY"
models:
- "gpt-4o"
- "gpt-3.5-turbo"
k:
bounds: [1, 10]
dtype: int
use_reranker: falsefrom rag_opt.dataset import TrainDataset
from rag_opt.optimizer import Optimizer
# Load dataset
train_dataset = TrainDataset.from_json("rag_dataset.json")
# Initialize optimizer
optimizer = Optimizer(
train_dataset=train_dataset,
config_path="rag_config.yaml",
verbose=True
)
# Find optimal configuration
best_config = optimizer.optimize(n_trials=3, best_one=True)
best_config.to_json()Output example:
{
"chunk_size": 500
"max_tokens": 100
"chunk_overlap": 200
"search_type": "hybrid"
"k": "1"
"temperature": 1.0
"embedding":
"provider": "openai"
"model": "text-embedding-3-large"
"llm":
"provider": "openai"
"model": "gpt-4o"
"vector_store":
"provider": "faiss"
"use_reranker": "true"
}- Dataset Generation - Create synthetic Q&A pairs from your documents
- Search Space Definition - Configure which parameters to optimize
- Bayesian Optimization - Intelligently sample and evaluate configurations
- Multi-Metric Evaluation - Assess quality, performance, and safety
- Pareto-Optimal Results - Get the best configurations for your priorities
- AutoRAG: Uses Bayesian optimization instead of grid search like AutoRAG
- Ragas: Flexible evaluation framework, not rigid—bring your own metrics
- Manual Tuning: Systematic, data-driven approach saves time and improves results
This project is licensed under the terms of the MIT license.