Skip to main content

rag-patterns

RAG: embeddings, chunking, hybrid search (BM25+vector), reranking, CRAG, multi-hop. Triggers: RAG, embedding, pgvector, Qdrant, Pinecone, Weaviate, reranker, semantic search.

Informations de source

Dépôt
softspark/ai-toolkit
Dernière activité de la source
6 mai 2026 à 09:48
Langue détectée de SKILL.md
anglais
Étoiles
179
Forks
21

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
rag-patterns
description
RAG: embeddings, chunking, hybrid search (BM25+vector), reranking, CRAG, multi-hop. Triggers: RAG, embedding, pgvector, Qdrant, Pinecone, Weaviate, reranker, semantic search.
effort
medium
user-invocable
false
allowed-tools
Read
# RAG Patterns Skill ## Core Patterns ### 1. Hybrid Search Combine dense (vector) and sparse (BM25) retrieval with RRF fusion: ```python # RAG-MCP hybrid search result = await hybrid_search_kb( query="rate limiting configuration", service="nginx", limit=10 ) ``` ### 2. Corrective RAG (CRAG) Self-correcting retrieval with relevance validation: ```python result = await crag_search( query="fuzzy query", relevance_threshold=0.4, max_retries=2 ) # Or via smart_query result = await smart_query(query="...", use_crag=True) ``` ### 3. HyDE (Hypothetical Document Embeddings) Generate hypothetical answers for better retrieval on conceptual queries: ```python result = await smart_query( query="conceptual question about design patterns", use_hyde=True ) ``` ### 4. Multi-hop Retrieval Complex queries requiring multiple retrieval steps: ```python result = await multi_hop_search( query="Compare nginx with varnish for Magento cache", max_hops=3 ) # Or via smart_query result = await smart_query(query="compare A vs B", use_multi_hop=True) ``` --- ## Indexing Best Practices | Aspect | Recommendation | |--------|----------------| | Chunk size | 512-1024 tokens | | Overlap | 10-20% of chunk | | Structure | Preserve headers, sections | | Metadata | Include title, path, date, category, tags | | Frontmatter | YAML with standardized fields | ### Frontmatter Template ```yaml --- title: "Document Title" service: {project-name} category: reference|howto|procedures|troubleshooting|decisions|best-practices tags: [tag1, tag2, tag3] last_updated: "YYYY-MM-DD" --- ``` --- ## MCP Tools Reference (v5.5.0) | Tool | Use Case | Speed | |------|----------|-------| | `smart_query` ⭐ | Default for 90% of queries | 2-4s | | `hybrid_search_kb` | Raw vector + text search | <1s | | `get_document` | Full document content | <1s | | `crag_search` | Vague/fuzzy queries | 1-3s | | `multi_hop_search` | Complex reasoning | 20-30s | ### Tool Selection Guide ```python # Default - auto-routing smart_query("specific technical question") # Vague query - self-correcting crag_search("jak to skonfigurować") # Complex comparison multi_hop_search("nginx vs varnish performance comparison") # Known document get_document(path="kb/reference/architecture.md") ``` --- ## Quality Metrics | Metric | Description | Target | |--------|-------------|--------| | Faithfulness | Answer based on context | >70% | | Relevancy | Answer addresses question | >70% | | Context Precision | Found context is accurate | >60% | | Latency (p95) | Response time | <2s | | Precision@k | Relevant results in top-k | >80% | --- ## Retrieval Optimization ### Reranking ```python # Retrieve more, rerank to top-k initial_results = await hybrid_search_kb(query, limit=20) reranked = rerank_results(initial_results, query) final_results = reranked[:5] ``` ### Context Window Management - Place critical info at start/end (serial position effect) - Summarize long documents before insertion - Use tiered context: critical → supporting → background ### Query Enhancement - Query expansion with synonyms - Query decomposition for complex questions - Entity extraction for filtering --- ## Anti-Patterns ❌ **Don't**: - Skip reranking for final results - Use very large chunks (>2000 tokens) - Ignore metadata in retrieval - Trust LLM output without citation - Use `latest` for model versions ✅ **Do**: - Use top-k=20 → rerank → top-5 - Chunk semantically (by section) - Enrich metadata at indexing time - Require source attribution in answers - Pin model versions for reproducibility --- ## RAG System Implementation ### Key Files (Typical Structure) ``` scripts/ ├── search_core.py # Core search ├── query_enhancements.py # HyDE, query expansion ├── corrective_rag.py # CRAG ├── multi_hop.py # Multi-hop ├── unified_indexer.py # Indexing └── rag_evaluator.py # Evaluation ``` ### Running RAG Commands **Direct execution:** ```bash # Index KB make index # Evaluate RAG python scripts/evaluate_rag.py # Detect gaps python scripts/knowledge_gaps.py --detect ``` **Docker execution (if containerized):** ```bash # Index KB docker exec {app-container} make index # Evaluate RAG docker exec {api-container} python3 scripts/evaluate_rag.py # Detect gaps docker exec {api-container} python3 scripts/knowledge_gaps.py --detect ``` ## Rules - **MUST** chunk by document structure (headers, lists, code fences), not by fixed byte/token count — structure-aware chunking recovers 20-40% of retrieval quality on technical docs - **MUST** always use **hybrid search** (BM25 + vector) for keyword-heavy queries — pure vector search misses exact identifiers (function names, config keys) - **NEVER** trust a single embedding model on multilingual corpora; pair with a bilingual model or translate queries at the edge - **NEVER** index without content-hash change detection — full rebuilds on every change waste embedding budget and corrupt orphan tracking - **CRITICAL**: every response includes verifiable citations (source path + exact chunk). A RAG answer without traceable sources is a hallucination wearing a badge. - **MANDATORY**: evaluate with a golden dataset (faithfulness, relevancy, context precision) before promoting any pipeline change to production ## Gotchas - Top-k cosine similarity is **not** relevance — semantically close chunks may be topically wrong. Always compare hybrid vs pure-vector scores on a held-out set before committing to one. - Default embedding models (e.g., `text-embedding-ada-002`) underperform on long technical docs (>8k tokens). For long-form content consider chunking before embedding, not embedding then slicing. - Chunk overlap (10-20%) helps narrative text but duplicates storage and token cost. Code and structured tables do not benefit from overlap — disable per content type. - Cross-encoder rerankers (e.g., `bge-reranker`) add 100-300ms per query. For real-time UX, rerank only the top-20 candidates, not the top-100. - RAG failure modes are structural (retrieval, routing, chunking), not prompt-level. Before "tuning the prompt", check retrieval metrics — a prompt fix on top of broken retrieval is theater. - Query rewriting (HyDE, hypothetical doc generation) improves some queries and degrades others. A/B test before enabling globally; a blanket "always rewrite" often regresses simple lookups. ## When NOT to Load - For **executing** a reindex — use `/index` (task skill) - For measuring RAG quality — use `/evaluate` (task skill) - For chunking documentation strategy without an index — this skill assumes you already have a vector store; use `/architecture-decision` for pipeline choice - For MCP-specific retrieval via `smart_query()` — the tool is already built; reach for this skill only when tuning the underlying index - For prompt engineering alone without retrieval concerns — use `/prompt-caching-patterns` or the relevant language skill
Voir sur GitHub