RAG Implementation
Seth HobsonCommunityCreated by Seth Hobson
- Skill
- Tool integration
- Data and AI
- MIT
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides a structured approach to implementing Retrieval-Augmented Generation (RAG) systems. It covers the end-to-end pipeline, including vector database selection, embedding model configuration, advanced retrieval strategies, and reranking techniques. It includes practical implementation patterns using LangGraph and LangChain to help developers build accurate, knowledge-grounded AI applications that minimize hallucinations.
What it does
- Explains the architecture of RAG systems including retrieval and generation phases.
- Provides a comparative overview of vector databases and embedding models.
- Details advanced retrieval strategies like hybrid search, multi-query, and HyDE.
- Demonstrates how to implement RAG pipelines using LangGraph.
- Offers patterns for contextual compression and parent document retrieval.
- Outlines document chunking strategies for optimized semantic search.
When to use it
- When building Q&A systems over proprietary or domain-specific documents.
- When you need to reduce LLM hallucinations by grounding responses in factual data.
- When creating chatbots that require access to current or private information.
- When implementing semantic search functionality for natural language queries.
- When building research tools that require source citations.
Advantages
- Enables LLMs to access and reason over private or external knowledge bases.
- Improves response accuracy and reliability through grounded context.
- Provides modular patterns for scaling retrieval performance.
- Supports diverse search requirements through hybrid and multi-query approaches.
- Facilitates the creation of transparent AI systems with source-backed answers.
Usage examples
- “How do I implement a hybrid search RAG pipeline?”
- The agent provides a code example using EnsembleRetriever to combine BM25 keyword matching with dense vector embeddings using weighted Reciprocal Rank Fusion.
- “What is the best way to improve retrieval accuracy for long documents?”
- The agent suggests using the Parent Document Retriever pattern, which uses small chunks for precise retrieval while maintaining larger parent chunks for context.
- “How can I use HyDE to improve my RAG system?”
- The agent provides a LangGraph implementation that generates a hypothetical document from the user's query to perform more effective semantic similarity searches.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/wshobson/rag-implementation/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip rag-implementation.zip -d .agents/skills
Documentation by Seth Hobson
RAG Implementation
Master Retrieval-Augmented Generation (RAG) to build LLM applications that provide accurate, grounded responses using external knowledge sources.
When to Use This Skill
Building Q&A systems over proprietary documents
Creating chatbots with current, factual information
Implementing semantic search with natural language queries
Reducing hallucinations with grounded responses
Enabling LLMs to access domain-specific knowledge
Building documentation assistants
Creating research tools with source citation
Core Components
1. Vector Databases
Purpose: Store and retrieve document embeddings efficiently
Options:
Pinecone: Managed, scalable, serverless
Weaviate: Open-source, hybrid search, GraphQL
Milvus: Local persistence with Lite, or self-hosted server deployments
Chroma: Lightweight, easy to use, local development
Qdrant: Fast, filtered search, Rust-based
pgvector: PostgreSQL extension, SQL integration
2. Embeddings
Purpose: Convert text to numerical vectors for similarity search
Models (2026):
| Model | Dimensions | Best For |
|---|---|---|
| voyage-3-large | 1024 | Claude apps (Anthropic recommended) |
| voyage-code-3 | 1024 | Code search |
| text-embedding-3-large | 3072 | OpenAI apps, high accuracy |
| text-embedding-3-small | 1536 | OpenAI apps, cost-effective |
| bge-large-en-v1.5 | 1024 | Open source, local deployment |
| multilingual-e5-large | 1024 | Multi-language support |
3. Retrieval Strategies
Approaches:
Dense Retrieval: Semantic similarity via embeddings
Sparse Retrieval: Keyword matching (BM25, TF-IDF)
Hybrid Search: Combine dense + sparse with weighted fusion
Multi-Query: Generate multiple query variations
HyDE: Generate hypothetical documents for better retrieval
4. Reranking
Purpose: Improve retrieval quality by reordering results
Methods:
Cross-Encoders: BERT-based reranking (ms-marco-MiniLM)
Cohere Rerank: API-based reranking
Maximal Marginal Relevance (MMR): Diversity + relevance
LLM-based: Use LLM to score relevance
Quick Start with LangGraph
from langgraph.graph import StateGraph, START, END
from langchain_anthropic import ChatAnthropic
from langchain_voyageai import VoyageAIEmbeddings
from langchain_pinecone import PineconeVectorStore
from langchain_core.documents import Document
from langchain_core.prompts import ChatPromptTemplate
from langchain_text_splitters import RecursiveCharacterTextSplitter
from typing import TypedDict, Annotated
class RAGState(TypedDict):
question: str
context: list[Document]
answer: str
# Initialize components
llm = ChatAnthropic(model="claude-sonnet-5")
embeddings = VoyageAIEmbeddings(model="voyage-3-large")
vectorstore = PineconeVectorStore(index_name="docs", embedding=embeddings)
retriever = vectorstore.as_retriever(search_kwargs={"k": 4})
# RAG prompt
rag_prompt = ChatPromptTemplate.from_template(
"""Answer based on the context below. If you cannot answer, say so.
Context:
{context}
Question: {question}
Answer:"""
)
async def retrieve(state: RAGState) -> RAGState:
"""Retrieve relevant documents."""
docs = await retriever.ainvoke(state["question"])
return {"context": docs}
async def generate(state: RAGState) -> RAGState:
"""Generate answer from context."""
context_text = "\n\n".join(doc.page_content for doc in state["context"])
messages = rag_prompt.format_messages(
context=context_text,
question=state["question"]
)
response = await llm.ainvoke(messages)
return {"answer": response.content}
# Build RAG graph
builder = StateGraph(RAGState)
builder.add_node("retrieve", retrieve)
builder.add_node("generate", generate)
builder.add_edge(START, "retrieve")
builder.add_edge("retrieve", "generate")
builder.add_edge("generate", END)
rag_chain = builder.compile()
# Use
result = await rag_chain.ainvoke({"question": "What are the main features?"})
print(result["answer"])Detailed patterns and worked examples
Detailed pattern documentation lives in references/details.md. Read that file when the navigation tier above is insufficient.
Files
- ATTRIBUTION.mdAdded by AutoGineer992 B
- LICENSELicence file added by AutoGineer1.0 KiB
- SKILL.md4.5 KiB
- references/details.md11.5 KiB
LICENSE
MIT License Copyright (c) 2024 Seth Hobson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs Python
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Seth Hobson
- Publisher
- Seth Hobson (Community)
- Source
- wshobson/agents · plugins/llm-application-dev/skills/rag-implementation · commit 4bde316
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Seth Hobson.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download rag-implementation.zip