Skills wshobson agents

rag-implementation

Use it when:
You're building a question-answering bot, a documentation assistant or a search over your own documents, and want answers grounded in them.
It does:
Gives the agent the parts of a RAG system, which fetches relevant passages and hands them to the model, and the options for each part.
You get:
A design and Python code in LangChain and LangGraph; its reference file adds chunking, vector store setup, reranking, citation prompts and evaluation.
Covers:
Pinecone, Weaviate, Milvus, Chroma, Qdrant and pgvector, embedding models from Voyage, OpenAI and open source, and dense, keyword and hybrid search.

TL;DR

A reference, not a step-by-step workflow. RAG, retrieval-augmented generation, means fetching passages from your own documents and putting them in the model's prompt, so answers rest on them rather than on the model's memory. The SKILL.md lists four parts and the choices for each: a vector database to store document embeddings, an embedding model to turn text into vectors (with a 2026 table of models and their dimensions), a retrieval strategy (dense, keyword such as BM25, hybrid, multi-query, or HyDE, which searches with a hypothetical answer), and reranking to reorder results. Its quick start builds a two-step LangGraph graph, retrieve then generate, with Claude, Voyage embeddings and Pinecone. A reference file holds worked code for hybrid search with rank fusion, multi-query retrieval, contextual compression, parent-document retrieval and HyDE; chunking by characters, tokens, meaning or Markdown headers; setup for five vector stores; metadata filtering, MMR (which balances relevance with variety), cross-encoder and Cohere reranking; prompts that cite sources; structured answers; and a function that scores retrieval precision and recall, and answer quality with an LLM judge.

Summarizes the skill at 4bde316.

npx skills add https://github.com/wshobson/agents --skill rag-implementation
Total Downloads
14,400 on skills.sh, Nov 9, 2026
Repo stars
42,334 wshobson/agents
First seen
Jan 20, 2026 on skills.sh
Weekly Downloads
222
+2% over the 8 weeks to Nov 9
Weekly values
Week toInstalls
Sep 21218
Sep 28252
Oct 5331
Oct 12271
Oct 19227
Oct 26253
Nov 2224
Nov 9222
Category

Build agents, orchestrate workers and give agents memory.

Everything for building software: planning, coding, debugging, design, frameworks, cloud, agents and skills.

Type

Knowledge and rules the agent applies while it works: best practices, design principles, API references.

Effect

Adds no side effects of its own. It shapes how the agent thinks, writes or reviews. Guidelines and routers are always effect:none, even when the task they support edits code.

Needs

Instructions only. Works in any agent that supports skills.

Publisher

Everyone else. Unverified vendor claims default to community.

Topics
Stack

SKILL.md

From wshobson/agents at 4bde316. Checked daily, last changed Nov 6, 2026.

Frontmatter
name: rag-implementation
description: 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.

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.