Quickstart Guide
Get started with ragit in minutes.
Installation
pip install ragit
Your First RAG Assistant
You must provide an embedding source. Here are three options:
Option 1: Custom embedding function
from ragit import RAGAssistant
def my_embed(text: str) -> list[float]:
# Use any embedding API: OpenAI, Cohere, HuggingFace, etc.
return your_embedding_api(text)
assistant = RAGAssistant("docs/", embed_fn=my_embed)
results = assistant.retrieve("search query")
Option 2: With Ollama (nomic-embed-text)
from ragit import RAGAssistant
from ragit.providers import OllamaProvider
assistant = RAGAssistant(
"docs/",
provider=OllamaProvider() # Uses nomic-embed-text (768d)
)
results = assistant.retrieve("search query")
Option 3: With LLM for Q&A
from ragit import RAGAssistant
def my_embed(text: str) -> list[float]:
return your_embedding_api(text)
def my_generate(prompt: str, system_prompt: str = "") -> str:
return your_llm_api(prompt, system_prompt)
assistant = RAGAssistant(
"docs/",
embed_fn=my_embed,
generate_fn=my_generate
)
answer = assistant.ask("How does authentication work?")
Retrieval
# Get relevant chunks
results = assistant.retrieve("database configuration", top_k=5)
for chunk, score in results:
print(f"Score: {score:.3f}")
print(f"Content: {chunk.content[:200]}...")
print(f"Source: {chunk.doc_id}")
# Get formatted context string
context = assistant.get_context("database configuration", top_k=3)
Generation (requires LLM)
# Q&A with retrieval
answer = assistant.ask("How do I configure the database?")
# Direct generation
response = assistant.generate("Explain RAG in simple terms")
# Code generation
code = assistant.generate_code("Write a fibonacci function")
Document Loading
from ragit import load_text, load_directory, chunk_text
# Load single file
doc = load_text("README.md")
# Load directory
docs = load_directory("docs/", pattern="*.md")
# Custom chunking
chunks = chunk_text(text, chunk_size=512, chunk_overlap=50, doc_id="doc1")
Chunk Settings
assistant = RAGAssistant(
"docs/",
embed_fn=my_embed,
chunk_size=1024, # Characters per chunk
chunk_overlap=100 # Overlap between chunks
)
Hyperparameter Optimization
from ragit import RagitExperiment, Document, BenchmarkQuestion
def my_embed(text: str) -> list[float]:
return your_embedding_api(text)
def my_generate(prompt: str, system_prompt: str = "") -> str:
return your_llm_api(prompt, system_prompt)
docs = [Document(id="doc1", content="...")]
benchmark = [BenchmarkQuestion(question="...", ground_truth="...")]
experiment = RagitExperiment(
docs, benchmark,
embed_fn=my_embed,
generate_fn=my_generate
)
results = experiment.run(max_configs=20)
print(results[0]) # Best config