All skills
wshobson avatar

/rag-implementation

@511f834
by Seth Hobsonwshobson/agents40k stars
4,281

Build Retrieval-Augmented Generation (RAG) systems for LLM applications with vector databases and semantic search. Use when implementing knowledge-grounded AI, building document Q&A systems, or integrating LLMs with external knowledge bases.

Use this Skill: https://skilld.dev/gh/wshobson/agents/rag-implementation

This session only. Nothing lands on disk.

SKILL.md

≈65 tokens always: the name and description. ≈1.1k when used: this file. ≈2.8k more on demand in 1 file.

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: High performance, on-premise
  • 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.

Source: SKILL.md on GitHub

No alerts16d5 checks · Risk SAFE
  • Gen Agent Trust Hub16d

    The skill provides a safe and comprehensive framework for implementing Retrieval-Augmented Generation (RAG) systems using standard industry patterns and well-known services. A low-severity risk of indirect prompt injection is noted, which is inherent to RAG architectures when processing untrusted external data.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW · No issues

  • Runlayer6mo

    1/1 file flagged

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at 511f834. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 3 days ago.

Activeupdated 3 months ago
  • rag
  • retrieval-augmented-generation
  • vector-database
  • embeddings
  • semantic-search
  • langgraph
  • llm
  • pinecone
  • weaviate
  • chroma

README badge

README badge for wshobson/agents/rag-implementation

Implements Retrieval-Augmented Generation systems using vector databases, embeddings, and semantic search to ground LLM responses in external knowledge. Covers vector store options (Pinecone, Weaviate, Chroma, Qdrant, pgvector), embedding models, retrieval strategies (dense, sparse, hybrid, multi-query), and reranking approaches, with a LangGraph example using Claude and Voyage embeddings.

Generated from the current SKILL.md.

Which vector database should I use?
Choice depends on your deployment model: Pinecone for managed/serverless, Weaviate for hybrid search, Chroma for local development, pgvector for SQL integration, or Qdrant for filtered search. The skill documents tradeoffs for each.
What embedding model should I use with Claude?
Voyage-3-large is Anthropic's recommended embedding model for Claude applications. For code search, use voyage-code-3; for open-source deployments, use bge-large-en-v1.5.
Does this skill cover reranking?
Yes. The skill documents reranking methods including cross-encoders, Cohere Rerank API, maximal marginal relevance (MMR), and LLM-based scoring to improve retrieval quality.
Can I combine keyword and semantic search?
Yes. The skill describes hybrid search, which combines dense retrieval (embeddings) and sparse retrieval (BM25/TF-IDF) with weighted fusion.
Does the quick start example work with other LLMs besides Claude?
The example uses Claude, but the pattern is framework-agnostic. You can swap ChatAnthropic for any LangChain LLM provider and adjust embeddings accordingly.

Generated from the current SKILL.md. These answers refresh after source changes.